Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

Java_LaptrinhOOP

Ch°¡ng : LÂ#P TRINH H¯ NG ÔI T¯ #NG TRONG JAVA

Java la mô#t ngôn ng° lâ#p trinh h°¡ng ôi t°¡#ng. Nêu ba#n ch°a bao gi¡ dung mô#t ngôn ng° lâ#p trinh h°¡ng ôi t°¡#ng tr°¡c ây, ba#n cân pha i hiê u cac khai niê#m sau : lâ#p trinh h°¡ng ôi t°¡#ng (Object Oriented Programming) la gi ? ôi t°¡#ng (Object), l¡p (class) la gi, môi quan hê# gi°a ôi t°¡#ng va l¡p, g¡ i thông iê#p (Messages) ên cac ôi t°¡#ng la gi ?

I. KHAI NIÊ#M LÂ#P TRINH H¯ NG ÔI T¯ #NG

1. Lâ#p trinh h°¡ng ôi t°¡#ng (Object Oriented Programming)

Môi mô#t ch°¡ng trinh may tinh êu gôm co 2 phân : phân ma lê#nh va phân d° liê#u. Mô#t sô ch°¡ng trinh #t tro#ng tâm ¡ phân ma lê#nh, sô khac #t tro#ng tâm ¡ phân d° liê#u. T° o dân ên 2 mô hinh quyêt i#nh nên câu truc cu a ch°¡ng trinh : mô#t tra l¡i cho câu ho i iêu gi ang xa y ra , va mô#t cho Cai gi ang chi#u tac ô#ng . Mô hinh 1 go#i la mô hinh h°¡ng x° ly, no mô ta nh° la mô#t ch°¡ng trinh bao gôm mô#t chuôi cac b°¡c th°#c hiê#n (ma lê#nh). Nh°ng khi ch°¡ng trinh cang ngay cang l¡n va ph°c ta#p thi kho khn ê s° du#ng mô hinh th° nhât.

Vi vâ#y mô hinh th° 2 °¡#c °a ra, o la mô hinh h°¡ng ôi t°¡#ng. Ch°¡ng trinh cu a ba#n se xây d°#ng d°#a vao d° liê#u va phân giao diê#n °¡#c i#nh nghia cho phân d° liê#u o. Mô hinh nay °¡#c mô ta nh° la d° liê#u iêu khiê n truy xuât ôi v¡i ma lê#nh.

Ngôn ng° lâ#p trinh h°¡ng ôi t°¡#ng co cac kha nng sau :

- Mô pho ng thê gi¡i th°#c mô#t cach t°# nhiên b¡ i cac ôi t°¡#ng va môi quan hê# gi°a chung, thuâ#n tiê#n cho viê#c thiêt kê hê# thông ph°c ta#p

- Th°a kê ma co sn mô#t cach dê dang, giup tiêt kiê#m công s°c va nâng cao nng suât cu a ng°¡i lâ#p trinh, dê ba o tri, dê nâng câp, m¡ rô#ng

2. Tr°u t°¡#ng hoa (Abstraction)

Con ng°¡i a ¡n gia n hoa cac vân ê ph°c ta#p thông qua s°# tr°u t°¡#ng hoa. Vi du#, ng°¡i s° du#ng may tinh không nhin may tinh mô#t cach ph°c ta#p. Nh¡ s°# tr°u t°¡#ng hoa ma ng°¡i ta co thê s° du#ng may tinh ma không quan tâm ên câu truc chi tiêt bên trong may tinh. Ho# chi s° du#ng chung nh° la mô#t th°#c thê

Cach tôt nhât ê nm v°ng ky thuâ#t tr°u t°¡#ng la dung hê# thông phân câp. iêu nay cho phep ba#n phân l¡p cac thanh phân co y nghia cu a ca hê# thông ph°c ta#p, chia nho chung thanh nh°ng phân ¡n gia n co thê qua n ly °¡#c. Nhin bên ngoai may tinh la mô#t ôi t°¡#ng, nêu nhin sâu h¡n mô#t câp, may tinh bao gôm mô#t sô bô# phâ#n : hô#p iêu khiê n, man hinh, ban phim, chuô#t..., cac bô# phâ#n nay la#i bao gôm cac bô# phâ#n nho h¡n, vi du# nh° hô#p iêu khiê n co ba ng ma#ch chinh ch°a CPU, cac ma#ch giao tiêp gn trên ba ng ma#ch chinh, ia c°ng, ô ia mêm& Nh¡ s°# tr°u t°¡#ng hoa ma ba#n không quan tâm ên chi tiêt t°ng ba ng ma#ch, ma chi quan tâm môi quan hê#, giao tiêp gi°a cac bô# phâ#n. Mô#t ma#ch giao tiêp du co ch°c nng ly ky thê nao i n°a, ba#n co thê s° du#ng không mây kho khn nêu °¡#c ân v°a v#n vao khe cm trên ba ng ma#ch chinh.

S°# phân câp tr°u t°¡#ng mô#t hê# thông ph°c ta#p co thê ap du#ng cho cac ch°¡ng trinh may tinh. Phân d° liê#u t° mô#t ch°¡ng trinh h°¡ng x° ly kinh iê n co thê tr°u t°¡#ng hoa thanh cac ôi t°¡#ng thanh phân. Day cac x° ly tr¡ thanh cac thông iê#p gi°a cac ôi t°¡#ng. Vi thê cac ôi t°¡#ng cân co hoa#t ô#ng #c tr°ng riêng. Ba#n co thê coi cac ôi t°¡#ng nay nh° nh°ng th°#c thê ô#c lâ#p tiêp nhâ#n cac yêu câu t° bên ngoai. ây la phân côt loi cu a lâ#p trinh h°¡ng ôi t°¡#ng.

II. C CHÊ TRIÊ N KHAI MÔ HINH H¯ NG ÔI T¯ #NG

Tât ca cac ngôn ng° lâ#p trinh h°¡ng ôi t°¡#ng êu co cac c¡ chê cho phep ba#n triê n khai cac mô hinh h°¡ng ôi t°¡#ng. o la tinh ong goi, kê th°a, va tinh a hinh.

1. Tinh ong goi (Encapsulation)

ây la c¡ chê dung mô#t vo bo#c kêt h¡#p phân d° liê#u va cac thao tac trên d° liê#u o (phân ma lê#nh) thanh mô#t thê thông nhât, ta#o nên s°# an toan, tranh viê#c s° du#ng không ung thiêt kê, ba o vê# cho ma lê#nh va d° liê#u chông viê#c truy xuât t° nh°ng oa#n ma lê#nh bên ngoai.

Trong Java tinh ong goi thê hiê#n qua khai niê#m l¡p (Class). L¡p la ha#t nhân cu a Java, ta#o nên ta ng cho lâ#p trinh h°¡ng ôi t°¡#ng trong Java. No i#nh nghia d° liê#u va cac hanh vi cu a no (d° liê#u va ma lê#nh), go#i la cac thanh viên cu a l¡p, dung chung cho cac ôi t°¡#ng cung loa#i. T° s°# phân tich hê# thông, ng°¡i ta tr°u t°¡#ng nên cac l¡p. Sau o cac ôi t°¡#ng °¡#c ta#o ra theo khuôn mâu cu a l¡p. Môi ôi t°¡#ng thuô#c mô#t l¡p co d° liê#u va hanh vi i#nh nghia cho l¡p o, giông nh° la sinh ra t° mô#t khuôn uc cu a l¡p o. Vi vâ#y ma l¡p la khuôn mâu cu a ôi t°¡#ng, ôi t°¡#ng la thê hiê#n cu a mô#t l¡p. L¡p la câu truc logic, con ôi t°¡#ng la câu truc vâ#t ly. D° liê#u i#nh nghia trong l¡p go#i la biên, ma lê#nh go#i la ph°¡ng th°c. Ph°¡ng th°c i#nh nghia cho viê#c s° du#ng d° liê#u nh° thê nao. iêu nay co nghia la hoa#t ô#ng cu a l¡p °¡#c i#nh nghia thông qua ph°¡ng th°c.

Cac #c tr°ng cu a l¡p gôm co hai phân chinh : thuô#c tinh (Attribute) va hanh vi (Behavior). Gia s° ba#n pha i ta#o ra giao diê#n v¡i ng°¡i dung va cân co nh°ng nut nhân (Button). Thê thi tr°¡c hêt ba#n xây d°#ng l¡p Button v¡i cac thuô#c tinh nh° nhan ghi trên nut, chiêu rô#ng, chiêu cao, mau cu a nut, ông th¡i quy i#nh hanh vi cu a nut nhân, nghia la nut nhân cân pha n °ng nh° thê nao khi °¡#c cho#n, phat yêu câu gi, co ô i mau hay nhâp nhay chi không. V¡i l¡p Button nh° vâ#y, ba#n co thê ta#o ra nhanh chong nh°ng nut nhân cu# thê phu#c vu# cho cac mu#c ich khac nhau

Goi la ky thuâ#t cu a Java, dung ê phân hoa#ch không gian tên l¡p, giao diê#n thanh nh°ng vung dê qua n ly h¡n, thê hiê#n tinh ong goi cu a Java.

2. Tinh kê th°a (Inheritance)

Tinh kê th°a la kha nng xây d°#ng cac l¡p m¡i t° cac l¡p a co. Tinh ong goi cung tac ô#ng ên tinh kê th°a. Khi l¡p ong goi mô#t sô d° liê#u va ph°¡ng th°c, l¡p m¡i se kê th°a mo#i câu truc d° liê#u va cac ph°¡ng th°c cu a l¡p ma no kê th°a. Ngoai ra no co thê bô sung cac d° liê#u va cac ph°¡ng th°c cu a riêng minh.

No rât quan tro#ng vi no °ng du#ng cho khai niê#m cây phân câp (mô hinh TopDown). Không s° du#ng cây phân l¡p, môi l¡p pha i i#nh nghia tât ca cac d° liê#u va ph°¡ng th°c cu a minh mô#t cach ro rang. Nêu s° du#ng s°# kê th°a, môi l¡p chi cân i#nh nghia thêm nh°ng #c tr°ng cu a minh.

Vi du# : Xe co thê xem nh° mô#t l¡p va cac xe Pergout, BWM, Dream la cac ôi t°¡#ng cu a l¡p xe. Cac xe êu co thê lai i, d°ng la#i... T° l¡p xe ¡ trên, ta co thê xây d°#ng cac l¡p xe a#p, xe ôtô. Xe ôtô co thêm may va co thê t°# kh¡ i ô#ng&

3. Tinh a hinh (Polymorphism)

Khi mô#t l¡p °¡#c kê th°a t° cac l¡p tô tiên thi no co thê thay ô i cach th°c lam viê#c cu a l¡p tô tiên trong mô#t sô ph°¡ng th°c nao o (nh°ng tên, kiê u tra vê, danh sach tham ôi cu a ph°¡ng th°c thi vân gi° nguyên). iêu nay go#i la viêt chông. Nh° vâ#y v¡i mô#t tên ph°¡ng th°c, ch°¡ng trinh co thê co cac hanh ô#ng khac nhau tuy thuô#c vao l¡p cu a ôi t°¡#ng go#i ph°¡ng th°c. o la tinh a hinh

Vi du# : v¡i mô#t ph°¡ng th°c cha#y, xe ôtô, xe may co thê tng ga, con xe a#p thi pha i a#p&

Tinh a hinh con thê hiê#n ¡ viê#c mô#t giao diê#n co thê s° du#ng cho cac hoa#t ô#ng cu a mô#t l¡p tô ng quat, hay con go#i la mô#t giao diê#n, nhiêu ph°¡ng th°c . Co nghia la co thê thiêt kê mô#t giao diê#n tô ng quat cho mô#t nhom cac hanh vi liên quan. iêu nay gia m thiê u s°# ph°c ta#p bng cach cho phep mô#t giao diê#n co thê s° du#ng cho cac hoa#t ô#ng cu a mô#t l¡p tô ng quat. Trinh biên di#ch se xac i#nh hoa#t ô#ng cu# thê nao se °¡#c thi hanh tuy theo iêu kiê#n. Ba#n chi cân nh¡ cac giao diê#n cu a l¡p tô ng quat va s° du#ng no.

S°# kêt h¡#p ung n gi°a : a hinh, ong goi va kê th°a ta#o nên mô#t môi tr°¡ng lâ#p trinh co kha nng phat triê n tôt h¡n rât nhiêu so v¡i môi tr°¡ng không hô tr¡# h°¡ng ôi t°¡#ng. Mô#t cây phân câp l¡p thiêt kê tôt la iêu cn ba n cho viê#c s° du#ng la#i nh°ng oa#n ma lê#nh ma ba#n a tôn công s°c nhiêu cho viê#c phat triê n va kiê m tra. Tinh ong goi cho phep ba#n s° du#ng cac ôi t°¡#ng va ra lê#nh thi hanh t¡i chung ma không pha v¡ câu truc cac oa#n ma lê#nh a ba o vê# b¡ i giao diê#n cu a cac l¡p. S°# a hinh cho phep ba#n ta#o ra nh°ng oa#n ma lê#nh go#n gang, dê o#c, dê hiê u va co tinh ô n i#nh.

Java la ngôn ng° lâ#p trinh h°¡ng ôi t°¡#ng nên co ây u cac tinh nng trên, th° viê#n l¡p Java °¡#c cung câp kha ây u cho ng°¡i lâ#p trinh ê bt âu mô#t d°# an m¡i

Ch°¡ng : ÔI T¯ #NG VA L P, MA NG

I. XÂY D¯#NG L P

Khi i#nh nghia mô#t l¡p, ba#n chi ra thuô#c tinh ma no ch°a °¡#c thê hiê#n bng biên (Member Variable) va hanh vi °¡#c thê hiê#n b¡ i ham (Method)

Cac biên i#nh nghia bên trong mô#t l¡p go#i la cac biên thanh viên (Member Variables). Ma lê#nh ch°a trong cac ph°¡ng th°c (Method). Cac ph°¡ng th°c va biên i#nh nghia trong l¡p go#i chung la thanh phân cu a l¡p. Trong hâu hêt cac l¡p, cac biên thê hiê#n °¡#c truy câ#p b¡ i cac ph°¡ng th°c i#nh nghia trong l¡p o. Vi vâ#y, chinh cac ph°¡ng th°c quyêt i#nh d° liê#u cu a l¡p co thê dung nh° thê nao. L¡p i#nh nghia mô#t kiê u d° liê#u m¡i, dung ê ta#o cac ôi t°¡#ng thuô#c kiê u o.

Da#ng ây u cu a mô#t i#nh nghia l¡p nh° sau :

[public] L¡p °¡#c truy xuât chung cho cac Package khac, m#c i#nh chi co cac oa#n ma trong cung mô#t goi m¡i co quyên truy xuât no [abstract] L¡p tr°u t°¡#ng, không thê kh¡ i ta#o [final] L¡p hng không co l¡p con, không kê th°a class ClassName Tên l¡p [extends SuperClass] Kê th°a l¡p cha SuperClass [implements Interfaces] Giao diê#n °¡#c cai #t b¡ i Class { //Member Variables Declarations Khai bao cac biên // Methods Declarations Khai bao cac ph°¡ng th°c }

Vi du# : Ta#o mô#t l¡p Box ¡n gia n v¡i ba biên : width, height, depth

/* i#nh nghia l¡p

*/

class Box {

double width;

double height;

double depth;

}

II. TA#O ÔI T¯ #NG

1. Khai bao ôi t°¡#ng

ê co °¡#c cac ôi t°¡#ng cu a mô#t l¡p pha i qua hai giai oa#n :

( ClassName ObjectName;

Vi du# : Box myBox

Khai bao biên myBox co kiê u l¡p Box. Khai bao nay th°#c ra không câp phat ky °c u ch°a ôi t°¡#ng thuô#c l¡p Box, ma chi ta#o ra quy chiêu tro ên ôi t°¡#ng Box. Sau câu lê#nh nay, quy chiêu myBox xuât hiê#n trên ky °c ch°a gia tri# null chi ra rng no ch°a tro ên mô#t ôi t°¡#ng th°#c tê nao

Khac v¡i câu lê#nh khai bao biên kiê u s¡ câp la danh chô trên ky °c u ch°a mô#t tri# thuô#c kiê u o :

Vi du# : int i;

Sau câu lê#nh nay, biên nguyên i hinh thanh.

( Sau o, ê th°#c s°# ta#o ra mô#t ôi t°¡#ng va gan i#a chi cu a ôi t°¡#ng cho biên nay, dung toan t° new

ObjectName = new ClassName();

Vi du# : myBox = new Box();

( Co thê kêt h¡#p ca hai b°¡c trên vao mô#t câu lê#nh :

ClassName ObjectName = new ClassName();

Vi du# : Box myBox = new Box();

Box myBox2 = myBox;

myBox2 tham chiêu ên cung ôi t°¡#ng ma myBox tham chiêu

2. Cach truy xuât thanh phân cu a l¡p

( Biên khai bao trong i#nh nghia l¡p gôm co hai loa#i :

- Biên ôi t°¡#ng (Instance Variable hay Object Variable) : chi thuô#c tinh ôi t°¡#ng, khi truy xuât pha i kh¡ i ta#o ôi t°¡#ng

+ Cach khai bao biên ôi t°¡#ng :

Type InstanceVar;

+ Cach truy câ#p biên ôi t°¡#ng :

ObjectName.InstanceVar

- Biên l¡p (Class Variable) : vê ba n chât la biên toan cu#c, la biên tinh °¡#c ta#o lâ#p mô#t lân cung v¡i l¡p, dung chung cho mo#i ôi t°¡#ng thuô#c l¡p, khi truy xuât không cân kh¡ i ta#o ôi t°¡#ng, ê trao ô i thông tin cu a cac ôi t°¡#ng cung l¡p

+ Cach khai bao biên l¡p :

static Type ClassVar;

+ Cach truy câ#p biên l¡p :

ClassName.ClassVar

( Ham khai bao trong i#nh nghia l¡p gôm co hai loa#i :

- Ham ôi t°¡#ng (Object Method) : cach truy xuât ham ôi t°¡#ng nh° biên ôi t°¡#ng

ObjectName.ObjectMethod(Parameter-List)

- Ham l¡p (Class Method) : thông th°¡ng mô#t thanh phân cu a l¡p chi truy xuât trong s°# liên kêt v¡i mô#t ôi t°¡#ng thuô#c l¡p cu a no. Tuy nhiên, co thê ta#o ra mô#t thanh phân ma co thê dung mô#t ô#c lâ#p mô#t minh, không cân tham chiêu ên mô#t ôi t°¡#ng cu# thê , co thê °¡#c truy xuât tr°¡c khi bât ky ôi t°¡#ng nao cu a l¡p o °¡#c ta#o ra, bng cach #t tr°¡c khai bao cu a no t° khoa static. Cach truy xuât ham l¡p :

ClassName.ClassMethod(Parameter-List)

Cac ham toan ho#c cu a l¡p Math trong Package Java.Lang la ham l¡p nên khi go#i không cân pha i kh¡ i ta#o ôi t°¡#ng

Vi du# : double a = Math.sqrt(453.28);

Vi du# 1: class BaiTho {

static int i; // Biên l¡p

String s; // Biên ôi t°¡#ng

BaiTho(String ss) { // Ham kh¡ i ta#o

s = ss;

i++;

}

void content( ) {

System.out.println(s);

}

}

class UngDung {

public static void main(String args[]){

BaiTho p1 = new BaiTho( Chi co thuyen moi hieu );

BaiTho p2 = new BaiTho( Bien menh mong nhuong nao );

p1.content();

p2.content();

System.out.println( So cau tho la : +BaiTho.i);

}

}

Khi ta#o ôi t°¡#ng p1, p2 b¡ i toan t° new, ham d°#ng BaiTho() °¡#c go#i, va i tng lên 1

Vi du# 2:

class BaiTho2 {

static int i;

String s;

BaiTho2(String ss) { // Ham kh¡ i ta#o

s = ss; i++;

}

static int number() { // Ham l¡p

return i;

}

String content() { // Ham ôi t°¡#ng

return s;

}

}

class UngDung2 {

public static void main (String args[]) {

System.out.println("Bai tho co "+BaiTho2.number()+" cau");

BaiTho2.p1 = new BaiTho2("Chi co thuyen moi hieu");

BaiTho2.p2 = new BaiTho2("Bien menh mong nhuong nao");

System.out.println("Bai tho co "+BaiTho2.number()+" cau");

System.out.println("Cau tho

"+p1.content().toUpperCase()+"

co" +

p1.content().length() +" ky tu");

System.out.println("Tu \"tinh yeu\" bat dau sau ky tu thu"+

p2.content().indexOf("tinh yeu )+ trong cau

+

p2.content().toUpperCase());

}

}

Go#i ham l¡p BaiTho2.number() luc ch°a go#i ham d°#ng BaiTho2 ê kh¡ i ta#o ôi t°¡#ng se cho tri# 0

p1.content() tra vê mô#t ôi t°¡#ng String

III. GI I THIÊ#U VÊ PH¯ NG TH¯C

1. Khai bao ph°¡ng th°c (ham)

Da#ng tô ng quat cu a mô#t ph°¡ng th°c nh° sau :

[acess] iêu khiê n truy xuât [static] ham l¡p [abstract] ham tr°u t°¡#ng [final] ham hng [Type] MethodName(Parameter-List) throws exceptions {

// Body of method

}

- Type : Kiê u d° liê#u do ham tra vê, co thê la kiê u bât ky, kê ca cac kiê u l¡p do ba#n ta#o ra. Nêu ham không tra vê gia tri# nao, kiê u tra vê cu a no pha i la void.

- Cac ham co kiê u tra vê không pha i la void se tra vê mô#t gia tri# cho ch°¡ng trinh go#i no dung da#ng câu lê#nh return nh° sau :

return biê u th°c;

Gia tri# cu a biê u th°c °¡#c tinh va tra vê cho ham

- Tât ca thông tin ba#n muôn truyên °¡#c g¡ i thông qua tham sô nm trong hai dâu ( ) ngay sau tên ham. Nêu không co tham sô vân pha i co ( )

Parameter-List : Danh sach tham ôi phân cach b¡ i cac dâu phâ y, môi tham ôi pha i °¡#c khai bao kiê u, co thê la kiê u bât ky, co da#ng : Type Parameter1, Type Parameter2 ...

2. Pha#m vi truy xuât thanh phân cu a l¡p

Cac iêu khiê n truy xuât cu a Java la public, private va protected. protected chi ap du#ng khi co liên quan ên kê th°a se xet ên sau

Khi bô sung tiên tô cho mô#t thanh phân cu a l¡p (biên va ham) la :

- T° khoa public : chi ra rng thanh phân nay co thê °¡#c truy xuât b¡ i bât ky dong lê#nh nao du ¡ trong hay ngoai l¡p ma no khai bao

- private : chi co thê °¡#c truy xuât trong l¡p cu a no, mo#i oa#n ma nm ngoai l¡p, kê ca nh°ng l¡p con êu không co quyên truy xuât

- Khi không co iêu khiê n truy xuât nao °¡#c dung, m#c nhiên la public nh°ng chi trong goi cu a no, không thê truy xuât t° bên ngoai goi cu a no

3. Ph°¡ng th°c main()

Khi cha#y °ng du#ng ô#c lâ#p, ba#n chi tên Class muôn cha#y, Java tim go#i ham main() tr°¡c tiên trong Class o, ph°¡ng th°c main se iêu khiê n cha#y cac ph°¡ng th°c khac.

Da#ng tô ng quat cu a ph°¡ng th°c main()

public static void main(String args[]) {

// Body of Method

}

- Mô#t ch°¡ng trinh chi cân mô#t l¡p co ph°¡ng th°c main() go#i la l¡p °ng du#ng ô#c lâ#p Primary Class.

- T° khoa static cho phep ham main() °¡#c go#i khi không cân kh¡ i ta#o ôi t°¡#ng. Vi main() °¡#c trinh thông di#ch cu a Java go#i tr°¡c khi bât ky l¡p nao °¡#c kh¡ i ta#o

- T° khoa void cho biêt ham main() không tra vê gia tri#

- T° khoa public chi ra rng ham nay °¡#c go#i b¡ i dong lê#nh bên ngoai l¡p khi ch°¡ng trinh kh¡ i ô#ng.

- Tham ôi String args[ ] khai bao tham sô tên args thuô#c l¡p String, ch°a chuôi ky t°#. Tham ôi nay gi° cac tham ôi dong lê#nh dung khi thi hanh ch°¡ng trinh.

Vi du# 1 :

class ViDu {

public static void main (String args[]) {

for (int i=0; i < args.length; i++) {

System.out.println( Tham doi thu +i+ : +args[i]);

}

}

}

Khi cha#y ch°¡ng trinh :

C:\>java ViDu Thu tham doi dong lenh (

Tham doi thu 0 : Thu

Tham doi thu 1 : tham ....

C:>java ViDu Thu tham doi dong lenh (

Tham doi thu 0 : Thu

Tham doi thu 1 : tham doi

Tham doi thu 2 : dong lenh

Vi du# 2 :

class ViDu2;

public static void main(String args[]) {

int sum = 0;

float avg = 0;

for (int i=0; i<args.length;i++) {

sum += Integer.parseInt(args[i]);

}

System.out.println( Tong = +sum);

System.out.println( Trung binh = + (float) sum/args.length);

}

}

Khi cha#y ch°¡ng trinh :

C:\>java ViDu2 1 2 3 (

Tong = 6

Trung binh = 2

4. Ham kh¡ i ta#o (Constructor)

Co nh°ng thao tac cân th°#c hiê#n môi khi ôi t°¡#ng lân âu tiên °¡#c ta#o nh° kh¡ i ta#o gia tri# cho cac biên. Cac công viê#c nay co thê lam t°# ô#ng bng cach dung ham kh¡ i ta#o.

Ham kh¡ i ta#o co cung tên v¡i l¡p ma no thuô#c vê, chi °¡#c t°# ô#ng go#i b¡ i toan t° new khi ôi t°¡#ng thuô#c l¡p °¡#c ta#o. Ham kh¡ i ta#o không co gia tri# tra vê, khi i#nh nghia ham co thê ghi void hay không ghi.

Vi du# : - kich th°¡c hô#p °¡#c kh¡ i ta#o t°# ô#ng khi ôi t°¡#ng °¡#c ta#o.

class Box {

double width;

double height;

double depth;

double volume() {

return width * height * depth;

}

Box(double w, double h, double d) {

width = w;

height = h;

depth = d;

}

}

class BoxDemo {

public static void main (String args[ ]) {

Box myBox1 = new Box(10,20,15);

Box myBox2 = new Box(3,6,9);

double vol;

vol = myBox1.volume();

System.out.println( Thê tich la : +vol);

vol = myBox2.volume();

System.out.println( Thê tich la : +vol);

}

}

- Khi ba#n không i#nh nghia t°¡ng minh ham kh¡ i ta#o cho mô#t l¡p, Java se ta#o ham kh¡ i ta#o m#c nhiên cho l¡p o. Vi vâ#y cac ch°¡ng trinh tr°¡c o vân lam viê#c binh th°¡ng. Ham kh¡ i ta#o m#c nhiên không co danh sach tham ôi, t°# ô#ng kh¡ i ta#o tât ca cac biên cu a ôi t°¡#ng vê tri# rông theo cac quy °¡c m#c i#nh cu a Java, tri# 0 cho kiê u sô, ky t°# \0 cho kiê u ky t°# char, tri# false cho kiê u boolean, tri# null cho cac ôi t°¡#ng

- Ham kh¡ i ta#o cung co thê °¡#c na#p chông nh° ham binh th°¡ng #(se noi ro ¡ phân sau) nghia la ta °¡#c phep i#nh nghia nhiêu ham kh¡ i ta#o khac nhau ¡ danh sach tham ôi hay kiê u tham ôi

5. Ham hu y

Cac ôi t°¡#ng câp phat ô#ng bng toan t° new, khi không tôn ta#i tham chiêu nao ên ôi t°¡#ng, ôi t°¡#ng o xem nh° không con cân ên n°a va bô# nh¡ cho no co thê °¡#c t°# ô#ng gia i phong b¡ i bô# thu gom rac (garbage collector). Trinh thu gom rac hoa#t ô#ng trong mô#t tuyên oa#n (Thread) ô#c lâ#p v¡i ch°¡ng trinh cu a ba#n. Ba#n không pha i bâ#n tâm gi ôi v¡i công viê#c nay. Sau nay ba#n se hiê u ro tuyên oa#n la thê nao

Tuy nhiên, Java cung cho phep ta viêt ham hu y, co thê cung cân thiêt cho nh°ng tr°¡ng h¡#p nao o. Ham hu y trong Java chi °¡#c go#i b¡ i trinh thu gom rac, do vâ#y ba#n kho oan tr°¡c vao luc nao ham hu y se °¡#c go#i

Da#ng ham hu y nh° sau :

protected void finalize() {

// Body of Method

}

6. T° khoa this

Nêu biên °¡#c i#nh nghia trong thân ham, o la biên cu#c bô# chi tôn ta#i khi ham °¡#c go#i. Nêu biên cu#c bô# nh° vâ#y °¡#c #t tên trung v¡i biên ôi t°¡#ng ho#c biên l¡p, no se che khuât biên ôi t°¡#ng hay biên l¡p trong thân ham :

Vi du# :

class ViDu {

int test = 10; // Biên ôi t°¡#ng

void printTest() {

int test = 20; // Biên cu#c bô#

System.out.println( test = +test); // In biên cu#c bô#

}

public static void main(String args[]) {

ViDu a = new ViDu();

a.printTest();

}

}

T° khoa this co thê dung bên trong bât c° ph°¡ng th°c nao ê tham chiêu ên ôi t°¡#ng hiê#n hanh, khi biên ôi t°¡#ng trung tên v¡i biên cu#c bô#.

Vi du# : Thay dong lê#nh trên :

System.out.println( test = +this.test); // In biên cu#c bô#, this chi ôi t°¡#ng a

7. Na#p chông ham (Overloaded Methods)

Trong cung mô#t l¡p, Java cho phep ba#n i#nh nghia nhiêu ham trung tên v¡i iêu kiê#n cac ham nh° vâ#y pha i co danh sach tham ôi khac nhau, nghia la khac nhau vê sô tham ôi ho#c kiê u cu a cac tham ôi. Kha nng nh° vâ#y go#i la s°# na#p chông ham. Java chi phân biê#t ham nay v¡i ham khac d°#a vao sô tham ôi va kiê u cu a cac tham ôi, bât châp tên ham va kiê u cu a kêt qua tra vê.

Vi du# :

// MyRect.java

import java.awt.Point;

class MyRect {

int x1 = 0;

int y1 = 0;

int x2 = 0;

int y2 = 0;

MyRect buildRect(int x1, int y1, int x2, int y2) {

this.x1 = x1;

this.y1 = y1;

this.x2 = x2;

this.y2 = y2;

return this;

}

MyRect buildRect(Point topLeft, Point bottomRight) {

x1 = topLeft.x;

y1 = topLeft.y;

x2 = bottomRight.x;

y2 = bottomRight.y;

return this;

}

MyRect buildRect(Point topLeft, int w, int h) {

x1 = topLeft.x;

y1 = topLeft.y;

x2 = x1+w;

y2 = y1 + h;

return this;

}

void display() {

System.out.print("Doi tuong MyRect : <" + x1 + ", "+y1);

System.out.println(", "+x2+", "+y2+">");

}

}

Thâ#t ra, trong goi awt co sn l¡p Rectangle chuyên dung ê biê u diên hinh ch° nhâ#t. L¡p MyRect cu a ta chi dung ê minh hoa# cho khai niê#m na#p chông ham. Trong l¡p MyRect co nh°ng ham giup ba#n ta#o ra ôi t°¡#ng MyRect v¡i nh°ng yêu tô cho tr°¡c khac nhau :

- Cho tr°¡c toa# ô# goc trên trai x1, y1 va toa# ô# goc d°¡i pha i x2, y2

- Cho tr°¡c goc trên trai va goc d°¡i pha i cu a hinh ch° nhâ#t d°¡i da#ng ôi t°¡#ng Point

- Cho tr°¡c toa# ô# goc trên trai cu a hinh ch° nhâ#t da#ng ôi t°¡#ng Point cung chiêu rô#ng, chiêu cao

Nh¡ kha nng na#p chông ham, ba#n chi cân nh¡ mô#t tên ham cho cac ham khac nhau cung ch°c nng

Ch°¡ng trinh s° du#ng l¡p MyRect xây d°#ng ¡ trên :

import java.awt.Point;

class UngDung {

public static void main(String args[]) {

MyRect rect = new MyRect();

rect.buildRect(25,25,50,50);

rect.display();

rect.buildRect(new Point(10,10), new Point(20,20));

rect.display();

rect.buildRect(new Point(10,10), 50, 50);

rect.display();

}

}

8. Truyên tham ôi

Java dung ca hai cach truyên tham ôi : truyên bng gia tri# va truyên bng tham chiêu, tuy vao cai gi °¡#c truyên

- Khi ta truyên mô#t kiê u s¡ câp cho ph°¡ng th°c, no se truyên bng gia tri#. Vi vâ#y nh°ng gi xa y ra v¡i tham ôi trong ph°¡ng th°c, khi ra kho i ph°¡ng th°c se hêt tac du#ng

- Khi ta truyên mô#t ôi t°¡#ng (kiê u ph°c h¡#p) cho ph°¡ng th°c, no se truyên bng tham chiêu. Vi vâ#y, thay ô i ¡ ôi t°¡#ng bên trong ph°¡ng th°c a nh h°¡ ng ên ôi t°¡#ng dung lam tham ôi.

Vi du# 1 :

class ViDu {

void tinhToan(int i, int j) {

i *= 2;

j /= 2;

}

}

class UngDung {

public static void main(String args) {

ViDu o = new ViDu();

int a = 15, b = 20;

System.out.println( a va b tr°¡c khi go#i : +a+ +b);

o.tinhToan(a, b);

System.out.println( a va b sau khi go#i : +a+ +b);

}

}

Kêt qua cu a ch°¡ng trinh :

a va b tr°¡c khi go#i : 15 20

a va b sau khi go#i : 15 20

Vi du# 2 :

class ViDu {

int a, b;

ViDu (int i, int j) {

a = i;

b = j;

}

void tinhToan(ViDu o) {

o.a *= 2;

0.b /= 2;

}

}

class UngDung {

public static void main(String args[]) {

ViDu o = new ViDu(15, 20);

System.out.println( o.a va o.b tr°¡c khi go#i : +o.a+ +o.b);

o.tinhToan(o);

System.out.println( o.a va o.b sau khi go#i : +o.a+ +o.b);

}

}

Kêt qua ch°¡ng trinh :

o.a va o.b tr°¡c khi go#i : 15 20

o.a va o.b sau khi go#i : 30 10

IV. L P KÊ TH¯A

1. Khai bao kê th°a

Ta co thê s° du#ng tinh kê th°a ta#o l¡p tô ng quat co nh°ng #c tinh chung a#i diê#n cho mô#t tâ#p h¡#p cac ôi t°¡#ng co cung môi quan hê#. Sau o, l¡p nay co thê °¡#c kê th°a b¡ i mô#t hay nhiêu l¡p khac va nh°ng #c tinh nay tr¡ thanh nh°ng thanh nh°ng #c tinh cu a l¡p kê th°a

- L¡p °¡#c kê th°a go#i la l¡p cha (SuperClass : la l¡p cha tr°#c tiêp)

- L¡p kê th°a go#i la l¡p con (SubClass)

L¡p con kê th°a tât ca cac biên va ham i#nh nghia trong l¡p cha

class ClassName extends SuperClass

{ //Member Variables Declarations, Methods

}

- M#c du vâ#y, l¡p con không thê truy xuât cac thanh phân °¡#c khai bao private trong l¡p cha

- Mô#t biên tham chiêu cu a l¡p cha co thê gan ê tham chiêu ên mô#t l¡p con bât ky dân xuât t° l¡p cha. Khi mô#t tham chiêu ên mô#t l¡p con °¡#c gan cho biên tham chiêu kiê u l¡p cha, ta chi co quyên truy xuât nh°ng phân °¡#c i#nh nghia b¡ i l¡p cha.

2. Viêt chông ham hay che khuât ham (Overriding Methods)

Trong phân câp l¡p, khi mô#t ham cu a l¡p con co cung tên, va giông nhau vê sô l°¡#ng va kiê u tham ôi cung nh° kiê u tra vê v¡i mô#t ham ¡ l¡p cha, thi ham ¡ l¡p con °¡#c go#i la viêt chông ham trong l¡p cha. Khi o ham cu a l¡p con se che khuât ham th°a kê t° l¡p cha

Tuy nhiên l¡p con không °¡#c viêt chông ham hng (co khai bao final) va ham l¡p trong l¡p cha.

Vi du# : Tât ca cac l¡p la hâ#u duê# cu a l¡p Object. L¡p Object ch°a ph°¡ng th°c toString, ma tra vê mô#t ôi t°¡#ng String ch°a tên l¡p cu a ôi t°¡#ng. Hâu hêt cac l¡p con viêt chông ph°¡ng th°c nay va in ra mô#t vai iêu gi o co nghia cho l¡p o

3. T° khoa super

ôi khi ba#n không muôn th°#c hiê#n viêt chông mô#t ph°¡ng th°c ma chi muôn thêm ch°c nng vao ph°¡ng th°c. ê lam °¡#c iêu nay, ba#n go#i ph°¡ng th°c °¡#c viêt chông dung t° khoa super. T° khoa super dung khi l¡p con cân tham chiêu l¡p cha tr°#c tiêp cu a no. Super co hai da#ng cu phap :

- Da#ng 1 : Ham kh¡ i ta#o l¡p cha pha i °¡#c go#i tr°¡c ham kh¡ i ta#o cu a l¡p con. Nêu trong i#nh nghia ham kh¡ i ta#o ¡ l¡p con không co câu lê#nh go#i ham kh¡ i ta#o l¡p cha, trinh biên di#ch Java se t°# ô#ng °a vao câu lê#nh go#i ham kh¡ i ta#o m#c i#nh cu a l¡p cha co da#ng : classname()

Ba#n co thê t°# thêm lê#nh go#i ham kh¡ i ta#o ¡ l¡p cha co da#ng nh° sau :

super(Parameter-List)

Parameter-List la danh sach cac tham ôi cân thiêt cho ham kh¡ i ta#o cu a l¡p cha. super() pha i luôn luôn la phat biê u âu tiên °¡#c th°#c hiê#n trong ham kh¡ i ta#o cu a l¡p con

Vi du# :

class MyPoint {

int x, y;

MyPoint(int x, int y) {

this.x = x;

this.y = y;

}

void display() {

System.out.print( x = +x+ , y = +y+

}

}

class MyPoint2 extends MyPoint {

int z;

String name;

MyPoint2(int x, int y, int z, String name) {

super(x,y); // Kh¡ i ta#o 2 biên x, y bng cach go#i

this.z = z; // ham d°#ng cu a l¡p cha

this.name = name;

}

void display() { // Viêt chông ham kê th°a t° l¡p cha

System.out.print( x = +x+ , y = +y+ , z = +z+ + name : +name+

}

}

- Da#ng 2 : dung ê ham l¡p con truy xuât ham kê th°a t° l¡p cha :

super.Member

Member co thê la ph°¡ng th°c hay biên cu a ôi t°¡#ng

Vi du# : Viêt la#i ham display() trong class MyPoint2, co go#i ham kê th°a t° l¡p cha :

void display() {

super.display();

System.out.print( , z = +z+ + name : +name+

}

V. L P, PH¯ NG TH¯C TR¯U T¯ #NG

Trong tr°¡ng h¡#p chung ta muôn i#nh nghia mô#t l¡p cha theo mô#t câu truc tr°u t°¡#ng cho tr°¡c ma không cân hiê#n th°#c ây u cac ph°¡ng th°c. T°c la ta muôn ta#o mô#t l¡p cha co da#ng chung cho tât ca cac l¡p con va ê cac l¡p con hiê#n th°#c chi tiêt. Khi o, ba#n muôn chc chn l¡p con co chông lp ph°¡ng th°c. Nh°ng ph°¡ng th°c pha i °¡#c chông lp trong l¡p con go#i la ph°¡ng th°c tr°u t°¡#ng, °¡#c khai bao abstract va không co phân thân ph°¡ng th°c

abstract [Type] MethodName(Parameter-List) ;

Bât ky l¡p nao ch°a mô#t hay nhiêu ph°¡ng th°c tr°u t°¡#ng cung pha i khai bao tr°u t°¡#ng, s° du#ng t° khoa abstract tr°¡c t° khoa class. Không thê kh¡ i ta#o ôi t°¡#ng kiê u l¡p tr°u t°¡#ng, vi l¡p tr°u t°¡#ng không °¡#c i#nh nghia ây u . Do o, ba#n cung không thê khai bao ham kh¡ i ta#o. Bât ky l¡p con nao cung pha i ho#c la viêt chông tât ca cac ph°¡ng th°c tr°u t°¡#ng ho#c chinh no la#i °¡#c khai bao abstract

Vi du# : Trong cac °ng du#ng, ba#n co thê ve °¡ng tron, hinh ch° nhâ#t, oa#n th ng, °¡ng cong& Môi mô#t ôi t°¡#ng ô hoa# nay êu ch°a cac thuô#c tinh (vi# tri, net viên) va hanh vi (di chuyê n, thay kich th°¡c, ve). Ba#n co thê khai bao chung kê th°a l¡p Graphic. Tuy nhiên ve mô#t °¡ng tron la hoan toan khac v¡i ve mô#t hinh ch° nhâ#t, nên l¡p Graphic °¡#c khai bao la l¡p tr°u t°¡ng, ch°a cac ph°¡ng th°c a °¡#c hiê#n th°#c nh° moveTo, va ph°¡ng th°c tr°u t°¡#ng nh° draw

abstract class GraphicObject {

int x, y;

. . .

void moveTo(int newX, int newY) {

. . .

}

abstract void draw();

}

Môi mô#t l¡p con không tr°u t°¡#ng cu a l¡p Graphic nh° Circle, Rectangle se pha i cai #t ây u cho ph°¡ng th°c draw

class Circle extends GraphicObject {

void draw() {

. . .

}

}

class Rectangle extends GraphicObject {

void draw() {

. . .

}

}

VI. L P HNG (KHÔNG KÊ TH¯A), HAM HNG (KHÔNG VIÊT CHÔNG)

1. S° du#ng t° khoa final câm s°# chông lp

M#c du chông lp ph°¡ng th°c la mô#t trong nh°ng #c iê m ma#nh nhât cu a Java, tuy nhiên trong vai tr°¡ng h¡#p ba#n muôn câm iêu nay. ê câm mô#t ph°¡ng th°c l¡p con viêt chông ph°¡ng th°c ¡ l¡p cha, ba#n °a t° khoa final vao âu khai bao

Vi du# : class Box {

double width;

double height;

double depth;

final double volume() {

return width * height * depth;

}

. . .

}

2. S° du#ng t° khoa final câm s°# kê th°a

Muôn khai bao mô#t l¡p ma không co l¡p con kê th°a, ba#n s° du#ng t° khoa final. V¡i mô#t l¡p final, thi tât ca cac ph°¡ng th°c cu a no se la final.

Ta không thê khai bao mô#t l¡p v°a abstract va final vi mô#t l¡p tr°u t°¡#ng la mô#t l¡p ch°a hoan chi nh va pha i co l¡p con ê hiê#n th°#c ây u

Vi du# : final class Box { . . .

}

VII. L P LÔNG NHAU

Co thê i#nh nghia mô#t l¡p bên trong mô#t l¡p khac. L¡p nh° vâ#y go#i la l¡p lông (Nested Class) va °¡#c cai #t nh° sau :

class EnclosingClass{ // L¡p bao bên ngoai

. . .

static class StaticNestedClass { // L¡p lông tinh

. . .

}

class InnerClass { // L¡p lông phi tinh hay l¡p nô#i bô#

. . .

}

}

L¡p lông chi °¡#c biêt bên trong tâm v°#c cu a l¡p bao bên ngoai. Bô# di#ch Java se bao lôi nêu mô#t oa#n ma bât ky bên ngoai l¡p bao cô dung tr°#c tiêp l¡p lông.

Mô#t l¡p lông co quyên truy câ#p ên cac thanh viên cu a l¡p bao bên ngoai, thâ#m chi nêu chung °¡#c khai bao private. Tuy nhiên, l¡p bao không thê truy xuât cac thanh phân cu a l¡p lông.

Co hai kiê u l¡p lông : tinh va phi tinh.

L¡p lông tinh (static nested class) °¡#c bô sung t° khoa static. No không thê tham chiêu tr°#c tiêp ên biên hay ph°¡ng th°c ôi t°¡#ng °¡#c i#nh nghia trong l¡p bao, ma chi dung chung thông qua ôi t°¡#ng. Vi gi¡i ha#n nay nên l¡p lông tinh it °¡#c dung. Hâu hêt cac l¡p lông la l¡p nô#i bô#

L¡p lông phi tinh (nonstatic nested class) không bô sung t° khoa static, con °¡#c go#i la l¡p nô#i bô# (inner class). No co thê truy câ#p tr°#c tiêp ên cac biên va ph°¡ng th°c ôi t°¡#ng.

class Outer {

int outer_x = 100;

void test() {

Inner inner = new Inner();

inner.display_x();

}

class Inner { // co thê truy xuât tr°#c tiêp biên ôi t°¡#ng cu a l¡p Outer

int inner_y = 10;

void display_x() {

System.out.println( display : outer_x = + outer_x);

}

}

void display_y() { // không thê truy xuât biên ôi t°¡#ng cu a l¡p Inner

System.out.println( display : inner_y = + inner_y); // Error

}

}

class InnerClassDemo {

public static void main(String args[]) {

Outer outer = new Outer();

outer.test();

}

}

VIII. CHUYÊ N Ô I KIÊ U

1. Chuyê n ô i gi°a cac kiê u ph°c h¡#p

Java chi cho phep chuyê n ô i ôi t°¡#ng thuô#c l¡p con chau thanh ôi t°¡#ng cu a l¡p cha ông (Ancestors), va không cho chuyê n ng°¡#c la#i

Gia s° ba#n co ôi t°¡#ng thuô#c l¡p con Child va cân chuyê n ô i thanh ôi t°¡#ng thuô#c l¡p cha ông Parent. Java cho phep dung ôi t°¡#ng Child mô#t cach t°# nhiên ¡ bât c° chô nao danh cho ôi t°¡#ng Parent, ta không cân lam ô#ng tac chuyê n ô i nao ca . ôi t°¡#ng Child co ây u thuô#c tinh va hanh vi cu a ôi t°¡#ng Parent nên co thê vao vai ôi t°¡#ng Parent. Nêu muôn, ba#n cung co thê chuyê n ô i ôi t°¡#ng thuô#c l¡p con chau thanh ôi t°¡#ng thuô#c l¡p cha ông mô#t cach t°¡ng minh, nh°ng không cân thiêt :

Child c = new Child();

Parent p = (Parent) c;

2. Chuyê n ô i kiê u s¡ câp thanh kiê u ph°c h¡#p

Trong goi java.lang co sn nh°ng l¡p t°¡ng °ng v¡i cac kiê u s¡ câp, co thê dung thay cho kiê u s¡ câp : l¡p Integer thay cho kiê u int, l¡p Boolean cho kiê u boolean, l¡p Float cho kiê u float, l¡p Double cho kiê u double& L¡p Number la l¡p cha cu a mo#i l¡p bo#c kiê u

Ch ng ha#n, muôn cho kiê u int co thê xuât hiê#n nh° mô#t ôi t°¡#ng thuô#c l¡p Integer :

Integer intObj = new Integer(25);

L¡p Integer °¡#c trang bi# nh°ng ph°¡ng th°c giup ba#n nhiêu viê#c ma kiê u int không thê a m °¡ng.

- Lây gia tri# nguyên ma ôi t°¡#ng intObj nm gi° :

int i = intObj.intValue();

IX. MA NG (ARRAY)

Ma ng la mô#t câu truc l°u gi° cac thanh phân co cung kiê u. Chiêu dai mô#t ma ng °¡#c thiêt lâ#p va cô i#nh khi ma ng °¡#c ta#o luc cha#y ch°¡ng trinh. Môi thanh phân cu a ma ng °¡#c truy xuât b¡ i chi sô cu a no trong ma ng

Nêu ba#n muôn l°u gi° cac thanh phân khac kiê u nhau hay kich th°¡c ma ng co thê thay ô i ô#ng, dung mô#t Vector thay cho ma ng

1. Ta#o va s° du#ng ma ng

( Khai bao mô#t biên tham chiêu ên ma ng

ArrayType[] ArrayName

Khai bao mô#t biên co kiê u ArrayType dung ê tham chiêu ên ma ng, nh°ng không co ma ng nao thâ#t s°# tôn ta#i

ArrayType : la kiê u d° liê#u cu a cac thanh phân ch°a trong ma ng va dâu [] chi i#nh o la mô#t ma ng

Kiê u d° liê#u thanh phân co thê la bât ky kiê u c¡ s¡ , tham chiêu

int[] anArrayOfInts; // Khai bao mô#t ma ng sô nguyên

float[] anArrayOfFloats;

boolean[] anArrayOfBooleans;

Object[] anArrayOfObjects;

String[] anArrayOfStrings;

( Ta#o mô#t ma ng

Ba#n dung toan t° new ê ta#o mô#t ma ng, nghia la câp phat bô# nh¡ cho cac thanh phân va gan ma ng ên biên a khai bao

ArrayName = new ArrayType[ArraySize]

ArraySize : la sô thanh phân cu a ma ng

Vi du# : int[] M; // khai bao biên ma ng kiê u sô nguyên

M = new int[10]; // ta#o mô#t ma ng sô nguyên

Ba#n co thê kêt h¡#p s°# khai bao biên ma ng va ta#o ma ng nh° sau :

ArrayType[] ArrayName = new ArrayType[ArraySize]

Co thê viêt nh° sau :

ArrayType ArrayName[] = new ArrayType[ArraySize]

Vi du# : int[] M = new int[10];

int M[] = new int[10];

( Truy xuât thanh phân cu a ma ng

ArrayVar[index]

index : chi vi# tri cu a thanh phân trong ma ng cân truy xuât, co thê la gia tri#, biên hay biê u th°c, va co gia tri# t° 0 ên ArraySize-1

Vi du# : M[1] = 20;

( Lây kich th°¡c ma ng

ArrayName.length

( Kh¡ i ta#o gia tri# âu cu a ma ng

Ma ng co thê kh¡ i ta#o khi khai bao. Ma ng kh¡ i ta#o la danh sach cac biê u th°c cach nhau b¡ i dâu phâ y va bao quanh b¡ i dâu ngo#c moc. Ma ng se °¡#c kh¡ i ta#o t°# ô#ng ê l°u sô phân t° ma ba#n xac i#nh luc kh¡ i ta#o, không cân s° du#ng new. Chiêu dai cu a ma ng la sô gia tri# gi°a { va }

Vi du# : boolean[] answers = { true, false, true, true, false };

int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};

Vi du# 1: Ta#o va s° du#ng ma ng co thanh phân kiê u c¡ s¡

public class ArrayDemo {

public static void main(String[] args) {

int[] anArray;

anArray = new int[10];

for (int i = 0; i < anArray.length; i++) {

anArray[i] = i;

System.out.print(anArray[i] + " ");

}

System.out.println();

}

}

Vi du# 2 : Ta#o va s° du#ng ma ng co thanh phân kiê u tham l¡p String

public class ArrayOfStringsDemo {

public static void main(String[] args) {

String[] anArray = { "String One", "String Two", "String Three" };

for (int i = 0; i < anArray.length; i++) {

System.out.println(anArray[i].toLowerCase());

}

}

}

2. Ma ng a chiêu (Arrays of Arrays)

Ma ng co thê ch°a cac thanh phân la ma ng. ê khai bao mô#t biên ma ng a chiêu cân xac i#nh môi chiêu cu a ma ng bng cach s° du#ng cac c#p dâu ngo#c vuông.

Vi du# : int M[][] = new int[4][5];

int[][] M = new int[4][5];

M la mô#t ma ng 4x5 thanh phân la cac sô nguyên.

Khi câp phat bô# nh¡ cho ma ng a chiêu, ba#n co thê chi i#nh chiêu dai cu a ma ng chinh, va không chi i#nh chiêu dai cu a ma ng con cho ên khi ta#o chung

Vi du# : int M[][] = new int[3][];

M[0] = new int[3];

M[1] = new int[4];

M[2] = new int[2];

Vi du# 1 :

public class ArrayOfArraysDemo {

public static void main(String[] args) {

String[][] cartoons = {

{ "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" },

{ "Rubbles", "Barney", "Betty", "Bam Bam" },

{ "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" },

{ "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" }

};

for (int i = 0; i < cartoons.length; i++) {

System.out.print(cartoons[i][0] + ": ");

for (int j = 1; j < cartoons[i].length; j++) {

System.out.print(cartoons[i][j] + " ");

}

System.out.println();

}

}

}

Chu y la tât ca ma ng con co chiêu dai khac nhau. Tên cu a ma ng con la cartoons[0], cartoons[1]...

Vi du# 2 :

public class ArrayOfArraysDemo2 {

public static void main(String[] args) {

int[][] aMatrix = new int[4][];

for (int i = 0; i < aMatrix.length; i++) {

aMatrix[i] = new int[5];

for (int j = 0; j < aMatrix[i].length; j++) {

aMatrix[i][j] = i + j;

}

}

for (int i = 0; i < aMatrix.length; i++) {

for (int j = 0; j < aMatrix[i].length; j++) {

System.out.print(aMatrix[i][j] + " ");

}

System.out.println();

}

}

}

3. Sao chep ma ng (Copying Arrays)

S° du#ng ph°¡ng th°c arraycopy cu a System sao chep d° liê#u t° mô#t ma ng ên mô#t ma ng khac. Ph°¡ng th°c arraycopy yêu câu 5 tham ôi :

public static void arraycopy(ArrayType[] source,

int srcIndex,

ArrayType[] dest,

int destIndex,

int length)

Hai tham ôi Object chi i#nh ma ng nguôn va ma ng ich. Ba tham ôi int chi vi# tri bt âu trong môi ma ng nguôn va ich, va sô thanh phân ê sao chep. Biê u ô nay minh hoa# viê#c sao chep :

INCLUDEPICTURE "C:\\Download\\tutorial\\figures\\java\\3srcindex.gif" \* MERGEFORMATINET

Vi du# :

public class ArrayCopyDemo {

public static void main(String[] args) {

char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',

'i', 'n', 'a', 't', 'e', 'd' };

char[] copyTo = new char[7];

System.arraycopy(copyFrom, 2, copyTo, 0, 7);

System.out.println(new String(copyTo));

}

}

Biê u ô sau mô ta cho vi du# trên :

INCLUDEPICTURE "C:\\Download\\tutorial\\figures\\java\\4caffein.gif" \* MERGEFORMATINET

Chu y rng ma ng ich pha i °¡#c câp phat va pha i u l¡n ê ch°a d° liê#u °¡#c sao chep

Ch°¡ng : GOI VA GIAO DIÊ#N

Goi (Package) va giao diê#n (Interface) la hai thanh phân c¡ ba n trong mô#t ch°¡ng trinh Java.

I. GOI

Goi la ky thuâ#t phân hoa#ch không gian tên l¡p, giao diê#n thanh nh°ng vung dê qua n ly h¡n. Vi du# khi ba#n ta#o mô#t l¡p trong mô#t goi nao o, ba#n không cân pha i kiê m tra xem no co bi# trung tên v¡i mô#t l¡p nao o trong goi khac không.

Goi bao gôm hai ky thuâ#t #t tên va ky thuâ#t iêu khiê n truy xuât. Ba#n co thê câp hay không câp quyên truy xuât cac l¡p bên trong goi ôi v¡i cac oa#n ma nm ngoai goi. Ba#n cung co thê xac i#nh thanh phân nao cu a l¡p ma chi co cac thanh phân trong cung mô#t l¡p m¡i co quyên truy xuât.

1. i#nh nghia goi

Ta#o mô#t goi bng cach #t t° khoa package ngay phat biê u âu tiên cu a tâ#p tin nguôn Java. Bât ky l¡p nao khai bao trong tâ#p tin nay êu thuô#c goi nay. Nêu ba#n bo qua phat biê u Package, cac l¡p se #t vao package m#c i#nh

package PackageName;

Java s° du#ng hê# thông th° mu#c ê l°u tr° cac goi. Cac l¡p se ch°a trong th° mu#c trung tên PackageName

Co thê ta#o cac package phân câp, dung dâu châm ê phân biê#t mô#t package v¡i package cha cu a no. S°# phân câp package pha i °¡#c anh xa# vao hê# thông tâ#p tin. Java xem gôc cu a cây phân câp goi °¡#c i#nh nghia b¡ i biên môi tr°¡ng CLASSPATH.

package PackageName1[.PackageName2[.PackageName3]];

Vi du# : package java.awt.image;

°¡#c l°u tr° trong Java\awt\image v¡i hê# iêu hanh Windows.

2. iêu khiê n truy xuât

Thông qua phep ong goi (l¡p, goi), ta co thê iêu khiê n phân nao cu a ch°¡ng trinh co thê truy xuât cac thanh phân cu a l¡p

Cac iêu khiê n truy xuât cu a Java la public, private va protected. protected chi ap du#ng khi co liên quan ên kê th°a

( Khi bô sung tiên tô cho mô#t thanh phân cu a l¡p (biên va ham) la :

- T° khoa public : chi ra rng thanh phân nay co thê °¡#c truy xuât b¡ i bât ky dong lê#nh nao du ¡ trong hay ngoai l¡p, goi (Package) ma no khai bao

- private : chi co thê °¡#c truy xuât trong l¡p cu a no, mo#i oa#n ma nm ngoai l¡p, kê ca nh°ng l¡p con êu không co quyên truy xuât

- Khi không co iêu khiê n truy xuât nao °¡#c dung, cac l¡p con cung nh° cac l¡p trong cung goi êu co thê truy xuât no, không thê truy xuât t° bên ngoai goi cu a no

- protected : liên quan ên s°# kê th°a, nêu ba#n chi cho cac l¡p con tr°#c tiêp m¡i co quyên truy xuât cac thanh phân cu a l¡p, ba#n khai bao chung la protected

( V¡i l¡p chi co hai m°c truy xuât : m#c i#nh va public. Khi mô#t l¡p khai bao public, cac oa#n ma khac co thê truy xuât °¡#c no. Nêu l¡p la truy xuât m#c inh, chi co cac oa#n ma trong cung mô#t goi m¡i co quyên truy xuât no

iêu khiê n truy xuât thanh phân cu a l¡p Trong l¡p Trong l¡p

con Trong Package (Goi) Toan bô# private X protected X X* X public X X X X Không co X X X

Vi du# :

package Greek;

public class Alpha {

protected int i;

protected void protectedMethod() {

System.out.println( Protected Metho );

}

}

class Gamma {

void accessMethod() {

Alpha a = new Alpha();

a.i = 10; // H¡#p lê#

a.protectedMethod(); // H¡#p lê#

}

}

package Latin;

import Greek.*;

class Delta extends Alpha {

void accessMethod (Alpha a, Delta d) {

a.i = 10; // Không h¡#p lê#

d.i = 10; // H¡#p lê#

a.protectedMethod(); // Không h¡#p lê#

d.protectedMethod(); // H¡#p lê#

}

}

3. S° du#ng goi

Java °a ra phat biê u import ê nh°ng l¡p nao o hay toan bô# goi co thê thây °¡#c, nghia la ba#n co thê s° du#ng l¡p tr°#c tiêp qua tên cu a no, không cân dung dâu châm truy xuât

Trong tâ#p tin nguôn Java, phat biê u import #t ngay sau phat biê u package (nêu tôn ta#i) va tr°¡c bât c° i#nh nghia l¡p nao

import PackageName1[.PackageName2].ClassName;

import PackageName1[.PackageName2].*;

Vi du# : import java.util.Date;

import java.io.*;

Tât ca cac l¡p chuâ n cu a Java l°u trong goi tên la java. Ba#n pha i nhâ#p t°ng goi hay l¡p ba#n muôn s° du#ng, riêng l¡p goi java.lang l°u nhiêu ch°c nng thông du#ng, °¡#c import ngâm i#nh b¡ i bô# biên di#ch cho tât ca cac ch°¡ng trinh.

Phat biê u import cu a goi chi co gia tri# trên cac thanh phân khai bao public cu a no.

II. GIAO DIÊ#N

1. i#nh nghia giao diê#n

V¡i t° khoa interface, ba#n co thê tr°u t°¡#ng hoan toan giao diê#n cu a l¡p kho i s°# hiê#n th°#c cu a no. Nghia la ba#n co thê #c ta mô#t l¡p pha i lam gi, nh°ng không cân biêt lam nh° thê nao. Giao diê#n la tâ#p h¡#p cac khai bao ph°¡ng th°c, hng ma l¡p con kê th°a. Giao diê#n co cu phap t°¡ng t°# l¡p, nh°ng no không co biên thanh viên, chi co khai bao hng va nh°ng ph°¡ng th°c cu a chung khai bao không co thân. Trong th°#c tê, iêu nay co nghia rng ba#n co thê i#nh nghia nh°ng giao diê#n ma không cân a m nhiê#m phân hiê#n th°#c no. Sô l°¡#ng l¡p hiê#n th°#c mô#t giao diê#n la tuy y. Mô#t l¡p cung co thê hiê#n th°#c sô l°¡#ng tuy y giao diê#n.

ê hiê#n th°#c mô#t giao diê#n, mô#t l¡p pha i cai #t ây u cac ph°¡ng th°c i#nh nghia trong giao diê#n. V¡i t° khoa interface, Java cho phep ba#n co nh°ng tiê#n ich ây u cho #c iê m mô#t giao diê#n, nhiêu ph°¡ng th°c cu a tinh a hinh

Giao diê#n °¡#c thiêt kê ê hô tr¡# s°# quyêt i#nh ph°¡ng th°c ô#ng luc th¡i gian cha#y. Thông th°¡ng, ê l¡p nay co thê go#i ph°¡ng th°c cu a l¡p kia, ca hai l¡p cân hiê#n diê#n luc th¡i gian di#ch. iêu nay lam cho môi tr°¡ng l¡p tr¡ nên tinh va không co kha nng m¡ rô#ng. Trong mô#t hê# thông nh° vâ#y cây phân câp cang ngay cang bi# â y lên cao. Vi vâ#y, giao diê#n °¡#c i#nh nghia ê ha#n chê viê#c ngay cang nhiêu l¡p con. No tach s°# i#nh nghia mô#t ph°¡ng th°c hay tâ#p cac ph°¡ng th°c ra kho i cây phân câp kê th°a. Vi cac giao diê#n phân câp khac cac l¡p, do o cac l¡p không co quan hê# trong s°# phân câp cung co thê hiê#n th°#c cung mô#t giao diê#n. Ta co thê thây ây th°#c s°# la thê ma#nh giao diê#n

Acess interface InterfaceName {

Type MethodName1(Parameter-List);

...

Type MethodNamen(Parameter-List);

Type Final-Var1 = Value;

Type Final-Varn = Value;

}

- Acess co thê la public hay không. Khi không ch°a #c ta nao, access la m#c i#nh va giao diê#n chi co gia tri# ôi v¡i cac thanh phân khac khai bao trong goi. Khi khai bao public, mo#i oa#n ma êu co thê s° du#ng giao diê#n. Tât ca cac ph°¡ng th°c va biên hiê u ngâm la public nêu giao diê#n khai bao la public

- Cac ph°¡ng th°c la cac ph°¡ng th°c tr°u t°¡#ng, không co thân, chung không °¡#c hiê#n th°#c trong giao diê#n.

- Cac biên co thê khai bao trong khai bao giao diê#n. Chung hiê u ngâm la final va static, nghia la chung không thê bi# thay ô i b¡ i s°# hiê#n th°#c cu a l¡p. Chung pha i °¡#c kh¡ i ta#o v¡i nh°ng gia tri# hng.

2. Hiê#n th°#c giao diê#n

Khi a i#nh nghia giao diê#n, mô#t hay nhiêu l¡p co thê hiê#n th°#c giao diê#n. ê hiê#n th°#c giao diê#n, #t mê#nh ê implements trong i#nh nghia l¡p va sau o ta#o nh°ng ph°¡ng th°c i#nh nghia trong giao diê#n :

Acess class ClassName [extends SuperClass]

[implements InterfaceName1,& InterfaceNamen] {

// Body of class

}

- Nêu l¡p hiê#n th°#c hai giao diê#n co ph°¡ng th°c giông nhau, ph°¡ng th°c °¡#c go#i t°¡ng °ng v¡i giao diê#n o

- Nh°ng ph°¡ng th°c hiê#n th°#c giao diê#n pha i khai bao public. Hinh th°c cu a ph°¡ng th°c hiê#n th°#c pha i giông hê#t khi no °¡#c #c ta trong i#nh nghia interface

- Hiê#n th°#c t°ng phân : Nêu mô#t l¡p ch°a mô#t giao diê#n nh°ng không hiê#n th°#c ây u cac ph°¡ng th°c i#nh nghia trong giao diê#n, l¡p o pha i khai bao abstract

- Mô#t giao diê#n giông nh° mô#t l¡p tr°u t°¡#ng, tuy nhiên Class cu a ba#n không thê kê th°a nhiêu l¡p, nên dung giao diê#n thay cho l¡p tr°u t°¡#ng, mô#t l¡p co thê hiê#n th°#c nhiêu giao diê#n. Vi vâ#y ma giao diê#n cung câp nhiêu s°# kê th°a.

Vi du# 1 :

interface KiemTra {

void inSo(int p);

}

class HienThuc implements KiemTra {

public void inSo(int p) {

System.out.println( Gia tri# cu a p la : +p);

}

void boSung() {

System.out.println( Class hiê#n th°#c giao diê#n co thê i#nh nghia thêm +

thanh viên khac hay không );

}

}

Vi du# 2 :

class HTKhac implements KiemTra {

public void inSo(int p) {

System.out.println( Binh ph°¡ng cu a p la : +p*p);

}

}

3. Truy xuât hiê#n th°#c thông qua tham chiêu giao diê#n

Ba#n co thê khai bao mô#t biên tham chiêu ên ôi t°¡#ng kiê u giao diê#n ch° không h n la l¡p. Khi ba#n go#i ph°¡ng th°c thông qua mô#t trong nh°ng tham chiêu ên ôi t°¡#ng kiê u giao diê#n hay l¡p hiê#n th°#c giao diê#n, phiên ba n ung se °¡#c go#i d°#a trên thê hiê#n th°#c s°# cu a giao diê#n ang tham chiêu ên. Ph°¡ng th°c th°#c thi °¡#c tim t°# ô#ng luc cha#y.

Vi du# :

class UngDung {

public static void main (String args[] {

KiemTra c = new HienThuc(); //c chi biêt ham khai bao trong giao diê#n

HienThuc d = new HienThuc(); //d biêt cac ham khai bao trong HienThuc

HTKhac e = new HTKhac(); //e biêt cac ham khai bao trong HTKhac

c. inSo(50);

c = d; // c bây gi¡ tham chiêu ên ôi t°¡#ng kiê u HienThuc

c.bo Sung();

c = e; // c bây gi¡ tham chiêu ên ôi t°¡#ng kiê u HTKhac

c. inSo(50);

}

}

Kêt qua ch°¡ng trinh la :

Gia tri# cu a p la : 50

Class hiê#n th°#c giao diê#n co thê i#nh nghia thêm thanh viên khac hay không

Binh ph°¡ng cu a p la : 2500

4. Biên trong giao diê#n

Ba#n co thê dung giao diê#n ê import nh°ng hng dung chung cho nhiêu l¡p ¡n gia n bng cach khai bao giao diê#n ch°a nh°ng biên °¡#c kh¡ i ta#o bng nh°ng gia tri# yêu câu. Khi ba#n °a giao diê#n o vao trong l¡p, tât ca nh°ng tên biên nay co pha#m vi nh° mô#t hng. iêu nay giông nh° s° du#ng tâ#p tin header trong C/C++ ta#o sô l°¡#ng l¡n hng bng #defined hay khai bao const. Nêu giao diê#n không ch°a ph°¡ng th°c nao, l¡p ch°a giao diê#n nh° vâ#y th°#c s°# không hiê#n th°#c iêu gi ca . No t°¡ng t°# viê#c l¡p o import nh°ng biên hng cho không gian l¡p nh° nh°ng biên final

5. Kê th°a giao diê#n

Mô#t giao diê#n co thê kê th°a giao diê#n khac bng cach s° du#ng t° khoa extends. Cu phap giông nh° l¡p kê th°a. Khi mô#t l¡p hiê#n th°#c mô#t giao diê#n kê th°a t° mô#t giao diê#n khac, no pha i cung câp tât ca cac hiê#n th°#c cho tât ca cac ph°¡ng th°c kê ca ph°¡ng th°c trong danh sach giao diê#n cha ma giao diê#n nay kê th°a

Ch°¡ng : L P STRING VA NUMBER

I. TÔ NG QUAT

Chung ta a biêt cach dung t° khoa extends khai bao mô#t l¡p la l¡p con cu a mô#t l¡p khac. Tuy nhiên ba#n chi co thê i#nh nghia mô#t l¡p cha cho l¡p con cu a ba#n (Java không u ng hô# nhiêu s°# kê th°a l¡p), va thâ#m chi bo qua t° khoa extends trong mô#t khai bao l¡p, l¡p cu a ba#n cung co mô#t l¡p cha. iêu nay dân ên mô#t câu ho i la cac l¡p bt âu t° âu ?

Nh° mô ta trong hinh sau, l¡p cao nhât, l¡p ma t° o tât ca cac l¡p xuât phat t°, la l¡p Object i#nh nghia trong java.lang. L¡p Object i#nh nghia va cai #t cac hanh vi ma mo#i l¡p trong Java cân ên.

INCLUDEPICTURE "C:\\Download\\tutorial\\figures\\java\\20object.gif" \* MERGEFORMATINET

II. L P STRING VA STRINGBUFFER

Trong goi java.lang ch°a hai l¡p l°u tr° va thao tac d° liê#u kiê u ky t°# : String va StringBuffer, °¡#c khai bao final, nghia la không kê th°a

Ba#n dung l¡p String khi ba#n ang lam viê#c v¡i chuôi hng, nô#i dung không thê thay ô i. StringBuffer °¡#c dung khi ba#n muôn thay ô i nô#i dung cu a chuôi.

Vi du# : Ph°¡ng th°c reverse dung ca hai l¡p String va StringBuffer ê a o cac ky t°# cu a chuôi.

public class ReverseString {

public static String reverse(String source) {

int i, len = source.length();

StringBuffer dest = new StringBuffer(len);

for (i = (len - 1); i >= 0; i--)

dest.append(source.charAt(i));

return dest.toString();

}

}

1. L¡p String

Ta#o mô#t ôi t°¡#ng

Nhiêu String °¡#c ta#o t° cac hng chuôi. Khi trinh di#ch bt g#p mô#t chuôi ky t°# bao gi°a c#p nhay kep, no ta#o ra mô#t ôi t°¡#ng chuôi ma co gia tri# la chuôi bao gi°a c#p nhay kep. Ba#n co thê dung hng String ¡ bât ky âu ba#n dung ôi t°¡#ng String

Ba#n co thê ta#o ôi t°¡#ng chuôi nh° bât ky ôi t°¡#ng nao khac cu a java, dung t° khoa new

String s = new String();

String s = new String("Gobbledygook.");

hay co thê viêt :

String s = "Hola Mundo";

- Mô#t sô cac ham kh¡ i ta#o cu a l¡p String :

String()

String(byte bytes[])

String(byte bytes[],int startIndex, int numChars)

String(char chars[])

String(char chars[], int startIndex, int numChars)

String(String s)

String(StringBuffer s)

Vi du# :

byte b[] = {65, 66, 67, 68, 69, 70};

String s1 = new String(b); // Kh¡ i ta#o s v¡i chuôi ABCDEF

String s2 = new String(b,2,3); // Kh¡ i ta#o s v¡i chuôi CDE

char c[] = { a , b , c , d , e , f );

String s3 = new String#(c); // Kh¡ i ta#o s v¡i chuôi abcdef

String s4 = new String(c,2,3); // Kh¡ i ta#o s v¡i cac ky t°# cde

String s5 = new String(s2); // Ta#o ôi t°¡#ng s3 ch°a cung day ky t°# nh° s2

Cac ph°¡ng th°c th°¡ng dung cu a l¡p String

- int length() : cho chiêu dai chuôi

int len = source.length();

int len = "Goodbye Cruel World".length();

- char charAt(int index) : tra vê ky t°# ta#i vi# tri th° index

char c = source.charAt(1);

char ch = abc .charAt(0); //Gan gia tri# a cho ch

- boolean equals(String object) : kiê m tra hai chuôi co bng nhau không, co phân biê#t hoa th°¡ng

So sanh ph°¡ng th°c equals() va toan t° = = khac nhau hoan toan. Ph°¡ng th°c dung so sanh cac ky t°# trong ôi t°¡#ng String. Toan t° = = so sanh 2 ôi t°¡#ng co cung tham chiêu ên cung mô#t thê hiê#n.

String s1 = Hello ;

String s2 = new String(s1); // ta#o s2 co nô#i dung nh° s1, nh°ng không tro ên cung

// mô#t ôi t°¡#ng

System.out.println( s1 equals s2 : +s1.equals(s2));

System.out.println( s1 = = s2 : +(s1= =s2));

Kêt qua la :

s1 equals s2 : true

s1 = = s2 : false

- int compareTo(String str) : so sanh 2 chuôi, tra vê gia tri# :

nêu < 0 : chuôi nho h¡n str

nêu > 0 : chuôi l¡n h¡n str

nêu = 0 : chuôi bng str

- int indexOf(int character) : tra vê vi# tri tim thây âu tiên (cuôi cung) cu a ky t°# character

int lastIndexOf(int character)

- int indexOf(int character, int from) : tra vê vi# tri tim thây âu tiên (cuôi cung) cu a ky t°# character, kê t° vi# tri from vê cuôi chuôi (hay âu chuôi)

int lastIndexOf(int character, int from)

- int indexOf(String string) : tra vê vi# tri tim thây âu tiên (cuôi cung) cu a chuôi string

int lastIndexOf(String string)

- int indexOf(String string, int from) : tra vê vi# tri tim thây âu tiên (cuôi cung) cu a chuôi string, kê t° vi# tri from vê cuôi chuôi (hay âu chuôi)

int lastIndexOf(String string, int from)

- String subString(int startIndex, int endIndex) : tra vê chuôi con cu a mô#t chuôi bt âu t° vi# tri startIndex ên vi# tri endIndex-1, nêu không co endIndex thi lây ên cuôi chuôi

String org = This is a test ;

String result = ;

result = org.subString(8);

- String replace(char orginal, char replacement) : thay thê ky t°# replacement cho ky t°# orginal

String s = Hello .replace( l , w ); // Cho s bng Hewwo

- String trim() : ct bo khoa ng trông tr°¡c va sau chuôi

- String toLowerCase() : ô i chuôi thanh chuôi th°¡ng

- String toUpperCase() : ô i chuôi thanh chuôi hoa

String s = This is a test ;

String upper = s.toUpperCase();

- Toan t° + : ê kêt nôi hai ôi t°¡#ng String, hay mô#t ôi t°¡#ng String va mô#t gia tri# khac thanh ôi t°¡#ng String,

String s1 = "two";

System.out.println("one" + s1 + "three");

System.out.println("Word v. " + 9+7);

Vi ôi t°¡#ng String không thê thay ô i do o bât c° luc nao ba#n muôn thay ô i chung, ba#n pha i copy chuôi vao StringBuffer, nh°ng v¡i toan t° +, ba#n co thê viêt nh° sau vi Java t°# chuyê n sang StringBuffer va thay ô i chuôi

s1 = s1 + three ;

Vi vâ#y, co thê viêt la#i ch°¡ng trinh a o chuôi trên, không cân thiêt pha i chuyê n sang StringBuffer

public class ReverseString {

public static String reverse(String source) {

int i, len = source.length();

String dest = ;

for (i = (len - 1); i >= 0; i--)

dest = dest + source.charAt(i);

return dest;

}

}

- static String valueOf(object/var x) :

la ham l¡p, tra vê mô#t chuôi ê chuyê n ô i cac biên kiê u s¡ câp hay ôi t°¡#ng x thanh mô#t String

Vi du# : PI la mô#t biên l¡p cu a l¡p Math, ê in gia tri# cu a sô PI :

System.out.println(String.valueOf(Math.PI));

2. L¡p StringBuffer

Ta#o mô#t ôi t°¡#ng StringBuffer

Ph°¡ng th°c kh¡ i ta#o cu a l¡p StringBuffer co da#ng :

StringBuffer() : dung cho chuôi 16 ky t°#

StringBuffer(int length) : dung cho chuôi length ky t°#

Vi du# : StringBuffer dest = new StringBuffer(25);

Cac ph°¡ng th°c th°¡ng dung cu a l¡p StringBuffer

- int length() : cho chiêu dai chuôi

- char charAt(int index) : tra vê ky t°# ta#i vi# tri th° index

- void setCharAt(int index, char ch) : #t ky t°# ch vao StringBuffer, ta#i vi# tri index

- StringBuffer append(object/var x) : bô sung ôi t°¡#ng hay biên x kiê u bât ky vao cuôi StringBuffer. D° liê#u °¡#c chuyê n thanh chuôi tr°¡c khi bô sung vao StringBuffer

int a = 20;

StringBuffer sb = new StringBuffer(40);

String s = sb.append( a = ).append(a).toString#();

- StringBuffer insert(int index, object/var x) : chen mô#t ôi t°¡#ng hay biên x kiê u bât ky vao vi# tri th° index

StringBuffer sb = new StringBuffer("I Java!");

sb.insert(3, "like ");

System.out.println(sb); // Cho chuôi I like Java

- StringBuffer reverse() : a o ng°¡#c cac ky t°# cu a chuôi

StringBuffer sb = new StringBuffer("I Java!");

sb.reverse();

- StringBuffer delete(int startIndex, int endIndex) : xoa chuôi con t° startIndex ên endIndex-1

- StringBuffer deleteCharAt(int index) : xoa ky t°# ta#i vi# tri index

- StringBuffer subString(int startIndex, int endIndex) : tra vê chuôi con cu a mô#t chuôi bt âu t° vi# tri startIndex ên vi# tri endIndex-1, nêu không co endIndex thi lây ên cuôi chuôi

- StringBuffer replace(int startIndex, int endIndex, String str) : thay thê chuôi str vao vi# tri bt âu la startIndex ên endIndex-1 cu a chuôi

Ba#n hay xem thêm java.lang.String and java.lang.StringBuffer ê co °¡#c i#nh nghia ây u cac ph°¡ng th°c va biên cai #t cho hai l¡p nay

III. L P NUMBERS

Nh° a noi ¡ trên, trong goi java.lang co sn nh°ng l¡p t°¡ng °ng v¡i cac kiê u s¡ câp, co thê dung thay cho kiê u s¡ câp : l¡p Integer thay cho kiê u int, l¡p Boolean cho kiê u boolean& L¡p Number la l¡p cha cu a mo#i l¡p bo#c kiê u

Cac l¡p bo#c kiê u sô: Byte, Double, Float, Integer, Long, Short

Cac l¡p bao bo#c cho cac kiê u d° liê#u khac : Boolean, Character, Void, Math

1. Ta#o mô#t ôi t°¡#ng

Float f = new Float(25.5);

Float f = new Float( 24.5 );

- Cac ham kh¡ i ta#o cu a cac l¡p bo#c kiê u sô

Float(double n)

Float(float n)

Float(string str)

Double(double n)

Double(string str)

T°¡ng t°# v¡i cac l¡p bo#c kiê u sô khac

2. Cac ph°¡ng th°c th°¡ng dung cho cac l¡p kiê u sô

- Cac ph°¡ng th°c tra vê gia tri# cu a cac ôi t°¡#ng t°¡ng °ng v¡i cac da#ng sô khac nhau

byte byteValue() // tra vê da#ng sô byte

short shortValue()

int intValue()

long longValue()

double doubleValue()

float floatValue()

Integer intObj = new Integer(25);

int i = intObj.intValue(); // cho i = 25

- Cac ph°¡ng th°c l¡p chuyê n ô i mô#t chuôi thanh gia tri# sô t°¡ng °ng

static byte parseFloat(String str)

static short parseShort(String str)

static int parseInt(String str)

static long parseLong(String str)

static double parseDouble(String str)

static float parseFloat(String str)

String s = 42 ;

int i =Integer.parseInt(s); // cho i = 42

- int compareTo(floatObj/floatVar f ) : so sanh gia tri# cu a ôi t°¡#ng sô v¡i ôi t°¡#ng hay biên sô f, tra vê gia tri# :

nêu = 0 : bng nhau

nêu = sô âm : gia tri# cu a ôi t°¡#ng nho h¡n f

nêu = sô d°¡ng : gia tri# cu a ôi t°¡#ng l¡n h¡n f

- boolean equals(floatObj f ) : nêu = true nghia la gia tri# cu a ôi t°¡#ng bng f

- string toString() : chuyê n mô#t ôi t°¡#ng thanh String.

Tât ca cac l¡p kê th°a toString t° l¡p Object va nhiêu l¡p khac trong goi java.lang viêt e ph°¡ng th°c nay ê cung câp mô#t cai #t ma co y nghia v¡i class o. Ch ng ha#n, cac l¡p bo#c kiê u Character, Integer, Boolean& êu viêt e toString

Vi du# : Integer i = new Integer(20);

System.out.println(i.toString());

- static String toString(var n) : ây la ham l¡p ê chuyê n biên sô n thanh chuôi

String s = Integer.toString(25) // Cho chuôi s la 25

- static Float valueOf(String str) : ây la ham l¡p tra vê ôi t°¡#ng Float cu a gia tri# str, t°¡ng t°# v¡i cac l¡p bo#c kiê u sô khac

String s = 42.5 ;

Integer i = Integer.valueOf(s);

Vi du# : Viêt oa#n ch°¡ng trinh nhâ#p : ho# tên không qua 20 ky t°#, nm sinh >1970 va <2100, co kiê m tra cho ên khi ng°¡i dung nhâ#p ung

import java.io.*;

public class Nhap {

public static void main (String [] args) throws IOException {

DataInputStream kbd = new DataInputStream (System.in);

String s = null;

String ns = null;

// Nhap ho ten

while (true) {

System.out.print("Nhap Ho va ten : ");

s = kbd.readLine();

if ( (s.length() <=20) && (s.length() != 0) ) {

System.out.println("Ho va ten la : "+ s);

break;

}

System.out.println("Phai nhap ho ten khong qua 20 ky tu");

}

// Nhap nam sinh

while (true) {

try {

System.out.print("Nhap nam sinh : ");

s = kbd.readLine();

int i =Integer.parseInt(s);

if ((i<=1970) || (i>=2100)) throw new

NumberFormatException();

System.out.println("Nam sinh la : "+i);

break;

}

catch (IOException e){}

catch(NumberFormatException e){

System.out.println("Ban Phai nhap lai nam sinh trong khoang

1970 den 2100");

}

}

}

}

Ba#n hay xem thêm java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Double, java.lang.Float ê co °¡#c i#nh nghia ây u cac ph°¡ng th°c va biên cai #t cho cac l¡p nay

MU#C LU#C

Ch°¡ng : LÂ#P TRINH H¯ NG ÔI T¯ #NG TRONG JAVA

I. KHAI NIÊ#M LÂ#P TRINH H¯ NG ÔI T¯ #NG

1. Lâ#p trinh h°¡ng ôi t°¡#ng

2. Tr°u t°¡#ng hoa

II. C CHÊ TRIÊ N KHAI MÔ HINH H¯ NG ÔI T¯ #NG

1. Tinh ong goi

2. Tinh kê th°a

3. Tinh a hinh

Ch°¡ng: ÔI T¯ #NG VA L P, MA NG

I. XÂY D¯#NG L P

II. TA#O ÔI T¯ #NG

1. Khai bao ôi t°¡#ng

2. Cach truy xuât thanh phân cu a l¡p

III. GI I THIÊ#U VÊ PH¯ NG TH¯C

1. Khai bao ph°¡ng th°c

2. Pha#m vi truy xuât thanh phân cu a l¡p

3. Ph°¡ng th°c Main()

4. Ham kh¡ i ta#o

5. Ham hu y

6. T° khoa this

7. Na#p chông ham

8. Truyên tham ôi

IV. L P KÊ TH¯A

1. Khai bao kê th°a

2. Viêt chông ham

3. T° khoa super

V. L P VA PH¯ NG TH¯C TR¯U T¯ #NG

VI. L P HNG (KHÔNG KÊ TH¯A) VA HAM HNG (KHÔNG VIÊT CHÔNG)

1. Câm s°# viêt chông

2. Câm s°# kê th°a

VII. L P LÔNG NHAU

VIII. CHUYÊ N Ô I KIÊ U

1. Kiê u s¡ câp thanh kiê u ph°c h¡#p

2. Gi°a cac kiê u ph°c h¡#p

IX. MA NG

1. Ta#o va s° du#ng ma ng

2. Ma ng a chiêu

3. Sao chep ma ng

Ch°¡ng : GOI VA GIAO DIÊ#N

I. GOI

1. i#nh nghia goi

2. iêu khiê n truy xuât

3. S° du#ng goi

II. GIAO DIÊ#N

1. i#nh nghia giao diê#n

2. Hiê#n th°#c giao diê#n

3. Truy xuât hiê#n th°#c thông qua tham chiêu giao diê#n

4. Biên trong giao diê#n

5. Kê th°a giao diê#n

Ch°¡ng : L P STRING VA NUMBER

I. TÔ NG QUAT

II. L P STRING

III. L P NUMBER

Lâ#p trinh h°¡ng ôi t°¡#ng trong Java

PAGE 3

ôi t°¡#ng va l¡p, ma ng

PAGE 19

Goi va giao diê#n

PAGE 32

L¡p String va Number

Mu#c lu#c

myBox

mybox

myBox2

mybox

width

height

depth

Box Object

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #alex