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