Java_LaptrinhOOP

Màu nền
Font chữ
Font size
Chiều cao dòng

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: Truyen2U.Pro

#alex