You are on page 1of 205

M CL C

Ch !ng 1: GI"I THI%U T(NG QUAN V+ NGN NG, L/P TRNH JAVA ......................................................................... 7 1.1. M1 34u ......................................................................... 7 1.2. Gi7i thi8u v: ngn ng; l<p trnh Java............................ 7 1.2.1. Java l g? .............................................................. 7 1.2.2. L=ch s? pht tri@n cBa ngn ng; l<p trnh Java........ 7 1.2.3. MDt sF 3Hc 3i@m nJi b<c cBa ngn ng; l<p trnh Java ........................................................................................ 8 1.3. Cc Kng dLng Java ...................................................... 10 1.3.1. Java v Kng dLng Console .................................... 10 1.3.2. Java v Kng dLng Applet ...................................... 11 1.3.3. Java v pht tri@n Kng dLng Desktop dng AWT v JFC ................................................................................ 12 1.3.4. Java v pht tri@n Kng dLng Web.......................... 13 1.3.5. Java v pht tri@n cc Kng dLng nhng ................. 14 1.4. D=ch v thMc thi mDt ch !ng trnh viNt bOng Java........ 14 1.5. Ch !ng trnh Java 34u tin.......................................... 15 1.5.1. TPo ch !ng trnh nguQn HelloWordApp .............. 15 1.5.2. Bin d=ch t<p tin nguQn HelloWordApp................ 16 1.5.3. ChPy ch !ng trnh HelloWordApp....................... 16 1.5.4. CRu trc ch !ng trnh HelloWordApp.................. 17 S? dLng ph !ng thKc/biNn cBa l7p................................ 17 1.6. Cng cL l<p trnh v ch !ng trnh d=ch........................ 17 1.6.1. J2SDK ................................................................. 17 1.6.2. Cng cL soPn thSo m nguQn Java. ....................... 18 Ch !ng 2: ............................................................................. 21 HTNG, BIUN, KIWU D, LI%U, ........................................... 21 TON TX, BIWU THYC V CC ....................................... 21 CZU TRC [I+U KHIWN TRONG JAVA .......................... 21 2.1. BiNn ............................................................................ 21 2.2. Cc ki@u d; li8u c! s1 ................................................. 23 2.2.1. Ki@u sF nguyn .................................................... 24 2.2.2. Ki@u dRu chRm 3Dng............................................. 26 1

2.2.3. Ki@u k tM (char) .................................................. 26 2.2.4. Ki@u lu<n l (boolean).......................................... 27 2.3. HOng: .......................................................................... 27 2.4. L8nh, khF i l8nh trong java........................................... 28 2.5. Ton t? v bi@u thKc ................................................... 29 2.5.1. Ton t? sF h\c...................................................... 29 2.5.2. Ton t? trn bit..................................................... 29 2.5.3. Ton t? quan h8 & logic ....................................... 29 2.5.4. Ton t? p ki@u .................................................... 30 2.5.5. Ton t? 3i:u ki8n ................................................. 30 2.5.6. ThK tM u tin ...................................................... 30 2.6. CRu trc 3i:u khi@n ..................................................... 31 2.6.1. CRu trc 3i:u ki8n if else ................................. 31 2.6.2. CRu trc switch case ........................................ 32 2.6.3. CRu trc lHp.......................................................... 32 2.6.4. CRu trc l8nh nhSy (jump) .................................... 33 2.7. L7p bao ki@u d; li8u c! s1 (Wrapper Class)................ 33 2.8. Ki@u d; li8u mSng....................................................... 34 2.8.1. Khi ni8m mSng ................................................... 34 2.8.2. Khai bo mSng ..................................................... 34 2.8.3. CRp pht bD nh7 cho mSng ................................... 35 2.8.4. Kh1i tPo mSng...................................................... 35 2.8.5. Truy c<p mSng ..................................................... 35 2.9. MDt sF v dL minh h\a: ............................................... 36 Ch !ng 3: H-"NG []I T-^NG TRONG JAVA ............... 47 3.1. M1 34u ....................................................................... 47 3.2. L7p (Class) ................................................................. 48 3.2.1. Khi ni8m ............................................................ 48 3.2.2. Khai bo/3=nh ngh_a l7p ....................................... 48 3.2.3. TPo 3Fi t ang cBa l7p .......................................... 49 3.2.4. ThuDc tnh cBa l7p ............................................... 49 3.2.5. Hm - Ph !ng thKc l7p (Method)......................... 50 3.2.6. Kh1i tPo mDt 3Fi t ang (Constructor)................... 52 3.2.7. BiNn this............................................................... 53 2

3.2.8. Khai bo chQng ph !ng thKc (overloading method) ...................................................................................... 54 3.3. [Hc 3i@m h 7ng 3F i t ang trong java ......................... 54 3.3.1. [ng gi (encapsulation) ..................................... 55 3.3.2. Tnh 3a hnh (polymorphism): .............................. 55 3.3.3. Tnh kN thba (inheritance) .................................... 57 3.4. Gi (packages) ............................................................ 62 3.5. Giao di8n (interface) ................................................... 63 3.5.1. Khi ni8m interface: ............................................. 63 3.5.2. Khai bo interface: ............................................... 64 3.5.3. V dL minh h\a..................................................... 65 Ch !ng 4: THIUT KU GIAO DI%N NG-dI DNG............. 82 4.1. M1 34u ....................................................................... 82 4.2. Gi7i thi8u th vi8n awt................................................ 83 4.3. Cc khi ni8m c! bSn.................................................. 83 4.3.1. Component........................................................... 83 4.3.2. Container ............................................................. 84 4.3.3. Layout Manager ................................................... 85 4.4. ThiNt kN GUI cho ch !ng trnh ................................... 86 4.4.1. TPo khung chKa c?a sJ ch !ng trnh .................... 86 4.4.2. TPo h8 thFng thMc 3!n.......................................... 87 4.4.3. Gen Component vo khung chKa.......................... 89 4.4.4. Trnh by cc Component trong khung chKa ........ 90 4.4.5. Cc 3Fi t ang khung chKa Container.................. 101 4.5. X? l biNn cF/sM ki8n ................................................ 105 4.5.1. M hnh x? l sM ki8n (Event-Handling Model) . 105 4.5.2. X? l sM ki8n chuDt ............................................ 108 4.5.3. X? l sM ki8n bn phm ...................................... 111 4.6. MDt sF v dL minh h\a .............................................. 115 Ch !ng 5: LUfNG V T/P TIN....................................... 128 5.1. M1 34u ..................................................................... 128 5.2. LuQng (Streams) ....................................................... 129 5.2.1. Khi ni8m luQng................................................. 129 5.2.2. LuQng byte (Byte Streams)................................. 129 5.2.3. LuQng k tM (Character Streams)........................ 131 3

5.2.4. Nh;ng luQng 3 ac 3=nh ngh_a tr 7c (The Predefined Streams) ...................................................................... 132 5.3. S? dLng luQng Byte .................................................. 133 5.3.1. [\c d; li8u tb Console....................................... 134 5.3.2. XuRt d; li8u ra Console...................................... 135 5.3.3. [\c v ghi file dng luQng Byte ......................... 136 5.3.4. [\c v ghi d; li8u nh= phn................................ 141 5.4. File truy c<p nggu nhin (Random Access Files) ....... 145 5.5. S? dLng luQng k tM .................................................. 147 5.5.1. Nh<p Console dng luQng k tM ......................... 149 5.5.2. XuRt Console dng luQng k tM .......................... 151 5.5.3. [\c/ghi File dng luQng k tM ............................ 152 5.6. L7p File .................................................................... 155 Ch !ng 6: L/P TRNH C# Si D, LI%U.......................... 158 6.1. GI"I THI%U............................................................. 158 6.2. KIUN TRC JDBC................................................... 158 6.3. Cc khi ni8m c! bSn................................................ 160 6.3.1. JDBC Driver ...................................................... 160 6.3.2. JDBC URL ........................................................ 162 6.4. KUT N]I CSDL V"I JDBC ..................................... 163 6.4.1. [jng k trnh 3i:u khi@n .................................... 163 6.4.2. ThMc hi8n kNt nFi ............................................... 163 6.4.3. V dL .................................................................. 164 6.5. KIWU D, LI%U SQL V KIWU D, LI%U JAVA.... 168 6.6. CC THAO TC C# BkN TRN CSDL................ 170 6.6.1. Cc l7p c! bSn ................................................... 170 6.6.2. V dL truy vRn CSDL ......................................... 171 6.6.3. V dL c<p nh<t CSDL ......................................... 174 Ti li8u tham khSo:.............................................................. 176 PhL lLc A: Trec nghi8m kiNn thKc........................................ 177 PhL LLc B:[p n trec nghi8m kiNn thKc............................. 205

L#I NI &'U
Ngn ng; l<p trnh java ra 3li v 3 ac cc nh nghin cKu cBa Cng ty Sun Microsystem gi7i thi8u vo njm 1995. Sau khi ra 3li khng lu, ngn ng; l<p trnh ny 3 3 ac s? dLng rDng ri v phJ biNn 3Fi v7i cc l<p trnh vin chuyn nghi8p cmng nh cc nh pht tri@n ph4n m:m. G4n 3y ngn ng; l<p trnh, cng ngh8 java 3 3 ac 3 a vo giSng dPy 1 cc c! s1 3o tPo l<p trnh vin chuyn nghi8p. MDt sF tr lng 3Pi h\c 1 Vi8t Nam dPy mn l<p trnh java nh mDt chuyn 3: tM ch\n cho cc sinh vin cng ngh8 thng tin giai 3oPn chuyn ngnh. Sau mDt thli gian tm hi@u, lm vi8c v 3 ac tham gia giSng dPy chuyn 3: l<p trnh java cho l7p c? nhn tin h\c tb xa qua mPng. Nhm tc giS chng ti quyNt 3=nh bin soPn cuFn gio trnh ny nhOm phLc vL cng tc giSng dPy cmng nh h\c t<p cBa sinh vin chuyn ngnh cng ngh8 thng tin. NDi dung gio trnh t<p trung vo nh;ng kiNn thKc cjn bSn nhRt cBa l<p trnh java gip ng li 3\c b 7c 34u tiNp c<p dn dng v7i cng ngh8 m7i ny, v 3y cmng chnh l mDt b 7c 38m 3@ chng ta tr1 thnh java shooter. MDt sF vRn 3: nng trong ngn ng; l<p trnh java nh : javabean, thiNt kNt giao di8n dng th vi8n JFC(Java Foundation Class), l<p trnh mPng, l<p trnh c! s1 d; li8u bOng java, l<p trnh Kng dLng web dng J2EE (Java 2 Enterprise Edition), so 3 ac ni 3Nn trong cc chuyn 3: nng cao. Ch !ng 6 cBa gio trnh gi7i thi8u tJng quan v: l<p trnh c! s1 d; li8u dng jdbc, mDt nDi dung theo chng ti c4n phSi 3 ac trnh by trong mDt chuyn 3: ring. [@ c th@ 3\c hi@u gio trnh ny ng li 3\c c4n nem v;ng cc kiNn thKc v:: nh<p mn l<p trnh, l<p trnh h 7ng 3Fi t ang. [y l l4n xuRt bSn 34u tin chec chen khng th@ trnh khpi nh;ng sai st. Nhm tc giS rRt mong nh<n 3 ac nh;ng kiNn 3ng gp cBa qu th4y c, cc 3Qng nghi8p v bPn 3\c 3@ c 5

th@ hon thi8n h!n gio trnh ny phLc vL cho vi8c h\c t<p cBa sinh vin. Xin chn thnh cSm !n! TPHCM thng 01/2006 Nhm tc giS

Ch)*ng 1: GI+I THI-U T/NG QUAN V2 NGN NG3 L6P TRNH JAVA
1.1.M7 9:u Ch !ng ny so cung cRp cho sinh vin cc khi ni8m, kiNn thKc c! bSn lin quan 3Nn vi8c l<p trnh Kng dLng bOng ngn ng; Java nh : l=ch s? pht tri@n cBa java, cc 3Hc 3i@m cBa java, khi ni8m my So, cRu trc cBa mDt ch !ng trnh 3!n giSn viNt bOng Java cmng nh cch xy dMng, d=ch v thMc thi mDt ch !ng trnh Java. 1.2.Gi=i thi>u v@ ngn ngA lBp trnh Java 1.2.1. Java l g? Java l ngn ng; l<p trnh h 7ng 3Fi t ang (tMa C++) do Sun Microsystem 3 a ra vo gi;a th<p nin 90. Ch !ng trnh viNt bOng ngn ng; l<p trnh java c th@ chPy trn bRt kq h8 thFng no c ci my So java (Java Virtual Machine). 1.2.2.LCch sE pht triFn cHa ngn ngA lBp trnh Java Ngn ng; l<p trnh Java do James Gosling v cc cng sM cBa Cng ty Sun Microsystem pht tri@n. [4u th<p nin 90, Sun Microsystem t<p hap cc nh nghin cKu thnh l<p nn nhm 3Ht tn l Green Team. Nhm Green Team c trch nhi8m xy dMng cng ngh8 m7i cho ngnh 3i8n t? tiu dng. [@ giSi quyNt vRn 3: ny nhm nghin cKu pht tri@n 3 xy dMng mDt ngn ng; l<p trnh m7i 3Ht tn l Oak t !ng tM nh C++ nh ng loPi bp mDt sF tnh njng nguy hi@m cBa C++ v c khS njng chPy trn nhi:u n:n ph4n cKng khc nhau. Cng lc 3 world wide web bet 34u pht tri@n v Sun 3 thRy 3 ac ti:m njng cBa ngn ng; Oak nn 3 34u t cSi tiNn

v pht tri@n. Sau 3 khng lu ngn ng; m7i v7i tn g\i l Java ra 3li v 3 ac gi7i thi8u njm 1995. Java l tn g\i cBa mDt hn 3So 1 Indonexia, [y l n!i nhm nghin cKu pht tri@n 3 ch\n 3@ 3Ht tn cho ngn ng; l<p trnh Java trong mDt chuyNn 3i tham quan v lm vi8c trn hn 3So ny. Hn 3So Java ny l n!i rRt nJi tiNng v7i nhi:u khu v ln trQng cafe, 3 chnh l l do chng ta th lng thRy bi@u t ang ly caf trong nhi:u sSn phsm ph4n m:m, cng cL l<p trnh Java cBa Sun cmng nh mDt sF hng ph4n m:m khc 3 a ra. 1.2.3.MJt sL 9Nc 9iFm nPi bBc cHa ngn ngA lBp trnh Java My Qo Java (JVM - Java Virtual Machine) TRt cS cc ch !ng trnh muFn thMc thi 3 ac th phSi 3 ac bin d=ch ra m my. M my cBa tbng kiNn trc CPU cBa mti my tnh l khc nhau (t<p l8nh m my cBa CPU Intel, CPU Solarix, CPU Macintosh l khc nhau), v v<y tr 7c 3y mDt ch !ng trnh sau khi 3 ac bin d=ch xong chu c th@ chPy 3 ac trn mDt kiNn trc CPU cL th@ no 3. [Fi v7i CPU Intel chng ta c th@ chPy cc h8 3i:u hnh nh Microsoft Windows, Unix, Linux, OS/2, Ch !ng trnh thMc thi 3 ac trn Windows 3 ac bin d=ch d 7i dPng file c 3ui .EXE cn trn Linux th 3 ac bin d=ch d 7i dPng file c 3ui .ELF, v v<y tr 7c 3y mDt ch !ng trnh chPy 3 ac trn Windows muFn chPy 3 ac trn h8 3i:u hnh khc nh Linux chvng hPn th phSi chunh s?a v bin d=ch lPi. Ngn ng; l<p trnh Java ra 3li, nhl vo my So Java m kh khjn nu trn 3 3 ac khec phLc. MDt ch !ng trnh viNt bOng ngn ng; l<p trnh Java so 3 ac bin d=ch ra m cBa my So java (m java bytecode). Sau 3 my So Java ch=u trch nhi8m chuy@n m java bytecode thnh m my t !ng Kng. Sun Microsystem ch=u trch nhi8m pht tri@n cc my So Java chPy trn cc h8 3i:u hnh trn cc kiNn trc CPU khc nhau. Thng dCch: 8

Java l mDt ngn ng; l<p trnh vba bin d=ch vba thng d=ch. Ch !ng trnh nguQn viNt bOng ngn ng; l<p trnh Java c 3ui *.java 34u tin 3 ac bin d=ch thnh t<p tin c 3ui *.class v sau 3 so 3 ac trnh thng d=ch thng d=ch thnh m my. &Jc lBp n@n: MDt ch !ng trnh viNt bOng ngn ng; Java c th@ chPy trn nhi:u my tnh c h8 3i:u hnh khc nhau (Windows, Unix, Linux, ) minn sao 1 3 c ci 3Ht my So java (Java Virtual Machine). ViNt mDt l4n chPy m\i n!i (write once run anywhere). H)=ng 9Li t)Rng: H 7ng 3Fi t ang trong Java t !ng tM nh C++ nh ng Java l mDt ngn ng; l<p trnh h 7ng 3Fi t ang hon ton. TRt cS m\i thK 3: c<p 3Nn trong Java 3:u lin quan 3Nn cc 3Fi t ang 3 ac 3=nh ngh_a tr 7c, th<m ch hm chnh cBa mDt ch !ng trnh viNt bOng Java (3 l hm main) cmng phSi 3Ht bn trong mDt l7p. H 7ng 3Fi t ang trong Java khng c tnh 3a kN thba (multi inheritance) nh trong C++ m thay vo 3 Java 3 a ra khi ni8m interface 3@ ht tra tnh 3a kN thba. VRn 3: ny so 3 ac bn chi tiNt trong ch !ng 3. &a nhi>m - 9a luSng (MultiTasking - Multithreading): Java ht tra l<p trnh 3a nhi8m, 3a luQng cho php nhi:u tiNn trnh, ti@u trnh c th@ chPy song song cng mDt thli 3i@m v t !ng tc v7i nhau. KhQ chuyFn (portable): Ch !ng trnh Kng dLng viNt bOng ngn ng; Java chu c4n chPy 3 ac trn my So Java l c th@ chPy 3 ac trn bRt kq my tnh, h8 3i:u hnh no c my So Java. ViNt mDt l4n, chPy m\i n!i (Write Once, Run Anywhere). HT trR mVnh cho vi>c pht triFn Wng dXng: 9

Cng ngh8 Java pht tri@n mPnh mo nhl vo 3Pi gia Sun Microsystem cung cRp nhi:u cng cL, th vi8n l<p trnh phong ph ht tra cho vi8c pht tri@n nhi:u loPi hnh Kng dLng khc nhau cL th@ nh : J2SE (Java 2 Standard Edition) ht tra pht tri@n nh;ng Kng dLng 3!n, Kng dLng client-server; J2EE (Java 2 Enterprise Edition) ht tra pht tri@n cc Kng dLng th !ng mPi, J2ME (Java 2 Micro Edition) ht tra pht tri@n cc Kng dLng trn cc thiNt b= di 3Dng, khng dy, 1.3.Cc Wng dXng Java 1.3.1.Java v Wng dXng Console Yng dLng Console l Kng dLng nh<p xuRt 1 chN 3D vjn bSn t !ng tM nh mn hnh Console cBa h8 3i:u hnh MS-DOS. L\ai ch !ng trnh Kng dLng ny thch hap v7i nh;ng ai b 7c 34u lm quen v7i ngn ng; l<p trnh java. Cc Kng dLng ki@u Console th lng 3 ac dng 3@ minh h\a cc v dL c! bSn lin quan 3Nn c php ngn ng;, cc thu<t ton, v cc ch !ng trnh Kng dLng khng c4n thiNt 3Nn giao di8n ng li dng 3Q h\a.

class HelloWorld { public static void main(String[] args) 10

{ System.out.println("\nHello World"); } } 1.3.2.Java v Wng dXng Applet Java Applet l loPi Kng dLng c th@ nhng v chPy trong trang web cBa mDt trnh duy8t web. Tb khi internet m7i ra 3li, Java Applet cung cRp mDt khS njng l<p trnh mPnh mo cho cc trang web. Nh ng g4n 3y khi cc ch !ng trnh duy8t web 3 pht tri@n v7i khS njng l<p trnh bOng VB Script, Java Script, HTML, DHTML, XML, cng v7i sM canh tranh khFc li8t cBa Microsoft v Sun 3 lm cho Java Applet lu ml. V cho 3Nn by gil g4n nh cc l<p trnh vin 3:u khng cn mHn m v7i Java Applet n;a. (trnh duy8t IE 3i km trong phin bSn Windows 2000 3 khng cn mHc nhin ht tra thMc thi mDt Kng dLng Java Applet). Hnh bn d 7i minh h\a mDt ch !ng trnh java applet thMc thi trong mDt trang web.

11

1.3.3.Java v pht triFn Wng dXng Desktop dng AWT v JFC Vi8c pht tri@n cc ch !ng trnh Kng dLng c giao di8n ng li dng 3Q h\a trMc quan giFng nh nh;ng ch !ng trnh 3 ac viNt dng ngn ng; l<p trnh VC++ hay Visual Basic 3 3 ac java giSi quyNt bOng th vi8n AWT v JFC. JFC l th vi8n rRt phong ph v ht tra mPnh mo h!n nhi:u so v7i AWT. JFC gip cho ng li l<p trnh c th@ tPo ra mDt giao di8n trMc quan cBa bRt kq Kng dLng no. Lin quan 3Nn vi8c pht tri@n cc Kng dLng c giao di8n ng li dng 3Q h\a trMc quan chng ta so tm hi@u chi tiNt trong ch !ng 4. Minh h\a thiNt kN giao di8n ng li dng s? dLng JFC

12

1.3.4.Java v pht triFn Wng dXng Web Java ht tra mPnh mo 3Fi v7i vi8c pht tri@n cc Kng dLng Web thng qua cng ngh8 J2EE (Java 2 Enterprise Edition). Cng ngh8 J2EE hon ton c th@ tPo ra cc Kng dLng Web mDt cch hi8u quS khng thua km cng ngh8 .NET m Microsft 3ang quSng co. Hi8n nay c rRt nhi:u trang Web nJi tiNng 1 Vi8t Nam cmng nh khep n!i trn thN gi7i 3 ac xy dMng v pht tri@n dMa trn n:n cng ngh8 Java. SF Kng dLng Web 3 ac xy dMng dng cng ngh8 Java chec chen khng ai c th@ biNt 3 ac con sF chnh xc l bao nhiu, nh ng chng ti 3 a ra 3y vi v dL 3@ thRy rOng cng ngh8 Java cBa Sun l mDt 3Fi thB 3ng glm cBa Microsoft. 13

http://java.sun.com/ http://e-docs.bea.com/ http://www.macromedia.com/software/jrun/ http://tomcat.apache.org/index.html Chec khng t ng li trong chng ta biNt 3Nn trang web thng tin nh 3Rt nJi tiNng 1 TPHCM 3 l: http://www.nhadat.com/. Yng dLng Web ny cmng 3 ac xy dMng dMa trn n:n cng ngh8 java. BPn c th@ tm hi@u chi tiNt h!n v: cng ngh8 J2EE tPo 3=a chu: http://java.sun.com/j2ee/ 1.3.5.Java v pht triFn cc Wng dXng nhng Java Sun 3 a ra cng ngh8 J2ME (The Java 2 Platform, Micro Edition J2ME) ht tra pht tri@n cc ch !ng trnh, ph4n m:m nhng. J2ME cung cRp mDt mi tr lng cho nh;ng ch !ng trnh Kng dLng c th@ chPy 3 ac trn cc thiNt b= c nhn nh : 3i8n th\ai di 3Dng, my tnh bp ti PDA hay Palm, cmng nh cc thiNt b= nhng khc.

BPn c th@ tm hi@u chi tiNt h!n v: cng ngh8 J2ME tPi 3=a chu: http://java.sun.com/j2me/ 1.4.DCch v thYc thi mJt ch)*ng trnh viZt b[ng Java Vi8c xy dMng, d=ch v thMc thi mDt ch !ng trnh viNt bOng ngn ng; l<p trnh java c th@ tm tet qua cc b 7c sau: - ViZt m nguSn: dng mDt ch !ng trnh soPn thSo no 3Ry (NotePad hay Jcreator chvng hPn) 3@ viNt m nguQn v l u lPi v7i tn c 3ui .java 14

Bin dCch ra m my Qo: dng trnh bin d=ch javac 3@ bin d=ch m nguQn .java thnh m cBa my So (java bytecode) c 3ui .class v l u ln 3_a Thng dCch v thYc thi: Kng dLng 3 ac load vo bD nh7, thng d=ch v thMc thi dng trnh thng d=ch Java thng qua l8nh java. o &)a m java bytecode vo bJ nh=: 3y l b 7c loading. Ch !ng trnh phSi 3 ac 3Ht vo trong bD nh7 tr 7c khi thMc thi. Loader so lRy cc files chKa m java bytecode c 3ui .class v nPp chng vo bD nh7. o KiFm tra m java bytecode: tr 7c khi trnh thng d=ch chuy@n m bytecode thnh m my t !ng Kng 3@ thMc thi th cc m bytecode phSi 3 ac ki@m tra tnh hap l8. o Thng dCch & thYc thi: cuFi cng d 7i sM 3i:u khi@n cBa CPU v trnh thng d=ch tPi mti thli 3i@m so c mDt m bytecode 3 ac chuy@n sang m my v thMc thi.

1.5.Ch)*ng trnh Java 9:u tin 1.5.1.TVo ch)*ng trnh nguSn HelloWordApp Kh1i 3Dng Notepad v g 3oPn m sau /*Vi t ch$%ng trnh in dng HelloWorld ln mn hnh Console*/ class HelloWorldApp{ public static void main(String[] args){ //In dong chu HelloWorld System.out.println(HelloWorld); } } L u lPi v7i tn HelloWorldApp.java 15

1.5.2.Bin dCch tBp tin nguSn HelloWordApp Vi8c bin d=ch t<p tin m nguQn ch !ng trnh HelloWorldApp c th@ thMc hi8n qua cc b 7c cL th@ nh sau: - M1 c?a sJ Command Prompt. - Chuy@n 3Nn th mLc chKa t<p tin nguQn vba tPo ra. - ThMc hi8n cu l8nh: javac HelloWordApp.java NNu gHp thng bo lti Bad Command of filename hoHc The name specified is not recognized as an internal or external command, operable program or batch file c ngh_a l Windows khng tm 3 ac trnh bin d=ch javac. [@ s?a lti ny chng ta c4n c<p nh<t lPi 3 lng dgn PATH cBa h8 thFng. Ng ac lPi nNu thnh cng bPn so c thm t<p tin HelloWordApp.class 1.5.3.ChVy ch)*ng trnh HelloWordApp TPi dgu nhec g l8nh: java HelloWordApp NNu ch !ng trnh 3ng bPn so thRy dng ch; HelloWord trn mn hnh Console. NNu cc bPn nh<n 3 ac lti Exception in thread "main java.lang.NoClassDefFoundError: HelloWorldApp c ngh_a l Java khng th@ tm 3 ac t<p tin m bytecode tn HelloWorldApp.class cBa cc bPn. MDt trong nh;ng n!i java cF tm t<p tin bytecode l th mLc hi8n tPi cBa

16

cc bPn. V th@ nNu t<p tin byte code 3 ac 3Ht 1 C:\java th cc bPn nn thay 3Ji 3 lng dgn t7i 3. 1.5.4.C\u trc ch)*ng trnh HelloWordApp Ph)*ng thWc main(): l 3i@m bet 34u thMc thi mDt Kng dLng. Mti Kng dLng Java phSi chKa mDt ph !ng thKc main c dPng nh sau: public static void main(String[] args) Ph !ng thKc main chKa ba bJ tb 3Hc tS sau: public chu ra rOng ph !ng thKc main c th@ 3 ac g\i bwi bRt kq 3Fi t ang no. static chu ra reng ph !ng thKc main l mDt ph !ng thKc l7p. void chu ra rOng ph !ng thKc main so khng trS v: bRt kq mDt gi tr= no. Ngn ngA Java hT trR ba kiFu ch thch sau: /* text */ // text /** documentation */. Cng cL javadoc trong bD JDK s? dLng ch thch ny 3@ chusn b= cho vi8c tM 3Dng pht sinh ti li8u. - DRu m1 v 3ng ngo8Pc nh\n { v }: l bet 34u v kNt thc 1 khFi l8nh. - DRu chRm phsy ; kNt thc 1 dng l8nh. 1.5.5.SE dXng ph)*ng thWc/biZn cHa l=p C php: Tn_l7p.Tn_biNn hoHc Tn_l7p.Tn_ph !ng_thKc() 1.6.Cng cX lBp trnh v ch)*ng trnh dCch 1.6.1.J2SDK Download J2SE phin bSn m7i nhRt t !ng Kng v7i h8 3i:u hnh 3ang s? dLng tb 3=a chu java.sun.com v ci 17

3Ht ln my tnh (phin bSn 3 ac chng ti s? dLng khi viNt gio trnh ny l J2SE 1.4). Sau khi ci xong, chng ta c4n c<p nh<t 3 lng dgn PATH h8 thFng chu 3Nn th mLc chKa ch !ng trnh d=ch cBa ngn ng; java.

1.6.2.Cng cX soVn thQo m nguSn Java. [@ viNt m nguQn java chng ta c th@ s? dLng trnh soPn thSo NotePad hoHc mDt sF mi tr lng pht tri@n ht tra ngn ng; java nh : Jbuilder cBa hng Borland, Visual Caf cBa hng Symantec, JDeveloper cBa hng Oracle, Visual J++ cBa Microsoft, Trong khun khJ gio trnh ny cmng nh 3@ h 7ng dgn sinh vin thMc hnh chng ti dng cng cL JCreator LE v3.50 cBa hng XINOX Software. Cc bPn c th@ download JCreator LE v3.50 tb http://www.jcreator.com/download.htm. V d : Dng JCreator t&o v th)c thi ch$%ng trnh c tn HelloWorldApp. B$*c 1: T&o 1 Empty Project 18

File New Project. Ch,n Empty project r.i b/m nt ch,n Next

Sau 0 nh1p tn project v b/m ch,n Finish.

B$*c 2: T&o m2t Class m*i tn HelloWorldApp v 0$a vo Project hi3n t&i. - File New Class. - Nh1p vo tn Class v ch,n Finish (hnh bn d$*i).

19

B$*c 3: So&n th4o m ngu.n (hnh bn d$*i)


D=ch (F7)

ThMc thi (F5)

C?a sJ WorkSpace

C?a sJ soPn thSo m nguQn

20

Ch)*ng 2: H]NG, BI^N, KI`U D3 LI-U, TON Ta, BI`U THcC V CC CdU TRC &I2U KHI`N TRONG JAVA
2.1.BiZn BiNn l vng nh7 dng 3@ l u tr; cc gi tr= cBa ch !ng trnh. Mti biNn gen li:n v7i mDt ki@u d; li8u v mDt 3=nh danh duy nhRt g\i l tn biNn. - Tn biNn thng th lng l mDt chuti cc k tM (Unicode), k sF. o Tn biNn phSi bet 34u bOng mDt ch; ci, mDt dRu gPch d 7i hay dRu dollar. o Tn biNn khng 3 ac trng v7i cc tb kha (xem phL lLc cc tb kha trong java). o Tn biNn khng c khoSng treng 1 gi;a tn. - Trong java, biNn c th@ 3 ac khai bo 1 bRt kq n!i 3u trong ch !ng trnh. Cch khai bo <ki@u_d;_li8u> <tn_biNn>; <ki@u_d;_li8u> <tn_biNn> = <gi_tr=>; Gn gi trC cho biZn <tn_biNn> = <gi_tr=>; BiZn cng cJng (ton cXc): l biNn c th@ truy xuRt 1 khep n!i trong ch !ng trnh, th lng 3 ac khai bo dng tb kha public, hoHc 3Ht chng trong mDt class. BiZn cXc bJ: l biNn chu c th@ truy xuRt trong khFi l8nh n khai bo.

21

L)u : Trong ngn ng; l<p trnh java c phn bi8t ch; in hoa v in th lng. V v<y chng ta c4n l u khi 3Ht tn cho cc 3Fi t !ng d; li8u cmng nh cc x? l trong ch !ng trnh. V d : import java.lang.*; import java.io.*; class VariableDemo { static int x, y; public static void main(String[] args) { x = 10; y = 20; int z = x+y; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("z = x + y =" + z); System.out.println("So nho hon la so:" + Math.min(x, y)); char c = 80; System.out.println("ky tu c la: " + c); } } KNt quS ch !ng trnh

22

2.2.Cc kiFu dA li>u c* s7 Ngn ng; l<p trnh java c 8 ki@u d; li8u c! s1: byte, short, int, long, float, double, boolean v char.

23

Ki@u c! s1 Ki@u lu<n l Ki@u k tM ki@u nguyn boolean char Ki@u sF ki@u thMc

byte

short

int

long

float

double

Ki@u

byte short int long float double

Kch th 7c (bytes) 1 2 4 8 4 8

Gi tr= min

Gi tr= max

-256 -32768 -231 -263

255 32767 231 - 1 263 - 1

Gi tr= mHc 3=nh 0 0 0 0L 0.0f 0.0d

2.2.1.KiFu sL nguyn Java cung cRp 4 ki@u sF nguyn khc nhau l: byte, short, int, long. Kch th 7c, gi tr= nhp nhRt, l7n nhRt, cmng nh gi tr= mHc 3=nh cBa cc ki@u d; li8u sF nguyn 3 ac m tS chi tiNt trong bSng trn. Ki@u mHc 3=nh cBa cc sF nguyn l ki@u int. Cc sF nguyn ki@u byte v short rRt t khi 3 ac dng. Trong java khng c ki@u sF nguyn khng dRu nh trong ngn ng; C/C++. 24

Khai bo v kh1i tPo gi tr= cho cc biNn ki@u nguyn: int x = 0; long y = 100; MJt sL l)u 9Li v=i cc php ton trn sL nguyn: - NNu hai ton hPng ki@u long th kNt quS l ki@u long. MDt trong hai ton hPng khng phSi ki@u long so 3 ac chuy@n thnh ki@u long tr 7c khi thMc hi8n php ton. - NNu hai ton hPng 34u khng phSi ki@u long th php tnh so thMc hi8n v7i ki@u int. - Cc ton hPng ki@u byte hay short so 3 ac chuy@n sang ki@u int tr 7c khi thMc hi8n php ton. - Trong java khng th@ chuy@n biNn ki@u int v ki@u boolean nh trong ngn ng; C/C++. V d : c 3oPn ch !ng trnh nh sau boolean b = false; if (b == 0) { System.out.println("Xin chao"); } Lc bin d=ch 3oPn ch !ng trnh trn trnh d=ch so bo lti: khng 3 ac php so snh biNn ki@u boolean v7i mDt gi tr= ki@u int.

25

2.2.2.KiFu d\u ch\m 9Jng [Fi v7i ki@u dRu chRm 3Dng hay ki@u thMc, java ht tra hai ki@u d; li8u l float v double. Ki@u float c kch th 7c 4 byte v gi tr= mHc 3=nh l 0.0f Ki@u double c kch th 7c 8 byte v gi tr= mHc 3=nh l 0.0d SF ki@u dRu chRm 3Dng khng c gi tr= nhp nhRt cmng khng c gi tr= l7n nhRt. Chng c th@ nh<n cc gi tr=: - SF m - SF d !ng - V cMc m - V cMc d !ng Khai bo v kh1i tPo gi tr= cho cc biNn ki@u dRu chRm 3Dng: float x = 100.0/7; double y = 1.56E6; MDt sF l u 3Fi v7i cc php ton trn sF dRu chRm 3Dng: - NNu mti ton hPng 3:u c ki@u dRn chRm 3Dng th php ton chuy@n thnh php ton dRu chRm 3Dng. - NNu c mDt ton hPng l double th cc ton hPng cn lPi so 3 ac chuy@n thnh ki@u double tr 7c khi thMc hi8n php ton. - BiNn ki@u float v double c th@ p chuy@n sang ki@u d; li8u khc trb ki@u boolean. 2.2.3.KiFu k tY (char) Ki@u k tM trong ngn ng; l<p trnh java c kch th 7c l 2 bytes v chu dng 3@ bi@u dinn cc k tM trong bD m Unicode. Nh v<y ki@u char trong java c th@ bi@u dinn tRt cS 216 = 65536 k tM khc nhau. Gi tr= mHc 3=nh cho mDt biNn ki@u char l null.

26

2.2.4.KiFu luBn l (boolean) Ki@u boolean chu nh<n 1 trong 2 gi tr=: true hoHc false. Trong java ki@u boolean khng th@ chuy@n thnh ki@u nguyn v ng ac lPi. Gi tr= mHc 3=nh cBa ki@u boolean l false.

2.3.H[ng: HOng l mDt gi tr= bRt biNn trong ch !ng trnh Tn hOng 3 ac 3Ht theo qui 7c giFng nh tn biNn. HOng sF nguyn: tr lng hap gi tr= hOng 1 dPng long ta thm vo cuFi chuti sF ch; l hay L. (v dL: 1L) HOng sF thMc: trulng hap gi tr= hOng c ki@u float ta thm tiNp v_ ng; f hay F, cn ki@u sF double th ta thm tiNp v_ ng; d hay D. HOng Boolean: java c 2 hOng boolean l true, false. HOng k tM: l mDt k tM 3!n nOm gi;a nOm gi;a 2 dRu ngoHc 3!n. o V dL: a: hOng k tM a o MDt sF hOng k tM 3Hc bi8t K tM \b \t \n \r \ \ \\ \f \uxxxx ngh_a Xa li (BackSpace) Tab XuFng hng DRu enter Nhy kp Nhy 3!n SF ng ac [sy trang K tM unicode

27

HOng chuti: l t<p hap cc k tM 3 ac 3Ht gi;a hai dRu nhy kp . MDt hOng chuti khng c k tM no l mDt hOng chuti rtng. o V dL: Hello Wolrd o L u : HOng chuti khng phSi l mDt ki@u d; li8u c! s1 nh ng vgn 3 ac khai bo v s? dLng trong cc ch !ng trnh.

2.4.L>nh, khLi l>nh trong java GiFng nh trong ngn ng; C, cc cu l8nh trong java kNt thc bOng mDt dRu chRm phsy (;). MDt khFi l8nh l 3oPn ch !ng trnh gQm hai l8nh tr1 ln v 3 ac bet 34u bOng dRu m1 ngoHc nh\n ({) v kNt thc bOng dRu 3ng ngoHc nh\c (}). Bn trong mDt khFi l8nh c th@ chKa mDt hay nhi:u l8nh hoHc chKa cc khFi l8nh khc. { // khFi 1 { // khFi 2 l8nh 2.1 l8nh 2.2 } // kNt thc khFi l8nh 2 l8nh 1.1 l8nh 1.2 } // kNt thc khFi l8nh 1 { // bet 34u khFi l8nh 3 // Cc l8nh thuDc khFi l8nh 3 // } // kNt thc thFi l8nh 3

28

2.5.Ton tE v biFu thWc 2.5.1.Ton tE sL hec Ton t? + * / % ++ - ngh_a CDng Trb Nhn Chia nguyn Chia d Tjng 1 GiSm 1

2.5.2.Ton tE trn bit Ton t? & | ^ << >> >>> ~ ngh_a AND OR XOR D=ch tri D=ch phSi D=ch phSi v 3i:n 0 vo bit trFng B bit

2.5.3.Ton tE quan h> & logic Ton t? == != > < >= <= ngh_a So snh bOng So snh khc So snh l7n h!n So snh nhp h!n So snh l7n h!n hay bOng So snh nhp h!n hay bOng 29

|| && !

OR (bi@u thKc logic) AND (bi@u thKc logic) NOT (bi@u thKc logic)

2.5.4.Ton tE p kiFu p ki@u rDng (widening conversion): tb ki@u nhp sang ki@u l7n (khng mRt mt thng tin) p ki@u hxp (narrow conversion): tb ki@u l7n sang ki@u nhp (c khS njng mRt mt thng tin) <tn biNn> = (ki@u_d;_li8u) <tn_biNn>; V d : float fNum = 2.2; int iCount = (int) fNum; // (iCount = 2)

2.5.5.Ton tE 9i@u ki>n C php: <3i:u ki8n> ? <bi@u thKc 1> : < bi@u thKc 2> NNu 3i:u ki8n 3ng th c gi tr=, hay thMc hi8n <bi@u thKc 1>, cn ng ac lPi l <bi@u thKc 2>. <3i:u ki8n>: l mDt bi@u thKc logic <bi@u thKc 1>, <bi@u thKc 2>: c th@ l hai gi tr=, hai bi@u thKc hoHc hai hnh 3Dng. V d : int x = 10; int y = 20; int Z = (x<y) ? 30 : 40; // K t qu4 z = 30 do bi6u th8c (x < y) l 0ng. 2.5.6.ThW tY )u tin ThK tM u tin tnh tb tri qua phSi v tb trn xuFng d 7i Cao nhRt 30

() ++ * + >> > == & ^ | && || ?: = ThRp nhRt

[] -/ >>> (d9ch ph4i v


0i;n 0 vo bit tr<ng)

. ~ % << <

>= !=

<=

<tont?>=

2.6.C\u trc 9i@u khiFn 2.6.1.C\u trc 9i@u ki>n if else DVng 1: if (<3i:u_ki8n>) { <khFi_l8nh>; } DVng 2: if (<3i:u_ki8n>) { <khFi _l8nh1>; } else { <khFi _l8nh2>; 31

} 2.6.2.C\u trc switch case switch (<biNn>) { case <gitr=_1>: <khFi_l8nh_1>; break; . case <gitr=_n>: <khFi_l8nh_n>; break; default: <khFi l8nh default>; } 2.6.3.C\u trc lNp DVng 1: while() while (3i:u_ki8n_lHp) { khFi _l8nh; } DVng 2: do { } while; do { khFi_l8nh; } while (3i:u_ki8n); DVng 3: for () for (kh1i_tPo_biNn_3Nm;3k_lHp;tjng_biNn) { <khFi _l8nh>; 32

} 2.6.4.C\u trc l>nh nhQy (jump) L>nh break: trong cRu trc switch chng ta dng cu l8nh break 3@ thot thpi cRu trc switch trong cng chKa n. T !ng tM nh v<y, trong cRu trc lHp, cu l8nh break dng 3@ that khpi cRu trc lHp trong cng chKa n. L>nh continue: dng 3@ tiNp tLc vng lHp trong cng chKa n (ng ac v7i break). Nhn (label): Khng giFng nh C/C++, Java khng ht tra l8nh goto 3@ nhSy 3Nn 1 v= tr no 3 cBa ch !ng trnh. Java dng kZt hRp nhn (label) v=i tf kha break v continue 3@ thay thN cho l8nh goto. V d : label: for () { for () { if (<bi6u th8c 0i;u ki3n>) break label; else continue label; } } L8nh label: xc 3=nh v= tr cBa nhn v xem nh tn cBa vng lHp ngoi. NNu <bi6u th8c 0i;u ki3n> 3ng th l8nh break label so thMc hi8n vi8c nhSy ra khpi vng lHp c nhn l label, ng ac lPi so tiNp tLc vng lHp c nhn label (khc v7i break v continue thng th lng chu thot khpi hay tiNp tLc vng lHp trong cng chKa n.). 2.7.L=p bao kiFu dA li>u c* s7 (Wrapper Class) Data type Wrapper Class 33 Ghi ch

boolean byte short char int long Float double

(java.lang.*) Boolean Byte Short Character Integer Long Float Double

- Gi (package): chKa nhm nhi:u class. - Ngoi cc Wrapper Class, gi java.lang cn cung cRp cc l7p n:n tSng cho vi8c thiNt kN ngn ng; java nh : String, Math,

2.8.KiFu dA li>u mQng Nh chng ta 3 biNt Java c 2 ki@u d; li8u - Ki@u d; li8u c! s1 (Primitive data type) - Ki@u d; li8u tham chiNu hay dgn xuRt (reference data type): th lng c 3 ki@u: o Ki@u mSng o Ki@u l7p o Ki@u giao tiNp(interface). i 3y chng ta so tm hi@u mDt sF vRn 3: c! bSn lin quan 3:n ki@u mSng. Ki@u l7p(class) v giao tiNp(interface) chng ta so tm hi@u chi tiNt trong ch !ng 3 v cc ch !ng sau. 2.8.1.Khi ni>m mQng MSng l t<p hap nhi:u ph4n t? c cng tn, cng ki@u d; li8u v mti ph4n t? trong mSng 3 ac truy xuRt thng qua chu sF cBa n trong mSng. 2.8.2.Khai bo mQng hoHc V d : hoHc int int[] arrInt[]; arrInt; 34 <ki@u d; li8u> <ki@u d; li8u>[] <tn mSng>[]; <tn mSng>;

int[]

arrInt1, arrInt2, arrInt3;

2.8.3.C\p pht bJ nh= cho mQng - Khng giFng nh trong C, C++ kch th 7c cBa mSng 3 ac xc 3=nh khi khai bo. Chvng hPn nh : int arrInt[100]; // Khai bo ny trong Java s= b9 bo l?i. - [@ cRp pht bD nh7 cho mSng trong Java ta c4n dng tb kha new. (TRt cS trong Java 3:u thng qua cc 3Fi t ang). Chvng hPn 3@ cRp pht vng nh7 cho mSng trong Java ta lm nh sau: int arrInt = new int[100]; 2.8.4.Kh7i tVo mQng Chng ta c th@ kh1i tPo gi tr= ban 34u cho cc ph4n t? cBa mSng khi n 3 ac khai bo. V d : int arrInt[] = {1, 2, 3}; char arrChar[] = {a, b, c}; String arrStrng[] = {ABC, EFG, GHI}; 2.8.5.Truy cBp mQng Chu sF mSng trong Java bet 34u t 0. V v<y ph4n t? 34u tin c chu sF l 0, v ph4n t? thK n c chu sF l n-1. Cc ph4n t? cBa mSng 3 ac truy xuRt thng qua chu sF cBa n 3Ht gi;a cHp dRu ngoHc vung ([]). V d : int arrInt[] = {1, 2, 3}; int x = arrInt[0]; // x s= c gi tr9 l 1. int y = arrInt[1]; // y s= c gi tr9 l 2. int z = arrInt[2]; // z s= c gi tr9 l 3. L)u : Trong nh ng ngn ng; l<p trnh khc (C chvng hPn), mDt chuti 3 ac xem nh mDt mSng cc k tM. Trong java th 35

khc, java cung cRp mDt l7p String 3@ lm vi8c v7i 3Fi t ang d; li8u chuti cng khc thao tc trn 3Fi t ang d; li8u ny. 2.9.MJt sL v dX minh hea: V d 1: Nh<p k tM tb bn phm import java.io.*; /* gi ny cung c/p th) vi3n xu/t nh1p h3 th<ng thng qua nhAng lu.ng dA //li3u v h3 th<ng file.*/ class InputChar { public static void main(String args[]) { char ch = ; try { ch = (char) System.in.read(); } catch(Exception e) { System.out.println(Nh1p l?i!); } System.out.println(Ky tu vua nhap: + ch); } } V d 2: Nh<p d; li8u sF import java.io.*; class inputNum { public static void main(String[] args) { int n=0; try { BufferedReader in = new BufferedReader( 36

new InputStreamReader( System.in)); String s; s = in.readLine(); n = Integer.parseInt(s); } catch(Exception e) { System.out.println(Nh1p dA li3u b9 l?i !); } System.out.println(B&n vBa nh1p s<: + n); } } V d 3: Nh<p v xuRt gi tr= cc ph4n t? cBa mDt mSng cc sF nguyn. class ArrayDemo { public static void main(String args[]) { int arrInt[] = new int[10]; int i; for(i = 0; i < 10; i = i+1) arrInt[i] = i; for(i = 0; i < 10; i = i+1) System.out.println("This is arrInt[" + i + "]: " + arrInt[i]); } }

37

V d 4: Tm ph4n t? c gi tr= nhp nhRt (Min) v l7n nhRt (Max) trong mDt mSng. class MinMax { public static void main(String args[]) { int nums[] = new int[10]; int min, max; nums[0] = 99; nums[1] = -10; nums[2] = 100123; nums[3] = 18; nums[4] = -978; nums[5] = 5623; nums[6] = 463; nums[7] = -9; nums[8] = 287; nums[9] = 49; min = max = nums[0]; for(int i=1; i < 10; i++) { if(nums[i] < min) min = nums[i]; if(nums[i] > max) max = nums[i]; } System.out.println("min and max: " + min + " " + max); } } class MinMax2 38

{ public static void main(String args[]) { int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 }; int min, max; min = max = nums[0]; for(int i=1; i < 10; i++) { if(nums[i] < min) min = nums[i]; if(nums[i] > max) max = nums[i]; } System.out.println("Min and max: " + min + " " + max); } }

V d 5: ch !ng trnh minh h\a mDt lti tham chiNu 3Nn ph4n t? bn ngoi (vuat qu) kch th 7c mSng. class ArrayErr { public static void main(String args[]) { int sample[] = new int[10]; int i; for(i = 0; i < 100; i = i+1) sample[i] = i; } }

39

V d 6: Sep xNp mSng dng ph !ng php sep xNp nJi b\t (Bubble Sort) class BubbleSort { public static void main(String args[]) { int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 }; int a, b, t; int size; size = 10; // number of elements to sort // display original array System.out.print("Original array is:"); for(int i=0; i < size; i++) System.out.print(" " + nums[i]); System.out.println(); // This is the Bubble sort. for(a=1; a < size; a++) for(b=size-1; b >= a; b--) { if(nums[b-1] > nums[b]) { // if out of order // exchange elements t = nums[b-1]; nums[b-1] = nums[b]; nums[b] = t; } } // display sorted array 40

System.out.print("Sorted array is:"); for(int i=0; i < size; i++) System.out.print(" " + nums[i]); System.out.println(); } }

V d 7: Nh<p v xuRt gi tr= cBa cc ph4n t? trong mDt mSng hai chi:u. class TwoD_Arr { public static void main(String args[]) { int t, i; int table[][] = new int[3][4]; for(t=0; t < 3; ++t) { for(i=0; i < 4; ++i) { table[t][i] = (t*4)+i+1; System.out.print(table[t][i] + " "); } System.out.println(); } } }

41

V d 8: TPo 3Fi t ang chuti class StringDemo { public static void main(String args[]) { // Tao chuoi bang nhieu cach khac nhau String str1 = new String("Chuoi trong java la nhung Objects."); String str2 = "Chung duoc xay dung bang nhieu cach khac nhau."; String str3 = new String(str2); System.out.println(str1); System.out.println(str2); System.out.println(str3); } }

V d 9: Minh h\a mDt sF thao tc c! bSn trn chuti // Chuong trinh minh hoa cac thao tac tren chuoi ky tu class StrOps { public static void main(String args[]) { String str1 = "Java la chon lua so mot cho lap trinh ung dung Web."; String str2 = new String(str1); String str3 = "Java ho tro doi tuong String de xu ly chuoi"; 42

int result, idx; char ch; System.out.println("str1:" + str1); System.out.println("str2:" + str2); System.out.println("str3:" + str3); System.out.println("Chieu dai cua chuoi str1 la: " + str1.length()); // Hien thi chuoi str1, moi lan mot ky tu. System.out.println(); for(int i=0; i < str1.length(); i++) System.out.print(str1.charAt(i)); System.out.println(); if(str1.equals(str2)) System.out.println("str1 == str2"); else System.out.println("str1 != str2"); if(str1.equals(str3)) System.out.println("str1 == str3"); else System.out.println("str1 != str3"); result = str1.compareTo(str3); if(result == 0) System.out.println("str1 = str3 "); else if(result < 0) System.out.println("str1 < str3"); else System.out.println("str1 > str3"); 43

// Tao chuoi moi cho str4 String str4 = "Mot Hai Ba Mot"; idx = str4.indexOf("Mot"); System.out.println("str4:" + str4); System.out.println("Vi tri xuat hien dau tien cua chuoi con 'Mot' trong str4: " + idx); idx = str4.lastIndexOf("Mot"); System.out.println("Vi tri xuat hien sau cung cua chuoi con 'Mot' trong str4:" + idx); } }

V d 10: ch !ng trnh nh<p vo mDt chuti v in ra chuti ngh=ch 3So cBa chuti nh<p. import java.lang.String; import java.io.*; public class InverstString { public static void main(String arg[]) { System.out.println("\n *** CHUONG TRINH IN CHUOI NGUOC *** "); try 44

System.out.println("\n *** Nhap chuoi:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // Class BufferedReader cho php 0,c text tB lu.ng nh1p k t), t&o b2 03m cho nhAng k t) 06 h? trD cho vi3c 0,c nhAng k t), nhAng m4ng hay nhAng dng. // Doc 1 dong tu BufferReadered ket thuc bang dau ket thuc dong. String str = in.readLine(); System.out.println("\n Chuoi vua nhap la:" + str); // Xuat chuoi nghich dao System.out.println("\n Chuoi nghich dao la:"); for (int i=str.length()-1; i>=0; i--) { System.out.print(str.charAt(i)); }

} catch (IOException e) { System.out.println(e.toString()); } } } V d 11: LRy chuti con cBa mDt chuti class SubStr { public static void main(String args[]) { 45

String orgstr = "Mot Hai Ba Bon"; // Lay chuoi con dung ham // public String substring(int beginIndex, int // endIndex) String substr = orgstr.substring(4, 7); System.out.println("Chuoi goc: " + orgstr); System.out.println("Chuoi con: " + substr); } }

V d 12: MSng cc chuti class StringArray { public static void main(String args[]) { String str[] = {"Mot", "Hai", "Ba", "Bon" }; System.out.print("Mang goc: "); for(int i=0; i < str.length; i++) System.out.print(str[i] + " "); System.out.println("\n"); // Thay doi chuoi str[0] = "Bon"; str[1] = "Ba"; str[2] = "Hai"; str[3] = "Mot"; System.out.print("Mang thay doi:"); for(int i=0; i < str.length; i++) System.out.print(str[i] + " "); 46

System.out.print("\n"); } }

Ch)*ng 3: H4+NG &gI T4hNG TRONG JAVA


3.1.M7 9:u Thng qua chuyn 3: l<p trnh h 7ng 3Fi t ang (OOP) chng ta 3 biNt OOP l mDt trong nh;ng tiNp c<n mPnh mo, v 47

rRt hi8u quS 3@ xy dMng nn nh;ng ch !ng trnh Kng dLng trn my tnh. Tb khi ra 3li cho 3Nn nay l<p trnh OOP 3 chKng tp 3 ac sKc mPnh, vai tr cBa n trong cc 3: n tin h\c. Ch h !ng ny so gip bPn 3\c tm hi@u v: cc ki@u d; li8u dgn xuRt 3 l l7p (class) v giao tiNp (interface), cmng nh cc vRn 3: c! bSn v: l<p trnh h 7ng 3Fi t ang trong java thng qua vi8c tPo l<p cc l7p, cc 3Fi t ang v cc tnh chRt cBa chng. 3.2.L=p (Class) 3.2.1.Khi ni>m Chng ta c th@ xem l7p nh mDt khun mgu (template) cBa 3Fi t ang (Object). Trong 3 bao gQm d; li8u cBa 3Fi t ang (fields hay properties) v cc ph !ng thKc(methods) tc 3Dng ln thnh ph4n d; li8u 3 g\i l cc ph !ng thKc cBa l7p. Cc 3Fi t ang 3 ac xy dMng b1i cc l7p nn 3 ac g\i l cc th@ hi8n cBa l7p (class instance). 3.2.2.Khai bo/9Cnh nghia l=p class <ClassName> { <ki6u dA li3u> <field_1>; <ki6u dA li3u> <field_2>; constructor method_1 method_2 } class: l tb kha cBa java ClassName: l tn chng ta 3Ht cho l7p field_1, field_2: cc thuDc tnh, cc biNn, hay cc thnh ph4n d; li8u cBa l7p. constructor: l sM xy dMng, kh1i tPo 3Fi t ang l7p. method_1, method_2: l cc ph !ng thKc/hm th@ hi8n cc thao tc x? l, tc 3Dng ln cc thnh ph4n d; li8u cBa l7p. 48

3.2.3.TVo 9Li t)Rng cHa l=p ClassName objectName = new ClassName(); 3.2.4.ThuJc tnh cHa l=p Vng d; li8u (fields) hay thuDc tnh (properties) cBa l7p 3 ac khai bo bn trong l7p nh sau: class <ClassName> { // khai bo nhAng thu2c tnh cEa l*p <ti;n t<> <ki6u dA li3u> field1; // } [@ xc 3=nh quy:n truy xuRt cBa cc 3Fi t ang khc 3Fi v7i vng d; li8u cBa l7p ng li ta th lng dng 3 ti:n tF sau: public: c th@ truy xuRt tb tRt cS cc 3Fi t ang khc private: mDt l7p khng th@ truy xuRt vng private cBa 1 l7p khc. protected: vng protected cBa 1 l7p chu cho php bSn thn l7p 3 v nh;ng l7p dgn xuRt tb l7p 3 truy c<p 3Nn. V dX: public class xemay { public public private protected

String String float int

nhasx; model; chiphisx; thoigiansx;

// so luong so cua xe may: 3, 4 so protected int so; // sobanhxe l bi n tGnh c gi tr9 l 2 trong t/t c4 // cc th6 hi3n t&o ra tB l*p xemay 49

public static }

int

sobanhxe = 2;

ThuDc tnh nhasx, modelc th@ 3 ac truy c<p 3Nn tb tRt cS cc 3Fi t ang khc. ThuDc tnh chiphisx chu c th@ truy c<p 3 ac tb cc 3Fi t ang c ki@u xemay ThuDc tnh thoigiansx, so c th@ truy c<p 3 ac tb cc 3Fi t ang c ki@u xemay v cc 3Fi t ang cBa cc l7p con dgn xuRt tb l7p xemay L)u : Thng th lng 3@ an ton cho vng d; li8u cBa cc 3Fi t ang ng li ta trnh dng ti:n tF public, m th lng ch\n ti:n tF private 3@ ngjn cSn quy:n truy c<p 3Nn vng d; li8u cBa mDt l7p tb cc ph !ng thKc bn ngoi l7p 3. 3.2.5.Hm - Ph)*ng thWc l=p (Method) Hm hay ph !ng thKc (method) trong Java l khFi l8nh thMc hi8n cc chKc njng, cc hnh vi x? l cBa l7p ln vng d; li8u. Khai bo ph)*ng thWc: <Ti;n t<> <ki6u tr4 v;> <Tn ph$%ng th8c> (<danh sch 0<i s<>) { <kh<i l3nh>; } [@ xc 3=nh quy:n truy xuRt cBa cc 3Fi t ang khc 3Fi v7i cc ph !ng thKc cBa l7p ng li ta th lng dng cc ti:n tF sau: public: ph !ng thKc c th@ truy c<p 3 ac tb bn ngoi l7p khai bo. protected: c th@ truy c<p 3 ac tb l7p khai bo v nh;ng l7p dgn xuRt tb n. private: chu 3 ac truy c<p bn trong bSn thn l7p khai bo. 50

static: ph !ng thKc l7p dng chung cho tRt cS cc th@ hi8n cBa l7p, c ngh_a l ph !ng thKc 3 c th@ 3 ac thMc hi8n k@ cS khi khng c 3Fi t ang cBa l7p chKa ph !ng thKc 3. final: ph !ng thKc c ti:n tF ny khng 3 ac khai bo chQng 7 cc l7p dgn xuRt. abstract: ph !ng thKc khng c4n ci 3Ht (khng c ph4n source code), so 3 ac hi8n thMc trong cc l7p dgn xuRt tb l7p ny. synchoronized: dng 3@ ngjn cc tc 3Dng cBa cc 3Fi t ang khc ln 3Fi t ang 3ang xt trong khi 3ang 3Qng bD ha. Dng trong l<p trnh miltithreads. <ki6u tr4 v;>: c th@ l ki@u void, ki@u c! s1 hay mDt l7p. <Tn ph$%ng th8c>: 3Ht theo qui 7c giFng tn biNn. <danh sch thng s<>: c th@ rtng L)u : Thng th lng trong mDt l7p cc ph !ng thKc nn 3 ac khai bo dng tb kha public, khc v7i vng d; li8u th lng l dng ti:n tF private v mLc 3ch an ton. Nh;ng biNn nOm trong mDt ph !ng thKc cBa l7p l cc biNn cLc bD (local) v nn 3 ac kh1ia tPo sau khi khai bo. V dX: public class xemay { public public private protected

String String float int

nhasx; model; chiphisx; thoigiansx;

// so luong so cua xe may: 3, 4 so protected int so;

51

// l bi n tGnh c gi tr9 l 2 trong t/t c4 // cc th6 hi3n t&o ra tB l*p xemay public static int sobanhxe = 2; public float tinhgiaban() { return 1.5 * chiphisx; } } 3.2.6.Kh7i tVo mJt 9Li t)Rng (Constructor) Contructor th<t ra l mDt loPi ph !ng thKc 3Hc bi8t cBa l7p. Constructor dng g\i tM 3Dng khi kh1i tPo mDt th@ hi8n cBa l7p, c th@ dng 3@ kh1i gn nh;ng gi tr= mjc 3=nh. Cc constructor khng c gi tr= trS v:, v c th@ c tham sF hoHc khng c tham sF. Constructor phSi c cng tn v=i l=p v 3 ac g\i 3Nn dng tb kha new. NNu mDt l7p khng c constructor th java so cung cRp cho l7p mDt constructor mHc 3=nh (default constructor). Nh;ng thuDc tnh, biNn cBa l7p so 3 ac kh1i tPo b1i cc gi tr= mHc 3=nh (sF: th lng l gi tr= 0, ki@u lu<n l l gi tr= false, ki@u 3Fi t ang gi tr= null, ) L)u : thng th lng 3@ an ton, dn ki@m sot v lm chB m nguQn ch !ng trnh chng ta nn khai bo mDt constructor cho l7p. V dX: public class xemay { // public xemay() 52

{} public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so); { nhasx = s_nhasx; model = s_model; chiphisx = f_chiphisx; thoigiansx = i_thoigiansx; so = i_so; // hoIc // this.nhasx = s_nhasx; // this.model = s_model; // this.chiphisx = f_chiphisx; // this.thoigiansx = i_thoigiansx; // this.so = i_so; } } 3.2.7.BiZn this BiNn this l mDt biNn sn tQn tPi trong tRt cS cc l7p trong ngng ng; java. MDt class trong Java lun tQn tPi mDt biNn this, biNn this 3 ac s? dLng trong khi chPy v tham khSo 3Nn bSn thn l7p chKa n. V dX: <ti;n t<> class A { <ti;n t<> int <field_1>; <ti;n t<> String <field_2>; // Contructor cEa l*p A public A(int par_1, String par_2) { 53

this.field_1 = par_1; this.field_2 = par_2; } <ti;n t<> <ki6u tr4 v;> <method_1>() { // } <ti;n t<> <ki6u tr4 v;> <method_2>() { this.method_1() // } } 3.2.8.Khai bo chSng ph)*ng thWc (overloading method) Vi8c khai bo trong mDt l7p nhi:u ph !ng thKc c cng tn nh ng khc tham sF (khc ki@u d; li8u, khc sF l ang tham sF) g\i l khai bo chQng ph !ng thKc (overloading method). V dX: public class xemay { // khai bo fields public float tinhgiaban() { return 2 * chiphisx; } public float tinhgiaban(float huehong) { return (2 * chiphisx + huehong); } } 3.3.&Nc 9iFm h)=ng 9Li t)Rng trong java Ht tra nh;ng nguyn tec c! bSn cBa l<p trnh h 7ng 3Fi t ang, tRt cS cc ngn ng; l<p trnh k@ cS java 3:u c ba 3Hc 54

3i@m chung: tnh 3ng gi (encapsulation), tnh 3a hnh (polymorphism), v tnh kN thba (inheritance). 3.3.1.&ng gi (encapsulation) C! chN 3ng gi trong l<p trnh h 7ng 3Fi t ang gip cho cc 3Fi t ang dRu 3i mDt ph4n cc chi tiNt ci 3Ht, cmng nh ph4n d; li8u cLc bD cBa n, v chu cng bF ra ngoi nh;ng g c4n cng bF 3@ trao 3Ji v7i cc 3Fi t ang khc. Hay chng ta c th@ ni 3Fi t ang l mDt thnh tF ht tra tnh 3ng gi. [!n v= 3ng gi c! bSn cBa ngn ng; java l class. MDt class 3=nh ngh_a hnh thKc cBa mDt 3Fi t ang. MDt class 3=nh r nh;ng thnh ph4n d; li8u v cc 3oPn m ci 3Ht cc thao tc x? l trn cc 3Fi t ang d; li8u 3. Java dng class 3@ xy dMng nh;ng 3Fi t ang. Nh;ng 3Fi t ang l nh;ng th@ hi8n (instances) cBa mDt class. MDt l7p bao gQm thnh ph4n d; li8u v thnh ph4n x? l. Thnh ph4n d; li8u cBa mDt l7p th lng bao gQm cc biNn thnh vin v cc biNn th@ hi8n cBa l7p. Thnh ph4n x? l l cc thao tc trn cc thnh ph4n d; li8u, th lng trong java ng li g\i l ph !ng thKc. Ph !ng thKc l mDt thu<t ng; h 7ng 3Fi t ang trong java, trong C/C++ ng li ta th lng dng thu<t ng; l hm. 3.3.2.Tnh 9a hnh (polymorphism): Tnh 3a hnh cho php ci 3Ht cc l7p dgn xuRt khc nhau tb mDt l7p nguQn. MDt 3Fi t ang c th@ c nhi:u ki@u khc nhau g\i l tnh 3a hnh. V dX: class A_Object { // void method_1() { // 55

} } class B_Object extends A_Object { // void method_1() { // } } class C { public static void main(String[] args) { // T&o m2t m4ng 2 phKn tL ki6u A A_Object arr_Object = new A_Object[2]; B_Object var_1 = new B_Object(); // PhKn tL 0Ku tin cEa m4ng arr_Object[0] tham // chi u 0 n 1 0<i t$Dng ki6u B_Object dMn xu/t // tB A_Object arr_Object[0] = var_1; A_Object var_2; for (int i=0; i<2; i++) { var_2 = arr_Object[i]; var_2.method_1(); } } } Vng lHp for trong 3oPn ch !ng trnh trn:

56

V7i i = 0 th biNn var_2 c ki@u var_2.method_1() so g\i thMc method_1 cBa l7p B_Object. V7i i = 1 th biNn var_2 c ki@u var_2.method_1() so g\i thMc method_1 cBa l7p A_Object.

l B_Object, v l8nh hi8n ph !ng thKc l A_Object, v l8nh hi8n ph !ng thKc

Trong v dL trn 3Fi t ang var_2 c th@ nh<n ki@u A_Object hay B_Object. Hay ni cc khc, mDt biNn 3Fi t ang ki@u A_Object nh var_2 trong v dL trn c th@ tham chiNu 3Nn bRt kq 3Fi t ang no cBa bRt kq l7p con no cBa l7p A_Object (v dL var_2 c th@ tham chiNu 3Nn 3Fi t ang var_1, var_1 l 3Fi t ang cBa l7p B_Object dgn xuRt tb l7p A_Object). Ng ac lPi mDt biNn cBa l7p con khng th@ tham chiNu 3Nn bRt kq 3Fi t ang no cBa l7p cha. 3.3.3.Tnh kZ thfa (inheritance) MDt l7p con (subclass) c th@ kN thba tRt cS nh;ng vng d; li8u v ph !ng thKc cBa mDt l7p khc (siu l7p - superclass). Nh v<y vi8c tPo mDt l7p m7i tb mDt l7p 3 biNt sao cho cc thnh ph4n (fields v methods) cBa l7p cm cmng so thnh cc thnh ph4n (fields v methods) cBa l7p m7i. Khi 3 ta g\i l7p m7i l l7p dgn xuRt (derived class) tb l7p cm (superclass). C th@ l7p cm cmng l l7p 3 ac dgn xuRt tb mDt l7p no 3Ry, nh ng 3Fi v7i l7p m7i vba tPo th l7p cm 3 l mDt l7p siu l7p trMc tiNp (immediate supperclass). Dng tb kha extends 3@ chu l7p dgn xuRt. class A extends B { // } 3.3.3.1 Khi bo ph)*ng thWc chSng 57

Tnh kN thba gip cho cc l7p con nh<n 3 ac cc thuDc tnh/ph !ng thKc public v protected cBa l7p cha. [Qng thli cmng c th@ thay thN cc ph !ng thKc cBa l7p cha bOng cch khai bo chQng. Chvng hPn ph !ng thKc tinhgiaban() p dLng trong l7p xega so cho kNt quS gRp 2.5 l4n chi ph sSn xuRt thay v gRp 2 chi ph sSn xuRt giFng nh trong l7p xemay. V dX: public class xega extends xemay { public xega() { } public xega(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx); { this.nhasx = s_nhasx; this.model = s_model; this.chiphisx = f_chiphisx; this.thoigiansx = i_thoigiansx; this.so = 0; } public float tinhgiaban() { return 2.5 * chiphisx; } } Java cung cRp 3 ti:n tF/tb kha 3@ ht tra tnh kN thba cBa l7p: public: l7p c th@ truy c<p tb cc gi, ch !ng trnh khc. final: L7p hOng, l7p khng th@ tPo dgn xuRt (khng th@ c con), hay 3i khi ng li ta g\i l l7p v sinh.

58

abstract: L7p trbu t ang (khng c khai bo cc thnh ph4n v cc ph !ng thKc trong l7p trbu t ang). L7p dgn xuRt so khai bo, ci 3Ht cL th@ cc thuDc tnh, ph !ng thKc cBa l7p trbu t ang.

3.3.3.2 L=p nJi L7p nDi l l7p 3 ac khai bo bn trong 1 l7p khc. L7p nDi th@ hi8n tnh 3ng gi cao v c th@ truy xuRt trMc tiNp biNn cBa l7p cha. V dX: public class A { // int <field_1> static class B { // int <field_2> public B(int par_1) { field_2 = par_1 + field_1; } } } Trong v dL trn th ch !ng trnh d=ch so tPo ra hai l7p v7i hai files khc nhau: A.class v B.class 3.3.3.3 L=p v sinh L7p khng th@ c l7p dgn xuRt tb n (khng c l7p con) g\i l l7p v sinh, hay ni cch khc khng th@ kN thba 3 ac tb mDt l7p v sinh. L7p v sinh dng 3@ hPn chN, ngjn ngba cc l7p khc dgn xuRt tb n.

59

[@ khai bo mDt l7p l l7p v sinh, chng ta dng tb kha final class. TRt cS cc ph !ng thKc cBa l7p v sinh 3:u v sinh, nh ng cc thuDc tnh cBa l7p v sinh th c th@ khng v sinh. V dX: public final class A { public final int x; private int y; public final void method_1() { // } public final void method_2() { // } } 3.3.3.4 L=p trfu t)Rng L7p trbu t ang l l7p khng c khai bo cc thuDc tnh thnh ph4n v cc ph !ng thKc. Cc l7p dgn xuRt cBa n so khai bo thuDc tnh, ci 3Ht cL th@ cc ph !ng thKc cBa l7p trbu t ang. V dX: abstract class A { abstract void method_1(); 60

} public class B extends A { public void method_1() { // ci 0It chi ti t cho ph$%ng th8c method_1 // trong l*p con B. // } } public class C extends A { public void method_1() { // ci 0It chi ti t cho ph$%ng th8c method_1 // trong l*p con C. // } } L)u : Cc ph !ng thKc 3 ac khai bo dng cc ti:n tF private v static th khng 3 ac khai bo l trbu t ang abstract. Ti:n tF private th khng th@ truy xuRt tb cc l7p dgn xuRt, cn ti:n tF static th chu dng ring cho l7p khai bo m thi. 3.3.3.5 Ph)*ng thWc finalize() Trong java khng c ki@u d; li8u con trp nh trong C, ng li l<p trnh khng c4n phSi qu b<n tm v: vi8c cRp pht v giSi phng vng nh7, so c mDt trnh d\n dxp h8 thFng 3Sm trch vi8c ny. Trnh d\n dxp h8 thFng so d\n dxp vng nh7 cRp pht cho cc 3Fi t ang tr 7c khi hBy mDt 3Fi t ang. Ph !ng thKc finalize() l mDt ph !ng thKc 3Hc bi8t 3 ac ci 3Ht syn cho cc l7p. Trnh d\n dxp h8 thFng so g\i ph !ng thKc ny tr 7c khi hBy mDt 3Fi t ang. V v<y vi8c ci 3Ht mDt sF 61

thao tc giSi phng, d\n dxp vng nh7 3 cRp pht cho cc 3Fi t ang d; li8u trong ph !ng thKc finalize() so gip cho ng li l<p trnh chB 3Dng ki@m sot tFt qu trnh hBy 3Fi t ang thay v= giao cho trnh d\n dxp h8 thFng tM 3Dng. [Qng thli vi8c ci 3Ht trong ph !ng thKc finalize() so gip cho bD nh7 3 ac giSi phng tFt h!n, gp ph4n cSi tiNn tFc 3D ch !ng trnh. V dX: class A { // Khai bo cc thu2c tnh public void method_1() { // } protected void finalize() { // C th6 dng 06 0ng t/t c4 cc k t n<i // vo c% sN dA li3u tr$*c khi hEy 0<i t$Dng. // } } 3.4.Gi (packages) Vi8c 3ng gi cc l7p lPi tPo thnh mDt th vi8n dng chung g\i l package. MDt package c th@ chKa mDt hay nhi:u l7p bn trong, 3Qng thli cmng c th@ chKa mDt package khc bn trong.

62

[@ khai bo mDt l7p thuDc mDt gi no 3Ry ta phSi dng tb kha package. Dng khai bo gi phSi l dng 34u tin trong t<p tin khai bo l7p. Cc t<p tin khai bo l7p trong cng mDt gi phSi 3 ac l u trong cng mDt th mLc. L)u : Vi8c khai bo import tRt cS cc l7p trong gi so lm tFn bD nh7. Thng th lng chng ta chu nn import nh;ng l7p c4n dng trong ch !ng trnh. V dX: package phuongtiengiaothong; class xemay { // . } class xega extends xemay { // } Khi 3 muFn s? dLng l7p xemay vo ch !ng trnh ta so khai bo nh sau: import phuongtiengiaothong.xemay; 3.5.Giao di>n (interface) 3.5.1.Khi ni>m interface: Nh chng ta 3 biNt mDt l7p trong java chu c mDt siu l7p trMc tiNp hay mDt cha duy nhRt (3!n thba kN). [@ trnh 3i tnh phKc tPp cBa 3a thba kN (multi-inheritance) trong l<p trnh h 7ng 3Fi t ang, Java thay thN bOng giao tiNp (interface). MDt l7p c th@ c nhi:u giao tiNp (interface) v7i cc l7p khc 3@

63

thba h 1ng thm vng d; li8u v ph !ng thKc cBa cc giao tiNp ny. 3.5.2.Khai bo interface: Interface 3 ac khai bo nh mDt l7p. Nh ng cc thuDc tnh cBa interface l cc hOng (khai bo dng tb kha final) v cc ph !ng thKc cBa giao tiNp l trbu t ang (mHc d khng c tb kha abstract). Trong cc l7p c ci 3Ht cc interface ta phSi tiNn hnh ci 3Ht cL th@ cc ph !ng thKc ny. V dX: public interface sanpham { static final String nhasx = Honda VN; static final String dienthoai = 08-8123456; public int gia(String s_model); } // khai bo 1 l*p c ci 0It interface public class xemay implements sanpham { // ci 0It l&i ph$%ng th8c cEa giao di3n trong l*p public int gia(String s_model) { if (s_model.equals(2005)) return (2000); else return (1500); } public String chobietnhasx() { return (nhasx); } } 64

C mDt vRn 3: khc v7i l7p l mDt giao di8n (interface) khng chu c mDt giao di8n cha trMc tiNp m c th@ dgn xuRt cng lc nhi:u giao di8n khc (hay c nhi:u giao di8n cha). Khi 3 n so kN thba tRt cS cc gi tr= hOng v cc ph !ng thKc cBa cc giao di8n cha. Cc giao di8n cha 3 ac li8t k thnh chuti v cch nhau b1i dRu phsy ,. Khai bo nh sau: public interface InterfaceName extends interface1, interface2, interface3 { // } 3.5.3.V dX minh hea V dX 1: Minh h\a tnh 3a hnh (polymorphism) trong phn cRp kN thba thng qua vi8c m tS v x? l mDt sF thao tc c! bSn trn cc 3Fi t ang hnh h\c. // O9nh nghGa l*p trBu t$Dng c% sN tn Shape trong // t1p tin Shape.java public abstract class Shape extends Object { // tr4 v; di3n tch cEa m2t 0<i t$Dng hnh h,c shape public double area() { return 0.0; } // tr4 v; th6 tch cEa m2t 0<i t$Dng hnh h,c shape public double volume() { return 0.0; } 65

// Ph$%ng th8c trBu t$Dng cKn ph4i 0$Dc hi3n th)c // trong nhAng l*p con 06 tr4 v; tn 0<i t$Dng // hnh h,c shape thch hDp public abstract String getName(); } // end class Shape // O9nh nghGa l*p Point trong t1p tin Point.java public class Point extends Shape { protected int x, y; // T,a 02 x, y cEa 1 0i6m // constructor khng tham s<. public Point() { setPoint( 0, 0 ); } // constructor c tham s<. public Point(int xCoordinate, int yCoordinate) { setPoint( xCoordinate, yCoordinate ); } // gn t,a 02 x, y cho 1 0i6m public void setPoint( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } // l/y t,a 02 x cEa 1 0i6m public int getX() { return x; } 66

// l/y t,a 02 y cEa 1 0i6m public int getY() { return y; } // Th6 hi3n t,a 02 cEa 1 0i6m d$*i d&ng chu?i public String toString() { return "[" + x + ", " + y + "]"; } // tr4 v; tn cEa 0<i t$Dng shape public String getName() { return "Point"; } } // end class Point [=nh ngh_a mDt l7p cha Shape l mDt l7p trbu t ang dgn xuRt tb Object v c 3 ph !ng thKc khai bo dng ti:n tF public. Ph !ng thKc getName() khai bo trbu t ang v v<y n phSi 3 ac hi8n thMc trong cc l7p con. Ph !ng thKc area() (tnh di8n tch) v ph !ng thKc volume() (tnh th@ tch) 3 ac 3=nh ngh_a v trS v: 0.0. Nh;ng ph !ng thKc ny so 3 ac khai bo chQng trong cc l7p con 3@ thMc hi8n chKc njng tnh di8n tch cmng nh th@ tch ph hap v7i nh;ng 3Fi t ang hnh h\c t !ng Kng (3 lng trn, hnh trL, ) L7p Point: dgn xuRt tb l7p Shape. MDt 3i@m th c di8n tch v th@ tch l 0.0, v v<y nh;ng ph !ng thKc area() v volume() cBa l7p cha khng c4n khai bo chQng trong l7p Point, chng 3 ac thba kN nh 3 3=nh ngh_a trong l7p trbu t ang Shape. Nh;ng ph !ng thKc khc nh setPoint() 3@ 67

gn t\a 3D x, y cho mDt 3i@m, cn ph !ng thKc getX(), getY() trS v: t\a 3D x, y cBa mDt 3i@m. Ph !ng thKc getName() l hi8n thMc cho ph !ng thKc trbu t ang trong l7p cha, nNu nh ph !ng thKc getName() m khng 3 ac 3=nh ngh_a th l7p Point l mDt l7p trbu t ang. // O9nh nghGa l*p Circle trong t1p tin Circle.java public class Circle extends Point { // DMn xu/t tB l*pPoint protected double radius; // constructor khng tham s< public Circle() { // ngKm g,i 0 n constructor cEa l*p cha setRadius( 0 ); } // constructor c tham s< public Circle( double circleRadius, int xCoordinate, int yCoordinate ) { // g,i constructorcEa l*p cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } // Gn bn knh cEa 0$Qng trn public void setRadius( double circleRadius ) { radius = ( circleRadius >= 0 ? circleRadius:0 ); } // L/y bn knh cEa 0$Qng trn 68

public double getRadius() { return radius; } // Tnh di3n tch 0$Qng trn Circle public double area() { return Math.PI * radius * radius; } // Bi6u diRn 0$Qng trn bSng m2t chu?i public String toString() { return "Center = " + super.toString() + "; Radius = " + radius; } // tr4 v; tn cEa shape public String getName() { return "Circle"; } } // end class Circle L7p Circle dgn xuRt tb l7p Point, mDt 3 lng trn c th@ tch l 0.0, v v<y ph !ng thKc volume() cBa l7p cha khng khai bo chQng, n so thba kN tb l7p Point, m l7p Point th thba kN tb l7p Shape. Di8n tch 3 lng trn khc v7i mDt 3i@m, v v<y ph !ng thKc tnh di8n tch area() 3 ac khai bo chQng. Ph !ng thKc getName() hi8n thMc ph !ng thKc trbu t ang 3 khai bo trong l7p cha, nNu ph !ng thKc getName() khng khai bo trong l7p Circle th n so kN thba tb l7p Point. Ph !ng thKc setRadius dng 3@ gn mDt bn knh (radius) m7i cho mDt

69

3Fi t ang 3 lng trn, cn ph !ng thKc getRadius trS v: bn knh cBa mDt 3Fi t ang 3 lng trn. // O9nh nghGa l*p hnh trT Cylinder // trong t1p tin Cylinder.java. public class Cylinder extends Circle { // chi;u cao cEa Cylinder protected double height; // constructor khng c tham s< public Cylinder() { // ngKm g,i 0 n constructor cEa l*p cha setHeight( 0 ); } // constructor c tham s< public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate, int yCoordinate ) { // G,i constructor cEa l*p cha super( cylinderRadius, xCoordinate, yCoordinate ); setHeight( cylinderHeight ); } // Gn chi;u cao cho Cylinder public void setHeight( double cylinderHeight ) { height = ( cylinderHeight >= 0 ? cylinderHeight :0 ); } 70

// L/y chi;u cao cEa Cylinder public double getHeight() { return height; } // Tnh di3n tch xung quanh cEa Cylinder public double area() { return 2 * super.area() + 2 * Math.PI * radius * height; } // Tnh th6 tch cEa Cylinder public double volume() { return super.area() * height; } // Bi6u diRn Cylinder bSng m2t chu?i public String toString() { return super.toString() + "; Height = " + height; } // tr4 v; tn cEa shape public String getName() { return "Cylinder"; } } // end class Cylinder

71

L7p Cylinder dgn xuRt tb l7p Circle. MDt Cylinder (hnh trL) c di8n tch v th@ tch khc v7i mDt Circle (hnh trn), v v<y cS hai ph !ng thKc area() v volume() c4n phSi khai bo chQng. Ph !ng thKc getName() l hi8n thMc ph !ng thKc trbu t ang trong l7p cha, nNu ph !ng thKc getName() khng khai bo trong l7p Cylinder th n so kN thba tb l7p Circle. Ph !ng thKc setHeight dng 3@ gn chi:u cao m7i cho mDt 3Fi t ang hnh trL, cn ph !ng thKc getHeight trS v: chi:u cao cBa mDt 3Fi t ang hnh trL. // Test.java // Ki6m tra tnh k thBa cEa Point, Circle, Cylinder v*i // l*p trBu t$Dng Shape. // Khai bo th$ vi3n import java.text.DecimalFormat; public class Test { // Ki6m tra tnh k thBa cEa cc 0<i t$Dng hnh h,c public static void main( String args[] ) { // T&o ra cc 0<i t$Dng hnhh,c Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); // T&o m2t m4ng cc 0<i t$Dng hnh h,c Shape arrayOfShapes[] = new Shape[ 3 ]; // arrayOfShapes[ 0 ] l m2t 0<i t$Dng Point arrayOfShapes[ 0 ] = point; // arrayOfShapes[ 1 ] l m2t 0<i t$Dng Circle arrayOfShapes[ 1 ] = circle; // arrayOfShapes[ 2 ] l m2t 0<i t$Dng cylinder arrayOfShapes[ 2 ] = cylinder; // L/y tn v bi6u diRn cEa m?i 0<i t$Dng hnh h,c 72

String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n" + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat( "0.00" ); // duy3t m4ng arrayOfShapes l/y tn, di3n tch, th6 tch // cEa m?i 0<i t$Dng hnh h,c trong m4ng. for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i].toString() + "\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) + "\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( 0 ); } } // end class Test KNt quS thMc thi ch !ng trnh:

73

V dX 2: T !ng tM v dL 1 nh ng trong v dL 2 chng ta dng interface 3@ 3=nh ngh_a cho Shape thay v mDt l7p trbu t ang. V v<y tRt cS cc ph !ng thKc trong interface Shape phSi 3 ac hi8n thMc trong l7p Point l l7p ci 3Ht trMc tiNp interface Shape. // O9nh nghGa m2t interface Shape trong t1p tin shape.java public interface Shape { // Tnh di3n tch public abstract double area(); // Tnh th6 tch public abstract double volume(); // tr4 v; tn cEa shape public abstract String getName(); } L7p Point ci 3Ht/hi8n thMc interface tn shape. // O9nh nghGa l*p Point trong t1p tin Point.java public class Point extends Object implements Shape { protected int x, y; // T,a 02 x, y cEa 1 0i6m // constructor khng tham s<. public Point() { setPoint( 0, 0 ); } // constructor c tham s<. public Point(int xCoordinate, int yCoordinate) { setPoint( xCoordinate, yCoordinate ); 74

} // gn t,a 02 x, y cho 1 0i6m public void setPoint( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } // l/y t,a 02 x cEa 1 0i6m public int getX() { return x; } // l/y t,a 02 y cEa 1 0i6m public int getY() { return y; } // Th6 hi3n t,a 02 cEa 1 0i6m d$*i d&ng chu?i public String toString() { return "[" + x + ", " + y + "]"; } // Tnh di3n tch public double area() { return 0.0; } // Tnh th6 tch public double volume() 75

{ return 0.0; } // tr4 v; tn cEa 0<i t$Dng shape public String getName() { return "Point"; } } // end class Point L7p Circle l l7p con cBa l7p Point, v ci 3Ht/hi8n thMc gin tiNp interface tn shape. // O9nh nghGa l*p Circle trong t1p tin Circle.java public class Circle extends Point { // DMn xu/t tB l*pPoint protected double radius; // constructor khng tham s< public Circle() { // ngKm g,i 0 n constructor cEa l*p cha setRadius( 0 ); } // constructor c tham s< public Circle( double circleRadius, int xCoordinate, int yCoordinate ) { // g,i constructorcEa l*p cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } 76

// Gn bn knh cEa 0$Qng trn public void setRadius( double circleRadius ) { radius = ( circleRadius >= 0 ? circleRadius:0 ); } // L/y bn knh cEa 0$Qng trn public double getRadius() { return radius; } // Tnh di3n tch 0$Qng trn Circle public double area() { return Math.PI * radius * radius; } // Bi6u diRn 0$Qng trn bSng m2t chu?i public String toString() { return "Center = " + super.toString() + "; Radius = " + radius; } // tr4 v; tn cEa shape public String getName() { return "Circle"; } } // end class Circle // O9nh nghGa l*p hnh trT Cylinder // trong t1p tin Cylinder.java. 77

public class Cylinder extends Circle { // chi;u cao cEa Cylinder protected double height; // constructor khng c tham s< public Cylinder() { // ngKm g,i 0 n constructor cEa l*p cha setHeight( 0 ); } // constructor c tham s< public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate, int yCoordinate ) { // G,i constructor cEa l*p cha super( cylinderRadius, xCoordinate, yCoordinate ); setHeight( cylinderHeight ); } // Gn chi;u cao cho Cylinder public void setHeight( double cylinderHeight ) { height = ( cylinderHeight >= 0 ? cylinderHeight :0 ); } // L/y chi;u cao cEa Cylinder public double getHeight() { return height; 78

} // Tnh di3n tch xung quanh cEa Cylinder public double area() { return 2 * super.area() + 2 * Math.PI * radius * height; } // Tnh th6 tch cEa Cylinder public double volume() { return super.area() * height; } // Bi6u diRn Cylinder bSng m2t chu?i public String toString() { return super.toString() + "; Height = " + height; } // tr4 v; tn cEa shape public String getName() { return "Cylinder"; } } // end class Cylinder // Test.java // Ki6m tra tnh k thBa cEa Point, Circle, Cylinder v*i // interface Shape. // Khai bo th$ vi3n import java.text.DecimalFormat; 79

public class Test { // Ki6m tra tnh k thBa cEa cc 0<i t$Dng hnh h,c public static void main( String args[] ) { // T&o ra cc 0<i t$Dng hnhh,c Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); // T&o m2t m4ng cc 0<i t$Dng hnh h,c Shape arrayOfShapes[] = new Shape[ 3 ]; // arrayOfShapes[ 0 ] l m2t 0<i t$Dng Point arrayOfShapes[ 0 ] = point; // arrayOfShapes[ 1 ] l m2t 0<i t$Dng Circle arrayOfShapes[ 1 ] = circle; // arrayOfShapes[ 2 ] l m2t 0<i t$Dng cylinder arrayOfShapes[ 2 ] = cylinder; // L/y tn v bi6u diRn cEa m?i 0<i t$Dng hnh h,c String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n" + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat( "0.00" ); // duy3t m4ng arrayOfShapes l/y tn, di3n tch, th6 tch // cEa m?i 0<i t$Dng hnh h,c trong m4ng. for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i].toString() + 80

"\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) + "\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( 0 ); } } // end class Test KNt quS thMc thi ch !ng trnh:

81

Ch)*ng 4: THI^T K^ GIAO DI-N NG4#I


DNG
4.1.M7 9:u Ch !ng ny cung cRp cho sinh vin nh;ng kiNn thKc c! bSn 3@ xy dMng giao di8n (Graphic User Interface - GUI) cBa ch !ng trnh Kng dLng bOng ngn ng; java: Nh;ng nguyn tec thiNt kN giao di8n. Nh;ng th vi8n, gi xy dMng giao di8n: gQm nh;ng l7p (class), nh;ng giao tiNp (interface) quSn l sM ki8n v nh;ng thnh ph4n (components) xy dMng nn giao di8n ng li dng. BD quSn l trnh by (layout managers) X? l sM ki8n

Trong khun khJ gio trnh l<p trnh java cjn bSn ny chng ti trnh by vi8c thiNt kN GUI dng th vi8n awt (abstract windows toolkit). Vi8c thiNt kNt GUI so trMc quan, uy@n chuy@n h!n khi chng ta s? dLng th vi8n JFC (Java Foundation Class) so gi7i 3 ac gi7i thi8u trong chuyn 3: java nng cao.

82

4.2.Gi=i thi>u th) vi>n awt Th vi8n awt l bD th vi8n dng 3@ xy dMng giao di8n ng li dng cho mDt ch !ng trnh Kng dLng c 34y 3B cc thnh ph4n c! bSn nh : Label, Button, Checkbox, Radiobutton, Choice, List, Text Field, Text Area, Scrollbar, Menu, Frame GiFng nh cc API cBa Windows, java cung cRp cho ng li l<p trnh th vi8n awt. Nh ng khc v7i cc hm API, th vi8n awt khng phL thuDc h8 3i:u hnh. Th vi8n awt l n:n tSng, c! s1 gip cho chng ta tiNp c<n v7i th vi8n m1 rDng JFC hi8u quS h!n. CRu trc cy phn cRp cBa tRt cS nh;ng l7p trong th vi8n awt chng ta c th@ xem chi tiNt trong ti li8u km theo bD cng cL j2se (ph4n API Specification)

4.3.Cc khi ni>m c* bQn 4.3.1.Component Component l mDt 3Fi t ang c bi@u dinn 3Q h\a 3 ac hi@n th= trn mn hnh m ng li dng c th@ t !ng tc 3 ac. Chvng 83

hPn nh nh;ng nt nhRn (button), nh;ng checkbox, nh;ng scrollbar, L7p Component l mDt l7p trbu t ang.
java.lang.Object

java.awt.Component 4.3.2.Container Container l 3Fi t ang v<t chKa hay nh;ng 3Fi t ang c khS njng quSn l v nhm cc 3Fi t ang khc lPi. Nh;ng 3Fi t ang con thuDc thnh ph4n awt nh : button, checkbox, radio button, scrollbar, list, chu s? dLng 3 ac khi ta 3 a n vo khung chKa (container). MJt sL 9Li t)Rng container trong Java: Panel: [Fi t ang khung chKa 3!n giSn nhRt, dng 3@ nhm cc 3Fi t ang, thnh ph4n con lPi. MDt Panel c th@ chKa bn trong mDt Panel khc.
java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Panel

Frame: khung chKa Frame l mDt c?a sF window hvn hoi 1 mKc trn cng bao gQm mDt tiu 3:u v mDt 3 lng bin (border) nh cc Kng dLng windows thng th lng khc. Khung chKa Frame th lng 3 ac s? dLng 3@ tPo ra c?a sJ chnh cBa cc Kng dLng.
java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Window +--java.awt.Frame

Dialogs: 3y l mDt c?a sJ dPng hDp hDi thoPi (c?a sJ dPng ny cn 3 ac g\i l pop-up window), c?a sJ dPng ny th lng 3 ac dng 3@ 3 a ra thng bo, hay dng 3@ lRy d; li8u nh<p tb ngoi vo thng qua cc 3Fi t ang, thnh ph4n trn dialog nh TextField chvng hPn. Dialog

84

cmng l mDt c?a sJ nh ng khng 34y 3B chKc njng nh 3Fi t ang khung chKa Frame.
java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Window +--java.awt.Dialog

ScrollPanes: l mDt khung chKa t !ng tM khung chKa Panel, nh ng c thm 2 thanh tr at gip ta tJ chKc v xem 3 ac cc 3Fi t ang l7n chon nhi:u cht trn mn hnh nh nh;ng hnh Snh hay vjn bSn nhi:u dng.
java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.ScrollPane

4.3.3.Layout Manager Khung chKa container nh<n cc 3Fi t ang tb bn ngoi 3 a vo v n phSi biNt lm thN no 3@ tJ chKc sep xNp cht 1 cho cc 3Fi t ang 3. Mti 3Fi t ang khung chKa 3:u c mDt bD quSn l ch=u trch nhi8m thMc hi8n cng vi8c 3Ry 3 l bD quSn l trnh by (Layout Manager). Cc bD quSn l trnh by m th vi8n AWT cung cRp cho ta bao gQm: FlowLayout: Sep xNp cc 3Fi t ang t# tri qua ph&i v t# trn xu)ng d$-i. Cc 3Fi t ang 3:u gi; nguyn kch th 7c cBa mnh. BorderLayout: Cc 3Fi t ang 3 ac 3Ht theo cc 3 lng vi:n cBa khung chKa theo cc cPnh West, East, South, North v Center tKc [ng, Ty, Nam, Bec v Trung tm hay Tri, PhSi, Trn, D 7i v Gi;a ty theo cch nhn cBa chng ta. GridLayout: TPo mDt khung l 7i v hnh v7i cc bOng nhau. Cc 3Fi t ang so 3Ht vba kch th 7c v7i

85

tbng 3. ThK tM sep xNp cmng tb tri qua phSi v tb trn xuFng d 7i. GridBagLayout: T !ng tM nh GridLayout, cc 3Fi t ang khung chKa cmng 3 ac 3 a vo mDt l 7i v hnh. Tuy nhin kch th 7c cc 3Fi t ang khng nhRt thiNt phSi vba v7i 1 m c th@ l 2, 3 hay nhi:u h!n ty theo cc rng buDc m ta chu 3=nh thng qua 3Fi t ang GridBagConstraint. Null Layout: Cch trnh by tM do. [Fi v7i cch trnh by ny ng li l<p trnh phSi tM 3Dng lm tRt cS tb vi8c 3=nh kch th 7c cBa cc 3Fi t ang, cmng nh xc 3=nh v= tr cBa n trn mn hnh. Ta khng phL thuDc vo nh;ng rng buDc 3ng, ty , nam, bec g cS.

4.4.ThiZt kZ GUI cho ch)*ng trnh 4.4.1.TVo khung chWa cEa sP ch)*ng trnh Thng th lng 3@ tPo c?a sJ chnh cho ch !ng trnh Kng dLng ta tiNn hnh cc b 7c: - TPo 3Fi t ang Frame - Xc 3=nh kch th 7c cBa Frame - Th@ hi8n Frame trn mn hnh V dX: import java.awt.*; class FrameDemo { public static void main(String args[]) { // T&o 0<i t$Dng khung ch8aFrame Frame fr = new Frame("My First Window") ; // Xc 09nh kch th$*c, v9 tr cEa Frame fr.setBounds(0, 0, 640, 480); // Hi6n th9 Frame 86

fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.2.TVo h> thLng thYc 9*n [Fi v7i th vi8n awt, 3@ xy dMng h8 thFng thMc 3!n cho ch !ng trnh Kng dLng chng ta c th@ dng cc l7p MenuBar, Menu, MenuItem, MenuShortcut.
MenuBar

MenuItem Menu

V dX: TPo h8 thFng thMc 3!n cho ch !ng trnh Calculator import java.awt.*; import java.awt.event.*; class Calculator { public static void main(String[] args) { 87

createMenu(); } private static void createMenu() { // Tao Frame ung dung final Frame fr = new Frame(); fr.setLayout(new BorderLayout()); // Tao cac menu bar MenuBar menu = new MenuBar(); Menu menuFile = new Menu("Edit"); MenuItem copyItem = new MenuItem("Copy Ctrl+C"); MenuItem pasteItem = new MenuItem("Paste Ctrl+V"); menuFile.add(copyItem); menuFile.add(pasteItem); Menu menuHelp = new Menu("Help"); MenuItem hTopicItem = new MenuItem("Help Topics"); MenuItem hAboutItem = new MenuItem("About Calculator"); menuHelp.add(hTopicItem); menuHelp.addSeparator(); menuHelp.add(hAboutItem); menu.add(menuFile); menu.add(menuHelp); fr.setMenuBar(menu); fr.setBounds(100, 100, 300, 200); fr.setTitle("Calculator"); //fr.setResizable(false); fr.setVisible(true); // xL l bi n s) ki3n 0ng cLa s< 8ng dTng. fr.addWindowListener( 88

new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } KNt quS thMc thi ch !ng trnh:

4.4.3.Gkn Component vo khung chWa [@ gen mDt thnh ph4n, mDt 3Fi t ang component vo mDt c?a sF (khung chKa) chng ta dng ph !ng thKc add cBa 3Fi t ang khung chKa container. V dX: import java.awt.*; class AddDemo { public static void main(String args[]) { // T&o 0<i t$Dng khung ch8aFrame Frame fr = new Frame("AddDemo App"); // T&o 0<i t$Dng Component 89

Button buttOk = new Button(OK); // GUn 0<i t$Dng nt nh/n vo khung ch8a fr.add(buttOk); // Xc 09nh kch th$*c, v9 tr cEa Frame fr.setSize(100, 100); // Hi6n th9 Frame fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.4.Trnh by cc Component trong khung chWa Nh chng ta 3 biNt khung chKa container nh<n cc 3Fi t ang tb bn ngoi 3 a vo v n phSi biNt lm thN no 3@ tJ chKc sep xNp cht 1 cho cc 3Fi t ang 3. Mti 3Fi t ang khung chKa 3:u c mDt bD quSn l ch=u trch nhi8m thMc hi8n cng vi8c 3Ry 3 l bD quSn l trnh by (Layout Manager). Chng ta so tm hi@u chi tiNt v: cc ki@u trnh by cBa th vi8n AWT. Interface LayoutManager 3=nh ngh_a giao tiNp cho nh;ng l7p biNt 3 ac lm thN no 3@ trnh by nh;ng trong nh;ng containers 4.4.4.1 FlowLayout public class FlowLayout extends Object 90

implements LayoutManager, Serializable [Fi v7i mDt container trnh by theo ki@u FlowLayout th: Cc component gen vo 3 ac sep xNp theo thK tM tb tri sang phSi v tb trn xuFng d 7i. Cc component c kch th 7c nh mong muFn. NNu chi:u rDng cBa Container khng 3B cht cho cc component th chng tM 3Dng tPo ra mDt dng m7i. FlowLayout th lng 3 ac dng 3@ 3@ sep xNp cc button trong 1 panel. Chng ta c th@ 3i:u chunh khoSng cch gi;a cc component. V dX: import java.awt.*; import java.lang.Integer; class FlowLayoutDemo { public static void main(String args[]) { Frame fr = new Frame("FlowLayout Demo"); fr.setLayout(new FlowLayout()); fr.add(new Button("Red")); fr.add(new Button("Green")); fr.add(new Button("Blue")); List li = new List(); for (int i=0; i<5; i++) { li.add(Integer.toString(i)); } fr.add(li); fr.add(new Checkbox("Pick me", true)); fr.add(new Label("Enter your name:")); 91

fr.add(new TextField(20)); // ph$%ng th8c pack() 0$Dc g,i s= lm cho cLa sV // hi3n hnh s= c kch th$*c vBa v*i kch th$*c // trnh by b< tr nhAng thnh phKn con cEa n. fr.pack(); fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.4.2 BorderLayout public class BorderLayout extends Object implements LayoutManager2, Serializable [Fi v7i mDt container trnh by theo ki@u BorderLayout th: BD trnh by khung chKa 3 ac chia lm 4 vng: NORTH, SOUTH, WEST, EAST v CENTER. ([ng, Ty, Nam, Bec v trung tm). BD trnh by loPi ny cho php sep xNp v thay 3Ji kch th 7c cBa nh;ng components chKa trong n sao cho vKa v7i 5 vng [NG, TY, NAM, BzC, TRUNG TM. Khng c4n phSi gen component vo cho tRt cS cc vng. Cc component 1 vng NORTH v SOUTH c chi:u cao ty nh ng c chi:u rDng 3ng bOng chi:u rDng vng chKa. Cc component 1 vng EAST v WEST c chi:u rDng ty nh ng c chi:u cao 3ng bOng chi:u cao vng chKa. Cc component 1 vng CENTER c chi:u cao v chi:u rDng phL thuDc vo cc vng xung quanh. 92

V dX: import java.awt.*; class BorderLayoutDemo extends Frame { private Button north, south, east, west, center; public BorderLayoutDemo(String sTitle) { super(sTitle); north = new Button("North"); south = new Button("South"); east = new Button("East"); west = new Button("West"); center = new Button("Center"); this.add(north, BorderLayout.NORTH); this.add(south, BorderLayout.SOUTH); this.add(east, BorderLayout.EAST); this.add(west, BorderLayout.WEST); this.add(center, BorderLayout.CENTER); } public static void main(String args[]) { Frame fr = new BorderLayoutDemo ("BorderLayout Demo"); fr.pack(); fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

93

4.4.4.3 GridLayout public class GridLayout extends Object implements LayoutManager [Fi v7i mDt container trnh by theo ki@u GridLayout th: BD trnh by tPo mDt khung l 7i v hnh v7i cc bOng nhau. Cc 3Fi t ang so 3Ht vba kch th 7c v7i tbng 3. ThK tM sep xNp tb tri qua phSi v tb trn xuFng d 7i. V dX: import java.awt.*; public class GridLayoutDemo { public static void main(String arg[]) { Frame f = new Frame("GridLayout Demo"); f.setLayout(new GridLayout(3,2)); f.add(new Button("Red")); f.add(new Button("Green")); f.add(new Button("Blue")); f.add(new Checkbox("Pick me", true)); f.add(new Label("Enter name here:")); 94

f.add(new TextField()); f.pack(); f.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.4.4 GridBagLayout public class GridBagLayout extends Object implements LayoutManager2 (public interface LayoutManager2 extends LayoutManager) [Fi v7i mDt container trnh by theo ki@u GridBagLayout th: Cc componets khi 3 ac 3 a vo khung chKa so 3 ac trnh by trn 1 khung l 7i v hnh t !ng tM nh GridLayout. Tuy nhin khc v7i GridLayout kch th 7c cc 3Fi t ang khng nhRt thiNt phSi vba v7i 1 trn khung l 7i m c th@ l 2, 3 hay nhi:u h!n ty theo cc rng buDc m ta chu 3=nh thng qua 3Fi t ang GridBagConstraints. L7p GridBagConstraints dgn xuRt tb l7p Object. L7p GridBagConstraints dng 3@ chu 3=nh rng buDc cho nh;ng components trnh by trong khung chKa container theo ki@u GridBagLayout. o gridx, gridy: v= tr cBa khung l 7i v hnh m ta so 3 a 3Fi t ang con vo 95

o gridwidth, gridheight: kch th 7c hay vng trnh by cho 3Fi t ang con. o Insets: l mDt biNn 3Fi t ang thuDc l7p Inset dng 3@ qui 3=nh khoSng cch bin phn cch theo 4 chi:u (trn, d 7i, tri, phSi). o weightx, weighty: chu 3=nh khoSng cch l7n ra t !ng 3Fi cBa cc 3Fi t ang con v7i nhau V dX: import java.awt.*; public class GridBagLayoutDemo { public static void main(String arg[]) { Frame f = new Frame("GridBagLayout Demo"); // Thiet lap layout manager // Tao doi tuong rang buoc cho cach trinh bay // GridBagLayout. GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); f.setLayout(layout); // Tao ra 9 nut nhan String[] buttName = {"Mot", "Hai", "Ba", "Bon", "Nam", "Sau", "Bay", "Tam", "Chin"}; Button[] buttons = new Button[9]; for(int i=0;i<9;i++) { buttons[i] = new Button (buttName[i]); } // Rang buoc cac nut nhan cach nhau 2 pixel 96

constraints.insets = new Insets(2,2,2,2); // Qui dinh cac nut nhan se thay doi kich thuoc // theo ca 2 chieu constraints.fill = GridBagConstraints.BOTH; // Rang buoc cho nut nhan thu 1 constraints.gridx = 1; constraints.gridy = 1; constraints.gridheight = 2; constraints.gridwidth = 1; layout.setConstraints(buttons[0], constraints); // Rang buoc cho nut nhan thu 2 constraints.gridx = 2; constraints.gridy = 1; constraints.gridheight = 1; constraints.gridwidth = 2; layout.setConstraints(buttons[1], constraints); // Rang buoc cho nut nhan thu 3 constraints.gridx = 2; constraints.gridy = 2; constraints.gridheight = 1; constraints.gridwidth = 1; layout.setConstraints(buttons[2], constraints); // Rang buoc cho nut nhan thu 4 constraints.gridx = 1; constraints.gridy = 3; constraints.gridheight = 1; constraints.gridwidth = 2; layout.setConstraints(buttons[3], constraints); // Rang buoc cho nut nhan thu 5 97

constraints.gridx = 3; constraints.gridy = 2; constraints.gridheight = 2; constraints.gridwidth = 1; layout.setConstraints(buttons[4], constraints); // Rang buoc cho nut nhan thu 6 constraints.gridx = 4; constraints.gridy = 1; constraints.gridheight = 3; constraints.gridwidth = 1; layout.setConstraints(buttons[5], constraints); // Tu nut thu 7 tro di khong can rang buoc // thay vi doi kich thuoc constraints.fill = GridBagConstraints.NONE; // Rang buoc cho nut nhan thu 7 constraints.gridx = 1; constraints.gridy = 4; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 1.0; layout.setConstraints(buttons[6], constraints); // Rang buoc cho nut nhan thu 8 constraints.gridx = 2; constraints.gridy = 5; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 2.0; layout.setConstraints(buttons[7], constraints); // Rang buoc cho nut nhan thu 9 constraints.gridx = 3; 98

constraints.gridy = 6; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 3.0; layout.setConstraints(buttons[8], constraints); // Dua cac nut nhan khung chua chuong trinh for (int i=0;i<9;i++) f.add(buttons[i]); f.pack(); f.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.4.5 Null Layout MDt khung chKa 3 ac trnh by theo ki@u Null Layout c ngh_a l ng li l<p trnh phSi tM lm tRt cS tb vi8c qui 3=nh kch th 7c cBa khung chKa, cmng nh kch th 7c v v= tr cBa tbng 3Fi t ang component trong khung chKa. [@ thiNt l<p cch trnh by l Null Layout cho mDt container ta chu vi8c g\i ph !ng thKc setLayout(null) v7i tham sF l null. 99

MDt sF ph !ng thKc cBa l7p trbu t ang Component dng 3@ 3=nh v= v qui 3=nh kch th 7c cBa component khi 3 a chng vo khung chKa trnh by theo ki@u ki@u tM do: o Public void setLocation(Point p) o Public void setSize(Dimension p) o Public void setBounds(Rectangle r) V dX: o MyButton.setSize(new Dimension(20, 10)); o MyButton.setLocation(new Point(10, 10)); o MyButton.setBounds(10, 10, 20, 10); import java.awt.*; class NullLayoutDemo { public static void main(String args[]) { Frame fr = new Frame("NullLayout Demo"); fr.setLayout(null); Button buttOk = new Button("OK"); buttOk.setBounds(100, 150, 50, 30); Button buttCancel = new Button("Cancel"); buttCancel.setBounds(200, 150, 50, 30); Checkbox checkBut = new Checkbox("Check box", true); checkBut.setBounds(100, 50, 100, 20); List li = new List(); for (int i=0; i<5; i++) { li.add(Integer.toString(i)); } li.setBounds(200, 50, 50, 50); fr.add(buttOk); fr.add(buttCancel); 100

fr.add(checkBut); fr.add(li); fr.setBounds(10, 10, 400, 200); fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

4.4.5.Cc 9Li t)Rng khung chWa Container Nh chng ta 3 biNt container l 3Fi t ang khung chKa c khS njng quSn l v chKa cc 3Fi t ang (components) khc trong n. Cc components chu c th@ s? dLng 3 ac khi 3 a n vo 1 3Fi t ang khung chKa l container. Mti container th lng gen v7i mDt LayoutManager (FlowLayout, BorderLayout, GridLayout, GridBagLayout, Null Layout) qui 3=nh cch trnh by v bF tr cc components trong mDt container. Cc l\ai container trong java: Frame, Panel, Dialog, ScrollPanes.

101

4.4.5.1 Khung chWa Frame


java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Window

+--java.awt.Frame Khung chKa Frame l mDt c?a sF window hvn hoi 1 mKc trn cng bao gQm mDt tiu 3:u v mDt 3 lng bin (border) nh cc Kng dLng windows thng th lng khc. Khung chKa Frame th lng 3 ac s? dLng 3@ tPo ra c?a sJ chnh cBa cc Kng dLng. Khung chKa Panel c bD quSn l trnh by (LayoutManager) mHc 3=nh l FlowLayout. 4.4.5.2 Khung chWa Panel
java.lang.Object +--java.awt.Component +--java.awt.Container

+--java.awt.Panel Khung chKa Panel c bD quSn l trnh by (LayoutManager) mHc 3=nh l FlowLayout. [Fi v7i khung chKa Panel th cc Panel c th@ lQng vo nhau, v v<y khung chKa Panel th lng 3 ac dng 3@ bF tr cc nhm components bn trong mDt khung chKa khc. V dX: import java.awt.*; public class PanelDemo extends Frame { private Button next, prev, first; private List li; public PanelDemo(String sTitle) { super(sTitle); next = new Button("Next >>"); prev = new Button("<< Prev"); 102

first = new Button("First"); Panel southPanel = new Panel(); southPanel.add(next); southPanel.add(prev); southPanel.add(first); // BorderLayout.SOUTH: vng d$*i this.add(southPanel, BorderLayout.SOUTH); Panel northPanel = new Panel(); northPanel.add(new Label("Make a Selection")); // BorderLayout.NORTH: vng trn this.add(northPanel, BorderLayout.NORTH); li = new List(); for(int i=0;i<10;i++) { li.add("Selection" + i); } this.add(li, BorderLayout.CENTER); } public static void main(String arg[]) { Container f = new PanelDemo("Panel Demo"); f.setSize(300, 200); f.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

103

4.4.5.2 Khung chWa Dialog


java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Window

+--java.awt.Dialog Dialog l mDt l7p khung chKa tMa Frame v cn 3 ac g\i l popup window. C hai loPi dialog phJ biNn: Modal Dialog: so kha tRt cS cc c?a sF khc cBa Kng dLng khi dialog dPng ny cn hi@n th=. Non-Modal Dialog: vgn c th@ 3Nn cc c?a sF khc cBa Kng dLng khi dialog dPng ny hi@n th=. MDt c?a sJ dPng Dialog lun lun phSi gen v7i mDt c?a sJ Kng dLng (Frame). [@ tPo mDt 3Fi t ang khung chKa Dialog ta c th@ dng mDt trong cc constructor cBa n: public Dialog (Frame parentWindow, boolean isModal) public Dialog (Frame parentWindow, String title, boolean isModal) parentWindow: cLa sV cha title: tiu 0; cEa Dialog isModal: true -> l Dialog d&ng modal isModal: false -> l Dialog khng ph4i d&ng modal (hay non-modal) 104

4.5.XE l biZn cL/sY ki>n 4.5.1.M hnh xE l sY ki>n (Event-Handling Model) i trn chng ta chu 3: c<p 3Nn vRn 3: thiNt kN giao di8n ch !ng trnh Kng dLng m ch a 3: c<p 3Nn vRn 3: x? l sM ki8n. Nh;ng sM ki8n 3 ac pht sinh khi ng li dng t !ng tc v7i giao di8n ch !ng trnh (GUI). Nh;ng t !ng tc th lng gHp nh : di chuy@n, nhRn chuDt, nhRn mDt nt nhRn, ch\n mDt MenuItem trong h8 thFng thMc 3!n, nh<p d; li8u trong mDt vjn bSn, 3ng c?a sJ Kng dLng, Khi c mDt t !ng tc xSy ra th mDt sM ki8n 3 ac g1i 3Nn ch !ng trnh. Thng tin v: sM ki8n th lng 3 ac l u tr; trong mDt 3Fi t ang dgn xuRt tb l7p AWTEvent. Nh;ng ki@u sM ki8n trong gi java.awt.event c th@ dng cho cS nh;ng component AWT v JFC. [Fi v7i th vi8n JFC th c thm nh;ng ki@u sM ki8n m7i trong gi java.swing.event.

105

NhAng l=p sY ki>n cHa gi java.awt.event

C 3 yNu tF quan tr\ng trong m hnh x? l sM ki8n: - NguQn pht sinh sM ki8n (event source) - SM ki8n (event object) - BD leng nghe sM ki8n (event listener) NguSn pht sinh sY ki>n: l thnh ph4n cBa giao di8n m ng li dng tc 3Dng. SY ki>n: Tm tet thng tin v: x? ki8n xSy ra, bao gQm tham chiNu 3Nn nguQn gFc pht sinh sM ki8n v thng tin sM ki8n so g1i 3Nn cho bD leng nghe x? l. BJ lkng nghe: MDt bD leng nghe l mDt 3Fi t ang cBa mDt l7p hi8n thMc mDt hay nhi:u interface cBa gi java.awt.event hay java.swing.event (3Fi v7i nh;ng component trong th vi8n JFC). Khi 3 ac thng bo, bD leng nghe nh<n sM ki8n v x? l. NguQn pht sinh sM ki8n phSi cung cRp nh;ng ph !ng thKc 3@ 3jng k hoHc hBy bp mDt bD leng nghe. NguQn pht sinh sM ki8n lun phSi gen v7i mDt bD leng nghe, v n so thng bo v7i bD leng nghe 3 khi c sM ki8n pht sinh 3. Nh v<y ng li l<p trnh c4n lm hai vi8c: 106

TPo v 3jng k mDt bD leng nghe cho mDt component trn GUI. Ci 3Ht cc ph !ng thKc quSn l v x? l sM ki8n NhAng interfaces lkng nghe cHa gi java.awt.event

MDt 3Fi t ang Event-Listener leng nghe nh;ng sM ki8n khc nhau pht sinh tb cc components cBa giao di8n ch !ng trnh. V7i mti sM ki8n khc nhau pht sinh th ph !ng thKc t !ng Kng trong nh;ng Event-Listener so 3 ac g\i thMc hi8n. Mti interface Event-Listener gQm mDt hay nhi:u cc ph !ng thKc m chng c4n ci 3Ht trong cc l7p hi8n thMc (implements) interface 3. Nh;ng ph !ng thKc trong cc interface l trbu t ang v v<y l7p (bD leng nghe) no hi8n thMc cc interface th 107

phSi ci 3Ht tRt cS nh;ng ph !ng thKc 3. NNu khng th cc bD leng nghe so tr1 thnh cc l7p trbu t ang. 4.5.2.XE l sY ki>n chuJt Java cung cRp hai intefaces leng nghe (bD leng nghe sM ki8n chuDt) l MouseListener v MouseMotionListener 3@ quSn l v x? l cc sM ki8n lin quan 3Nn thiNt b= chuDt. Nh;ng sM ki8n chuDt c th@ bgy cho bRt kq component no trn GUI m dgn xuRt tb java.awt.component. Cc ph !ng thKc cBa interface MouseListener: public void mousePressed(MouseEvent event): 3 ac g\i khi mDt nt chuDt 3 ac nhRnv con trp chuDt 1 trn component. public void mouseClicked(MouseEvent event): 3 ac g\i khi mDt nt chuDt 3 ac nhRn v nhS trn component m khng di chuy@n chuDt. public void mouseReleased(MouseEvent event): 3 ac g\i khi mDt nt chuDt nhS sa khi ko r. public void mouseEntered(MouseEvent event): 3 ac g\i khi con trp chuDt vo trong 3 lng bin cBa mDt component. public void mouseExited(MouseEvent event): 3 ac g\i khi con trp chuDt ra khpi 3 lng bin cBa mDt component. Cc ph !ng thKc cBa interface MouseMotionListener: public void mouseDragged(MouseEvent even ): ph !ng thKc ny 3 ac g\i khi ng li dng nhRn mDt nt chuDt v ko trn mDt component. public void mouseMoved(MouseEvent event): ph !ng thKc ny 3 ac g\i khi di chuy@n chuDt trn component. Mti ph !ng thKc x? l sM ki8n chuDt c mDt tham sF MouseEvent chKa thng tin v: sM ki8n chuDt pht sinh chvng hPn nh : t\a 3D x, y n!i sM ki8n chuDt xSy ra. Nh;ng ph !ng 108

thKc t !ng Kng trong cc interfaces so tM 3Dng 3 ac g\i khi chuDt t !ng tc v7i mDt component. [@ biNt 3 ac ng li dng 3 nhRn nt chuDt no, chng ta dng nh;ng phu!ng thKc, nh;ng hOng sF cBa l7p InputEvent (l l7p cha cBa l7p MouseEvent). V dX: Ch !ng trnh tn MouseTracker bn d 7i minh h\a vi8c dng nh;ng ph !ng thKc cBa cc interfaces MouseListener v MouseMotionListener 3@ bgy v x? l cc sM ki8n chuDt t !ng Kng. import java.awt.*; import java.awt.event.*; public class MouseTracker extends Frame implements MouseListener, MouseMotionListener { private Label statusBar; // set up GUI and register mouse event handlers public MouseTracker() { super( "Demonstrating Mouse Events" ); statusBar = new Label(); this.add( statusBar, BorderLayout.SOUTH ); // application listens to its own mouse events addMouseListener( this ); addMouseMotionListener( this ); setSize( 275, 100 ); setVisible( true ); } // MouseListener event handlers // handle event when mouse released immediately // after press public void mouseClicked( MouseEvent event ) { statusBar.setText( "Clicked at [" + event.getX() + 109

", " + event.getY() + "]" ); } // handle event when mouse pressed public void mousePressed( MouseEvent event ) { statusBar.setText( "Pressed at [" + event.getX() + ", " + event.getY() + "]" ); } // handle event when mouse released after dragging public void mouseReleased( MouseEvent event ) { statusBar.setText( "Released at [" + event.getX() + ", " + event.getY() + "]" ); } // handle event when mouse enters area public void mouseEntered( MouseEvent event ) { statusBar.setText( "Mouse in window" ); } // handle event when mouse exits area public void mouseExited( MouseEvent event ) { statusBar.setText( "Mouse outside window" ); } // MouseMotionListener event handlers // handle event when user drags mouse with button pressed public void mouseDragged( MouseEvent event ) { statusBar.setText( "Dragged at [" + event.getX() + ", " + event.getY() + "]" ); } 110

// handle event when user moves mouse public void mouseMoved( MouseEvent event ) { statusBar.setText( "Moved at [" + event.getX() + ", " + event.getY() + "]" ); } // execute application public static void main( String args[] ) { MouseTracker application = new MouseTracker(); } } // end class MouseTracker KNt quS thMc thi ch !ng trnh:

4.5.3.XE l sY ki>n bn phm [@ x? l sM ki8n bn phm java ht tra mDt bD leng nghe sM ki8n 3 l interface KeyListener. MDt sM ki8n bn phm 3 ac 111

pht sinh khi ng li dng nhRn v nhS mDt phm trn bn phm. MDt l7p hi8n thMc KeyListener phSi ci 3Ht cc ph !ng thKc keyPressed, keyReleased v keyTyped. Mti ph !ng thKc ny c mDt tham sF l mDt 3Fi t ang ki@u KeyEvent. KeyEvent l l7p con cBa l7p InputEvent. Cc ph !ng thKc cBa interface KeyListener Ph !ng thKc keyPressed 3 ac g\i khi mDt phm bRt kq 3 ac nhRn. Ph !ng thKc keyTyped 3 ac g\i thMc hi8n khi ng li dng nhRn mDt phm khng phSi phm hnh 3Dng (nh phm mmi tn, phm Home, End, Page Up, Page Down, cc phm chKc njng nh : Num Lock, Print Screen, Scroll Lock, Caps Lock, Pause). Ph !ng thKc keyReleased 3 ac g\i thMc hi8n khi nhS phm nhRn sau khi sM ki8n keyPressed hoHc keyTyped.

V dX: minh h\a vi8c x? l sM ki8n chuDt thng qua cc ph !ng thKc cBa interface KeyListener. L7p KeyDemo bn d 7i hi8n thMc interface KeyListener, v v<y tRt cS 3 ph !ng thKc trong KeyListener phSi 3 ac ci 3Ht trong ch !ng trnh. // KeyDemo.java // Demonstrating keystroke events. // Java core packages import java.awt.*; import java.awt.event.*; public class KeyDemo extends Frame implements KeyListener { private String line1 = "", line2 = ""; private String line3 = ""; private TextArea textArea; // set up GUI public KeyDemo() 112

{ super( "Demonstrating Keystroke Events" ); // set up TextArea textArea = new TextArea( 10, 15 ); textArea.setText( "Press any key on the keyboard..." ); textArea.setEnabled( false ); this.add( textArea ); // allow frame to process Key events addKeyListener( this ); setSize( 350, 100 ); setVisible( true ); } // handle press of any key public void keyPressed( KeyEvent event ) { line1 = "Key pressed: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } // handle release of any key public void keyReleased( KeyEvent event ) { line1 = "Key released: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } // handle press of an action key public void keyTyped( KeyEvent event ) { 113

line1 = "Key typed: " + event.getKeyChar(); setLines2and3( event ); } // set second and third lines of output private void setLines2and3( KeyEvent event ) { line2 = "This key is " + ( event.isActionKey() ? "" : "not " ) + "an action key"; String temp = event.getModifiers() ); event.getKeyModifiersText(

line3 = "Modifier keys pressed: " + ( temp.equals( "" ) ? "none" : temp ); textArea.setText(line1+"\n"+line2+"\n"+ line3+"\n" ); } // execute application public static void main( String args[] ) { KeyDemo application = new KeyDemo(); } } // end class KeyDemo KNt quS thMc thi ch !ng trnh:

114

4.6.MJt sL v dX minh hea V dX 1: TPo bD leng nghe biNn cF cho 3Fi t ang khung chKa Frame, v x? l biNn cF 3ng c?a sJ. import java.awt.*; import java.awt.event.*; public class WindowClosingDemo { public static void main(String args[]) 115

{ Frame f = new Frame ("WindowClosing Demo"); WindowCloser closer = new WindowCloser(); f.addWindowListener(closer); f.setBounds(10, 10, 300, 200); f.setVisible(true); } } import java.awt.event.*; class WindowCloser implements WindowListener { public void windowClosing(WindowEvent e) { System.out.println("windowClosing.."); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("windowActivated..."); } public void windowClosed(WindowEvent e) { System.out.println("windowClosed..."); } public void windowDeactivated(WindowEvent e) { System.out.println("windowDeactivated..."); } public void windowDeiconified(WindowEvent e) { System.out.println("windowDeiconified..."); } public void windowIconified(WindowEvent e) { 116

System.out.println("windowIconified..."); } public void windowOpened(WindowEvent e) { System.out.println("windowOpened..."); } } C th@ dng l7p trbu t ang WindowAdapter 3@ tPo ra bD leng nghe. public abstract class WindowAdapter extends Object implements WindowListener (WindowAdapter hi8n thMc interface WindowListener nn l7p So ny cmng c 7 ph !ng thKc giFng nh giao di8n WindowListener) import java.awt.event.*; class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("windowClosing.."); System.exit(0); } } V dX 2: CheckboxGroup Demo import java.awt.*; public class CheckboxGroupDemo extends Frame { private Checkbox red, green, blue; private CheckboxGroup checkGroup; public CheckboxGroupDemo(String title) { super(title); checkGroup = new CheckboxGroup(); red = new Checkbox("Red", checkGroup, false); green = new Checkbox("Green", checkGroup, false); blue = new Checkbox("Blue", checkGroup, false); 117

//add the checkboxes to the frame Panel north = new Panel(); north.add(red); north.add(green); north.add(blue); this.add(north, BorderLayout.NORTH); //register the event listener SetColor listener = new SetColor(this); red.addItemListener(listener); green.addItemListener(listener); blue.addItemListener(listener); } public static void main(String [] args) { Frame f = new CheckboxGroupDemo("CheckboxGroupDemo"); f.setSize(300,300); f.setVisible(true); } } // end of class import java.awt.*; import java.awt.event.*; public class SetColor implements ItemListener { private Frame pallette; private Color c; public SetColor(Frame c) { pallette = c; } 118

public void itemStateChanged(ItemEvent e) { String item = (String) e.getItem(); int state = e.getStateChange(); if (item.equalsIgnoreCase("red")) c = new Color(255, 0, 0); if (item.equalsIgnoreCase("green")) c = new Color(0, 255, 0); if (item.equalsIgnoreCase("blue")) c = new Color(0, 0, 255); pallette.setBackground(c); } } // end of class KNt quS thMc thi ch !ng trnh:

V dX 3: TextComponent import java.awt.*; class TextComponentDemo extends Frame { private TextField textField; private TextArea textArea; private Button enter, clear; public TextComponentDemo (String title) { super(title); 119

textArea = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY); textArea.setEditable(false); textField = new TextField(); enter = new Button("Enter"); clear = new Button("Clear"); //layout the GUI this.add(textArea, BorderLayout.CENTER); Panel southEast = new Panel(new BorderLayout()); southEast.add(enter, BorderLayout.EAST); southEast.add(clear, BorderLayout.WEST); Panel south = new Panel(new BorderLayout()); south.add(textField, BorderLayout.CENTER); south.add(southEast, BorderLayout.EAST); this.add(south, BorderLayout.SOUTH); //setup the event handling CreateList listener = new CreateList(textField, textArea); enter.addActionListener(listener); clear.addActionListener(listener); textField.addActionListener(listener); } public TextField getTextField() { return textField; } public static void main(String [] args) 120

{ TextComponentDemo f = new TextComponentDemo ("TextComponentDemo "); f.setSize(300,200); f.setVisible(true); f.getTextField().requestFocus(); } } import java.awt.*; import java.awt.event.*; public class CreateList implements ActionListener { private int counter = 0; private TextField source; private TextArea destination; public CreateList(TextField s, TextArea d) { source = s; destination = d; } public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (action.equalsIgnoreCase("Enter")) { String text = source.getText(); counter++; destination.append(counter + "." + text + "\n"); source.setText(""); } else if (action.equalsIgnoreCase("Clear")) { 121

destination.setText(""); counter = 0; } } } KNt quS thMc thi ch !ng trnh:

V dX 4: ListDemo import java.awt.*; public class ListDemo extends Frame { private List li; private Label selected; public ListDemo(String title) { super(title); li = new List(); li.add("Monday"); li.add("Tuesday"); li.add("Wednesday"); li.add("Thursday"); li.add("Friday"); li.add("Saturday"); li.add("Sunday");

122

selected = new Label("Double click a day:", Label.CENTER); this.setLayout(new BorderLayout()); this.add(selected , BorderLayout.NORTH); this.add(li, BorderLayout.CENTER); // Tao listener cho List ShowSelectionListener listener = new ShowSelectionListener(selected); li.addActionListener(listener); } public static void main(String args[]) { ListDemo f = new ListDemo("List Demo"); f.setBounds(10, 10, 300, 200); f.setVisible(true); } } import java.awt.*; import java.awt.event.*; class ShowSelectionListener implements ActionListener { private Label lab; public ShowSelectionListener(Label label_sel) { lab = label_sel; } public void actionPerformed(ActionEvent e) { // Tra ve Object ma Event da xuat hien // getSource la phuong thuc ke thua tu // java.util.EventObject Object source = e.getSource(); 123

// Nguon goc phat sinh bien co khong phai la List if (!(source instanceof List)) { return; } else { List li = (List) source; String selected = li.getSelectedItem(); lab.setText(selected); } } } KNt quS thMc thi ch !ng trnh:

V dX 5: Xy dMng 1 l7p khung chKa Dialog dng 3@ hi@n th= message giFng nh hm MessageBox trn Windows. import java.awt.*; import java.awt.event.*; class DialogDemo { public static void main(String[] args) { createMenu(); }

124

private static void createMenu() { // Tao Frame ung dung final Frame fr = new Frame(); fr.setLayout(new BorderLayout()); // Tao cac menu bar MenuBar menubar = new MenuBar(); Menu mTest = new Menu("Test"); MenuItem testDlg = new MenuItem("Test Dialog"); testDlg.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { MessageBox msgBox = new MessageBox(fr, "Here it is", "T/bao Dialog"); msgBox.show(); } } ); mTest.add(testDlg); menubar.add(mTest); fr.setMenuBar(menubar); fr.setBounds(100, 100, 300, 200); fr.setVisible(true); fr.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); 125

} } ); }// end of createmenu() } // end of class import java.awt.*; import java.awt.event.*; public class MessageBox { Dialog msgBox; /* ---------------------------------------------------------------// Contructor cua lop MessageBox // parentWindow: cua so cha // title: Tieu de cua Dialog // msg: chuoi thong bao -----------------------------------------------------------------*/ public MessageBox(Frame parentWindow, String msg, String title) { if (parentWindow == null) { Frame emptyWin = new Frame(); // Tao Modal Dialog (tham so thu 3:true) msgBox = new Dialog(emptyWin, title, true); } else { msgBox = new Dialog(parentWindow, title, true); } // Doi tuong nhan dung de trinh bay cau thong bao Label Message = new Label(msg); // Thiet lap che do trinh bay layout cho cac doi tuong. 126

msgBox.setLayout(new FlowLayout()); // Dua nhan thong bao Label vao khung chua Dialog msgBox.add(Message); // Dua nut nhan OK vao trong khung chua Dialog Button okButton = new Button("OK"); msgBox.add(okButton); // Khai bao kich thuoc cua cua so thong bao msgBox.setSize(200, 100); // Xu ly tinh huong khi nguoi dung nhan nut OK okButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { msgBox.setVisible(false); } } ); } public void show() { msgBox.show(); } } // end of class MessageBox KNt quS thMc thi ch !ng trnh:

127

Ch)*ng 5: LUlNG V T6P TIN

(STREAMS & FILES)


5.1.M7 9:u Vi8c l u tr; d; li8u trong cc biNn ch !ng trnh, cc mSng c tnh chRt tPm thli v d; li8u so mRt 3i khi biNn ra khpi t4m Snh h 1ng cBa n hoHc khi ch !ng trnh kNt thc. Files gip cho cc ch !ng trnh c th@ l u tr; mDt l ang l7n d; li8u, cmng nh c th@ l u tr; d; li8u trong mDt thli gian di ngay cS khi ch !ng trnh kNt thc. Trong ch !ng ny chng ta so tm hi@u lm thN no cc ch !ng trnh java c th@ tPo, 3\c, ghi v x? l cc files tu4n tM v cc file truy c<p nggu nhin thng qua mDt sF v dL minh h\a. X? l files l mDt vRn 3: hNt sKc c! bSn, quan tr\ng m bRt kq mDt ngn ng; l<p trnh no cmng phSi ht tra nh;ng th vi8n, hm 3@ x? l mDt sF thao tc c! bSn nhRt 3Fi v7i ki@u d; li8u file. X? l files l mDt ph4n cBa cng vi8c x? l cc luQng, gip cho mDt ch !ng trnh c th@ 3\c, ghi d; li8u trong bD nh7, trn files v trao 3J d; li8u thng qua cc kNt nFi trn mPng. Ch !ng ny so cung cRp cho chng ta nh;ng kiNn thKc c! bSn v: luQng (streams) v files: - Th vi8n cc l7p v: luQng trong java: luQng byte, luQng k tM. - XuRt nh<p Console dng luQng byte, luQng k tM. - XuRt nh<p files dng luQng k tM v luQng byte. - VRn 3: x? l files truy c<p nggu nhin dng l7p RandomAccessFile. - X? l file v th mLc dng l7p File.

128

5.2.LuSng (Streams) 5.2.1.Khi ni>m luSng TRt cS nh;ng hoPt 3Dng nh<p/xuRt d; li8u (nh<p d; li8u tb bn phm, lRy d; li8u tb mPng v:, ghi d; li8u ra 3_a, xuRt d; li8u ra mn hnh, my in, ) 3:u 3 ac quy v: mDt khi ni8m g\i l luQng (stream). LuQng l n!i c th@ sSn xuRt v tiu thL thng tin. LuQng th lng 3 ac h8 thFng xuRt nh<p trong java gen kNt v7i mDt thiNt b= v<t l. TRt cS cc luQng 3:u c chung mDt nguyn tec hoPt 3Dng ngay cS khi chng 3 ac gen kNt v7i cc thiNt b= v<t l khc nhau. V v<y cng mDt l7p, ph !ng thKc xuRt nh<p c th@ dng chung cho cc thiNt b= v<t l khc nhau. Chvng hPn cng mDt ph !ng thKc c th@ dng 3@ ghi d; li8u ra console, 3Qng thli cmng c th@ dng 3@ ghi d; li8u xuFng mDt file trn 3_a. Java hi8n thMc luQng bOng t<p hap cc l7p phn cRp trong gi java.io. Java 3=nh ngh_a hai ki@u luQng: byte v k tM (phin bSn gFc chu 3=nh ngh_a ki@u luQng byte, v sau 3 luQng k tM 3 ac thm vo trong cc phin bSn v: sau). LuQng byte (hay luQng dMa trn byte) ht tra vi8c xuRt nh<p d; li8u trn byte, th lng 3 ac dng khi 3\c ghi d; li8u nh= phn. LuQng k tM 3 ac thiNt kN ht tra vi8c xuRt nh<p d; li8u ki@u k tM (Unicode). Trong mDt vi tr lng hap luQng k tM s? dLng hi8u quS h!n luQng byte, nh ng 1 mKc h8 thFng th tRt cS nh;ng xuRt nh<p 3:u phSi qui v: byte. LuQng k tM ht tra hi8u quS chu 3Fi v7i vi8c quSn l, x? l cc k tM. 5.2.2.LuSng byte (Byte Streams) Cc luQng byte 3 ac 3=nh ngh_a dng hai l7p phn cRp. MKc trn cng l hai l7p trbu t ang InputStream v OutputStream. InputStream 3=nh ngh_a nh;ng 3Hc 3i@m chung cho nh;ng luQng nh<p byte. OutputStream m tS cch x? l cBa cc luQng xuRt byte. 129

Cc l7p con dgn xuRt tb hai l7p InputStream v OutputStream so ht tra chi tiNt t !ng Kng v7i vi8c 3\c ghi d; li8u trn nh;ng thiNt b= khc nhau. [bng chong ngap v7i hng loPt rRt nhi:u cc l7p khc nhau. [bng qu lo leng, mti khi bPn nem v;ng, s? dLng thnh thPo mDt luQng byte no 3 th bPn dn dng lm vi8c v7i nh;ng luQng cn lPi. L7p luQng byte
BufferedInputStream BufferedOutputStream ByteArrayInputStream ByteArrayOutputStream DataInputStream DataOutputStream FileInputStream FileOutputStream

ngh_a Buffered input stream Buffered output stream Input stream 3\c d; li8u tb mDt mSng byte Output stream ghi d; li8u 3Nn mDt mSng byte LuQng nh<p c nh;ng ph !ng thKc 3\c nh;ng ki@u d; li8u chusn trong java LuQng xuRt c nh;ng ph !ng thKc ghi nh;ng ki@u d; li8u chusn trong java LuQng nh<p cho php 3\c d; li8u tb file LuQng xuRt cho php ghi d; li8u xuFng file Hi8n thMc l7p trbu t ang InputStream Hi8n thMc l7p trbu t ang OutputStream L7p trbu t ang, l l7p cha cBa tRt cS cc l7p luQng nh<p ki@u Byte L7p trbu t ang, l l7p cha cBa tRt cS cc l7p xuRt nh<p ki@u Byte LuQng nh<p byte ki@u Fng (piped) th lng phSi 3 ac gen v7i mDt luQng xuRt ki@u Fng. 130

FilterInputStream FilterOutputStream InputStream

OutputStream

PipedInputStream

PipedOutputStream

LuQng nh<p byte ki@u Fng (piped) th lng phSi 3 ac gen v7i mDt luQng nh<p ki@u Fng 3@ tPo nn mDt kNt nFi trao 3Ji d; li8u ki@u Fng. LuQng xuRt c chKa ph !ng thKc print() v println() L mDt luQng nh<p ki@u Byte m ht tra thao tc trS lPi (push back) v phLc hQi thao tc 3\c mDt byte (unread) Ht tra cc thao tc 3\c, ghi 3Fi v7i file truy c<p nggu nhin. L mDt luQng nh<p 3 ac tPo nn bOng cch nFi kNt logic cc luQng nh<p khc.

PrintStream

PushbackInputStream

RandomAccessFile

SequenceInputStream

5.2.3.LuSng k tY (Character Streams) Cc luQng k tM 3 ac 3=nh ngh_a dng hai l7p phn cRp. MKc trn cng l hai l7p trbu t ang Reader v Writer. L7p Reader dng cho vi8c nh<p d; li8u cBa luQng, l7p Writer dng cho vi8c xuRt d; li8u cua luQng. Nh;ng l7p dgn xuRt tb Reader v Writer thao tc trn cc luQng k tM Unicode. L7p luQng k tM
BufferedReader

ngh_a LuQng nh<p k tM 3\c d; li8u vo mDt vng 38m. LuQng xuRt k tM ghi d; li8u t7i mDt vng 38m. LuQng nh<p 3\c d; li8u tb mDt mSng k tM LuQng xuRt ghi d; li8u tli mDt mSng k tM 131

BufferedWriter

CharArrayReader

CharArrayWriter

FileReader FileWriter FilterReader

LuQng nh<p k tM 3\c d; li8u tb file LuQng xuRt k tM ghi d; li8u 3Nn file L7p 3\c d; li8u trung gian (l7p trbu t ang) L7p xuRt trung gian trbu t ang LuQng nh<p chuy@n bytes thnh cc k tM LuQng nh<p 3Nm dng LuQng xuRt chuy@n nh;ng k tM thnh cc bytes LuQng 3\c d; li8u bOng c! chN 3 lng Fng LuQng ghi d; li8u bOng c! chN 3 lng Fng LuQng ghi vjn bSn ra thiNt b= xuRt (chKa ph !ng thKc print() v println() ) LuQng nh<p cho php 3\c v khi phLc lPi d; li8u L7p nh<p d; li8u trbu t ang LuQng nh<p 3\c d; li8u tb chuti LuQng xuRt ghi d; li8u ra chuti L7p ghi d; li8u trbu t ang

FilterWriter InputStreamReader LineNumberReader OutputStreamWriter

PipedReader PipedWriter PrintWriter

PushbackReader

Reader StringReader StringWriter Writer

5.2.4.NhAng luSng 9)Rc 9Cnh nghia tr)=c (The Predefined Streams) TRt cS cc ch !ng trnh viNt bOng java lun tM 3Dng import gi java.lang. Gi ny c 3=nh ngh_a l7p System, bao gQm mDt sF 3Hc 3i@m cBa mi tr lng run-time, n c ba biNn luQng 3 ac 3=nh ngh_a tr 7c l in, out v err, cc biNn ny l cc fields 3 ac khai bo static trong l7p System. 132

System.out: luQng xuRt chusn, mHc 3=nh l console. System.out l mDt 3Fi t ang ki@u PrintStream. System.in: luQng nh<p chusn, mHc 3=nh l bn phm. System.in l mDt 3Fi t ang ki@u InputStream. System.err: luQng lti chusn, mHc 3=nh cmng l console. System.out cmng l mDt 3Fi t ang ki@u PrintStream giFng System.out.

5.3.SE dXng luSng Byte Nh chng ta 3 biNt hai l7p InputStream v OutputStream l hai siu l7p (cha) 3Fi v7i tRt cS nh;ng l7p luQng xuRt nh<p ki@u byte. Nh;ng ph !ng thKc trong hai siu l7p ny nm ra cc lti ki@u IOException. Nh;ng ph !ng thKc 3=nh ngh_a trong hai siu l7p ny l c th@ dng trong cc l7p con cBa chng. V v<y t<p cc ph !ng thKc 3 l t<p tFi ti@u cc chKc njng nh<p xuRt m nh;ng luQng nh<p xuRt ki@u byte c th@ s? dLng. Nh;ng ph !ng thKc 3=nh ngh_a trong l7p InputStream v OutputStream Ph !ng thKc InputStream
int available( ) void close( )

ngh_a TrS v: sF luang bytes c th@ 3\c 3 ac tb luQng nh<p [ng luQng nh<p v giSi phng ti nguyn h8 thFng gen v7i luQng. Khng thnh cng so nm ra mDt lti IOException [nh dRu 1 v= tr hi8n tPi trong luQng nh<p Ki@m tra xem luQng nh<p c ht tra ph !ng thKc mark() v reset() khng. 133

void mark(int numBytes)

boolean markSupported( )

int read( ) int read(byte buffer[ ])

[\c byte tiNp theo tb luQng nh<p [\c buffer.length bytes v l u vo trong vng nh7 buffer. KNt quS trS v: sF bytes th<t sM 3\c 3 ac [\c numBytes bytes bet 34u tb 3=a chu offset v l u vo trong vng nh7 buffer. KNt quS trS v: sF bytes th<t sM 3\c 3 ac NhSy con trp 3Nn v= tr 3 ac xc 3=nh b1i vi8c g\i hm mark() l4n sau cng. NhSy qua numBytes d; li8u tb luQng nh<p [ng luQng xuRt v giSi phng ti nguyn h8 thFng gen v7i luQng. Khng thnh cng so nm ra mDt lti IOException p d; li8u tb bD 38m phSi ghi ngay xuFng luQng (nNu c) Ghi byte d; li8u chu 3=nh xuFng luQng Ghi buffer.length bytes d; li8u tb mSng chu 3=nh xuFng luQng Ghi numBytes bytes d; li8u tb v= tr offset cBa mSng chu 3=nh buffer xuFng luQng

int read(byte buffer[ ], int offset, int numBytes)

void reset( )

long skip(long numBytes)

OutputStream
void close( )

void flush( )

void write(int b) void write(byte buffer[ ])

void write(byte buffer[ ], int offset, int numBytes)

5.3.1.&ec dA li>u tf Console Tr 7c 3y, khi Java m7i ra 3li 3@ thMc hi8n vi8c nh<p d; li8u tb Console ng li ta chu dng luQng nh<p byte. V: sau th 134

chng ta c th@ dng cS luQng byte v luQng k tM, nh ng trong mDt sF tr lng hap thMc tN 3@ 3\c d; li8u tb Console ng li ta thch dng luQng ki@u k tM h!n, v l do 3!n giSn v dn bSo tr ch !ng trnh. i 3y v7i mLc 3ch minh h\a chng ta dng luQng byte thMc hi8n vi8c nh<p xuRt Console. V dX: ch !ng trnh minh h\a vi8c 3\c mDt mSng bytes tb System.in Import java.io.*; class ReadBytes { public static void main(String args[]) throws IOException { byte data[] = new byte[100]; System.out.print("Enter some characters."); System.in.read(data); System.out.print("You entered: "); for(int i=0; i < data.length; i++) System.out.print((char) data[i]); } } KNt quS thMc thi ch !ng trnh:

5.3.2.Xu\t dA li>u ra Console T !ng tM nh nh<p d; li8u tb Console, v7i phin bSn 34u tin cBa java 3@ xuRt d; li8u ra Console tS chu c th@ s? dLng 135

luQng byte. K@ tb phin bSn 1.1 (c thm luQng k tM), 3@ xuRt d; li8u ra Console c th@ s? dLng cS luQng k tM v luQng byte. Tuy nhin, cho 3Nn nay 3@ xuRt d; li8u ra Console th lng ng li ta vgn dng luQng byte. Chng ta 3 kh quen thuDc v7i ph !ng thKc print() v println(), dng 3@ xuRt d; li8u ra Console. Bn cPnh 31o chng ta cmng c th@ dng ph !ng thKc write(). V dX: minh h\a s? dLng ph !ng thKc System.out.write() 3@ xuRt k tM X ra Console import java.io.*; class WriteDemo { public static void main(String args[]) { int b; b = 'X'; System.out.write(b); System.out.write('\n'); } } KNt quS thMc thi ch !ng trnh:

5.3.3.&ec v ghi file dng luSng Byte TPo mDt luQng Byte gen v7i file chu 3=nh dng FileInputStream v FileOutputStream. [@ m1 mDt file, 3!n giSn chu c4n tPo mDt 3Fi t ang cBa nh;ng l7p ny, tn file c4n m1 l thng sF trong constructor. Khi file m1, vi8c 3\c v ghi d; li8u

136

trn file 3 ac thMc hi8n mDt cch bnh th lng thng qua cc ph !ng thKc cung cRp trong luQng. 5.3.3.1 &ec dA li>u tf file M1 mDt file 3@ 3\c d; li8u FileInputStream(String fileName) throws FileNotFoundException N u file khng t.n t&i: th nm ra FileNotFoundException [\c d; li8u: dng ph !ng thKc read() int read( ) throws IOException: 3\c tbng byte tb file v trS v: gi tr= cBa byte 3\c 3 ac. TrS v: -1 khi hNt file, v nm ra IOException khi c lti 3\c. [ng file: dng ph !ng thKc close() void close( ) throws IOException: sau khi lm vi8c xong c4n 3ng file 3@ giSi phng ti nguyn h8 thFng 3 cRp pht cho file. V dX: /* Hi6n th9 n2i dung cEa m2t file tn test.txt l$u t&iD:\test.txt */ import java.io.*; class ShowFile { public static void main(String args[]) throws IOException { int i; FileInputStream fin; try { fin = new FileInputStream(D:\\test.txt); } catch(FileNotFoundException exc) { System.out.println("File Not Found"); 137

return; } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: ShowFile File"); return; } // read bytes until EOF is encountered do { i = fin.read(); if(i != -1) System.out.print((char) i); } while(i != -1); fin.close(); } } KNt quS thMc thi ch !ng trnh:

5.3.3.2 Ghi dA li>u xuLng file M1 mDt file 3@ ghi d; li8u FileOutputStream(String fileName) throws FileNotFoundException N u file khng t&o 0$Dc: th nm ra FileNotFoundException Ghi d; li8u xuFng: dng ph !ng thKc write() void write(int byteval) throws IOException: ghi mDt byte xc 3=nh b1i tham sF byteval xuFng file, v nm ra IOException khi c lti ghi. [ng file: dng ph !ng thKc close() 138

void close( ) throws IOException: sau khi lm vi8c xong c4n 3ng file 3@ giSi phng ti nguyn h8 thFng 3 cRp pht cho file. V dX: copy nDi dung mDt file text 3Nn mDt file text khc. /* Copy nDi dung cBa mDt file text*/ import java.io.*; class CopyFile { public static void main(String args[])throws IOException { int i; FileInputStream fin; FileOutputStream fout; try { // open input file try { fin = new FileInputStream(D:\\source.txt); } catch(FileNotFoundException exc) { System.out.println("Input File Not Found"); return; } // open output file try { fout = new FileOutputStream(D:\\dest.txt); } catch(FileNotFoundException exc) { 139

System.out.println("Error Opening Output File"); return; } } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: CopyFile From To"); return; } // Copy File try { do { i = fin.read(); if(i != -1) fout.write(i); } while(i != -1); } catch(IOException exc) { System.out.println("File Error"); } fin.close(); fout.close(); } } KNt quS thMc thi ch !ng trnh: ch !ng trnh so copy nDi dung cBa file D:\source.txt v ghi vo mDt file m7i D:\dest.txt.

140

5.3.4.&ec v ghi dA li>u nhC phn Ph4n trn chng ta 3 3\c v ghi cc bytes d; li8u l cc k tM m ASCII. [@ 3\c v ghi nh;ng gi tr= nh= phn cBa cc ki@u d; li8u trong java, chng ta s? dLng DataInputStream v DataOutputStream. DataOutputStream: hi8n thMc interface DataOuput. Interface DataOutput c cc ph !ng thKc cho php ghi tRt cS nh;ng ki@u d; li8u c! s1 cBa java 3Nn luQng (theo 3=nh dPng nh= phn). Ph !ng thKc void writeBoolean (boolean val) void writeByte (int val) void writeChar (int val) void writeDouble (double val) void writeFloat (float val) void writeInt (int val) void writeLong (long val) void writeShort (int val) ngh_a Ghi xuFng luQng mDt gi tr= boolean 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt byte 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt Char 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt gi tr= Double 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt gi tr= float 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt gi tr= int 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt gi tr= long 3 ac xc 3=nh b1i val. Ghi xuFng luQng mDt gi tr= short 3 ac xc 3=nh b1i val.

Contructor: DataOutputStream(OutputStream outputStream) OutputStream: l luQng xuRt d; li8u. [@ ghi d; li8u ra file th 3Fi t ang outputStream c th@ l FileOutputStream.

141

DataInputStream: hi8n thMc interface DataInput. Interface DataInput c cc ph !ng thKc cho php 3\c tRt cS nh;ng ki@u d; li8u c! s1 cBa java (theo 3=nh dPng nh= phn). Ph !ng thKc boolean readBoolean( ) Byte readByte( ) char readChar( ) double readDouble( ) float readFloat( ) int readInt( ) Long readLong( ) short readShort( ) ngh_a [\c mDt gi tr= boolean [\c mDt byte [\c mDt Char [\c mDt gi tr= Double [\c mDt gi tr= float [\c mDt gi tr= int [\c mDt gi tr= long [\c mDt gi tr= short

Contructor: DataInputStream(InputStream inputStream) InputStream: l luQng nh<p d; li8u. [@ 3\ d; li8u tb file th 3Fi t ang InputStream c th@ l FileInputStream. V dX: dng DataOutputStream v DataInputStream 3@ ghi v 3\c nh;ng ki@u d; li8u khc nhau trn file. import java.io.*; class RWData { public static void main(String args[]) throws IOException { DataOutputStream dataOut; DataInputStream dataIn; int i = 10; double d = 1023.56; boolean b = true; try { dataOut = new DataOutputStream( new FileOutputStream("D:\\testdata")); } catch(IOException exc) 142

{ System.out.println("Cannot open file."); return; } try { System.out.println("Writing " + i); dataOut.writeInt(i); System.out.println("Writing " + d); dataOut.writeDouble(d); System.out.println("Writing " + b); dataOut.writeBoolean(b); System.out.println("Writing " + 12.2 * 7.4); dataOut.writeDouble(12.2 * 7.4); } catch(IOException exc) { System.out.println("Write error."); } dataOut.close(); System.out.println(); // Now, read them back. try { dataIn = new DataInputStream( new FileInputStream("D:\\testdata")); } catch(IOException exc) { System.out.println("Cannot open file."); return; } 143

try { i = dataIn.readInt(); System.out.println("Reading " + i); d = dataIn.readDouble(); System.out.println("Reading " + d); b = dataIn.readBoolean(); System.out.println("Reading " + b); d = dataIn.readDouble(); System.out.println("Reading " + d); } catch(IOException exc) { System.out.println("Read error."); } dataIn.close(); } } KNt quS thMc thi ch !ng trnh: D; li8u ghi xuFng file D:\\testdata

KNt quS 3\c v xuRt ra Console:

144

5.4.File truy cBp ngmu nhin (Random Access Files) Bn cPnh vi8c x? l xuRt nh<p trn file theo ki@u tu4n tM thng qua cc luQng, java cmng ht tra truy c<p nggu nhin nDi dung cBa mDt file no 3 dng RandomAccessFile. RandomAccessFile khng dgn xuRt tb InputStream hay OutputStream m n hi8n thMc cc interface DataInput, DataOutput (c 3=nh ngh_a cc ph !ng thKc I/O c! bSn). RandomAccessFile ht tra vRn 3: 3=nh v= con trp file bn trong mDt file dng ph !ng thKc seek(long newPos). V dX: minh h\a vi8c truy c<p nggu nhin trn file. Ch !ng trnh ghi 6 sF ki@u double xuFng file, rQi 3\c ln theo thK tM nggu nhin. import java.io.*; class RandomAccessDemo { public static void main(String args[]) throws IOException { double data[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double d; RandomAccessFile raf; try { raf = new RandomAccessFile("D:\\random.dat", "rw"); } catch(FileNotFoundException exc) { System.out.println("Cannot open file."); return ; }

145

// Write values to the file. for(int i=0; i < data.length; i++) { try { raf.writeDouble(data[i]); } catch(IOException exc) { System.out.println("Error writing to file."); return ; } } try { // Now, read back specific values raf.seek(0); // seek to first double d = raf.readDouble(); System.out.println("First value is " + d); raf.seek(8); // seek to second double d = raf.readDouble(); System.out.println("Second value is " + d); raf.seek(8 * 3); // seek to fourth double d = raf.readDouble(); System.out.println("Fourth value is " + d); System.out.println(); // Now, read every other value. System.out.println("Here is every other value: "); for(int i=0; i < data.length; i+=2) { raf.seek(8 * i); // seek to ith double d = raf.readDouble(); System.out.print(d + " "); } 146

System.out.println("\n"); } catch(IOException exc) { System.out.println("Error seeking or reading."); } raf.close(); } } KNt quS thMc thi ch !ng trnh:

5.5.SE dXng luSng k tY Chng ta 3 tm hi@u v s? dLng luQng byte 3@ xuRt/nh<p d; li8u. Tuy c th@ nh ng trong mDt sF tr lng hap luQng byte khng phSi l cch l t 1ng 3@ quSn l xuRt nh<p d; li8u ki@u character, v v<y java 3 3 a ra ki@u luQng character phLc vL cho vi8c xuRt nh<p d; li8u ki@u character trn luQng. MKc trn cng l hai l7p trbu t ang Reader v Writer. L7p Reader dng cho vi8c nh<p d; li8u cBa luQng, l7p Writer dng cho vi8c xuRt d; li8u cBa luQng. Nh;ng l7p dgn xuRt tb Reader v Writer thao tc trn cc luQng k tM Unicode. Nh;ng ph !ng thKc 3=nh ngh_a trong l7p trbu t ang Reader v Writer Ph !ng thKc ngh_a

147

Reader abstract void close( ) void mark(int numChars) boolean markSupported( ) int read( ) int read(char buffer[ ]) abstract int read(char buffer[ ], int offset, int numChars) boolean ready( ) void reset( ) long skip(long numChars) Writer abstract void close( ) abstract void flush( ) void write(int ch) void write(byte buffer[ ]) abstract void write(char buffer[ ], int offset, int numChars) void write(String str) void write(String str, int offset, int numChars)

[ng luQng [nh dRu v= tr hi8n tPi trn luQng Ki@m tra xem luQng c ht tra thao tc 3nh dRu mark() khng? [\c mDt k tM [\c buffer.length k tM cho vo buffer [\c numChars k tM cho vo vng 38m buffer tPi v= tr buffer[offset] Ki@m tra xem luQng c 3\c 3 ac khng? Dli con trp nh<p 3Nn v= tr 3nh dRu tr 7c 3 Bp qua numChars cBa luQng nh<p [ng luQng xuRt. C lti nm ra IOException D\n dxp luQng (buffer xuRt) Ghi mDt k tM Ghi mDt mSng cc k tM Ghi mDt ph4n cBa mSng k tM

Ghi mDt chuti Ghi mDt ph4n cBa mDt chuti k tM

148

5.5.1.NhBp Console dng luSng k tY Th lng th vi8c nh<p d; li8u tb Console dng luQng k tM th thu<n lai h!n dng luQng byte. L7p tFt nhRt 3@ 3\c d; li8u nh<p tb Console l l7p BufferedReader. Tuy nhin chng ta khng th@ xy dMng mDt l7p BufferedReader trMc tiNp tb System.in. Thay vo 3 chng ta phSi chuy@n n thnh mDt luQng k tM. [@ lm 3i:u ny chng ta dng InputStreamReader chuy@n bytes thnh k tM. [@ c 3 ac mDt 3Fi t ang InputStreamReader gen v7i System.in ta dng constructor cBa InputStreamReader.
InputStreamReader(InputStream inputStream)

TiNp theo dng 3Fi t ang InputStreamReader 3 tPo ra 3@ tPo ra mDt BufferedReader dng constructor BufferedReader.
BufferedReader(Reader inputReader)

V dX: TPo mDt BufferedReader gen v7i Keyboard BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Sau khi thMc hi8n cu l8nh trn, br l mDt luQng k tM gen v7i Console thng qua System.in. V dX: Dng BufferedReader 3\c tbng k tM tb Console. Vi8c 3\c kNt thc khi gHp dRu chRm (dRu chRm 3@ kNt thc ch !ng trnh). import java.io.*; class ReadChars { public static void main(String args[]) throws IOException { char c; BufferedReader br = newBufferedReader( 149

new InputStreamReader(System.in)); System.out.println("Nhap chuoi ky tu, gioi han dau cham."); // read characters do { c = (char) br.read(); System.out.println(c); } while(c != '.'); } } KNt quS thMc thi ch !ng trnh:

V dX: Dng BufferedReader 3\c chuti k tM tb Console. Ch !ng trnh kNt thc khi gHp chuti 3\c l chuti stop import java.io.*; class ReadLines { public static void main(String args[]) throws IOException { // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Nhap chuoi."); System.out.println("Nhap 'stop' ket thuc chuong trinh."); 150

do { str = br.readLine(); System.out.println(str); } while(!str.equals("stop")); } } KNt quS thMc thi ch !ng trnh:

5.5.2.Xu\t Console dng luSng k tY Trong ngn ng; java, bn cPnh vi8c dng System.out 3@ xuRt d; li8u ra Console (th lng dng 3@ debug ch !ng trnh), chng ta c th@ dng luQng PrintWriter 3Fi v7i cc ch !ng trnh chuyn nghi8p. PrintWriter l mDt trong nh;ng l7p luQng k tM. Vi8c dng cc l7p luQng k tM 3@ xuRt d; li8u ra Console th lng 3 ac a chuDng h!n. [@ xuRt d; li8u ra Console dng PrintWriter c4n thiNt phSi chu 3=nh System.out cho luQng xuRt. V dX: TPo 3Fi t ang PrintWriter 3@ xuRt d; li8u ra Console PrintWriter pw = new PrintWriter(System.out, true); V dX: minh h\a dng PrintWriter 3@ xuRt d; li8u ra Console import java.io.*; public class PrintWriterDemo { public static void main(String args[]) { PrintWriter pw = new PrintWriter(System.out, true); int i = 10; 151

double d = 123.67; double r = i+d pw.println("Using a PrintWriter."); pw.println(i); pw.println(d); pw.println(i + " + " + d + " = " + r); } } KNt quS thMc thi ch !ng trnh:

5.5.3.&ec/ghi File dng luSng k tY Thng th lng 3@ 3\c/ghi file ng li ta th lng dng luQng byte, nh ng 3Fi v7i luQng k tM chng ta cmng c th@ thMc hi8n 3 ac. -u 3i@m cBa vi8c dng luQng k tM l chng thao tc trMc tiNp trn cc k tM Unicode. V v<y luQng k tM l ch\n lMa tFt nhRt khi c4n l u nh;ng vjn bSn Unicode. Hai l7p luQng th lng dng cho vi8c 3\c/ghi d; li8u k tM xuFng file l FileReader v FileWriter. V dX: [\c nh;ng dng vjn bSn nh<p tb bn phm v ghi chng xuFng file tn l test.txt. Vi8c 3\c v ghi kNt thc khi ng li dng nh<p vo chuti stop. import java.io.*; class KtoD { public static void main(String args[]) throws IOException { String str; FileWriter fw; 152

BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try { fw = new FileWriter("D:\\test.txt"); } catch(IOException exc) { System.out.println("Khong the mo file."); return ; } System.out.println("Nhap ('stop' de ket thuc chuong trinh)."); do { System.out.print(": "); str = br.readLine(); if(str.compareTo("stop") == 0) break; str = str + "\r\n"; fw.write(str); } while(str.compareTo("stop") != 0); fw.close(); } } KNt quS thMc thi ch !ng trnh D; li8u nh<p tb Console:

153

D; li8u ghi xuFng file:

V dX: 3\c v hi@n th= nDi dung cBa file test.txt ln mn hnh. import java.io.*; class DtoS { public static void main(String args[]) throws Exception { FileReader fr = new FileReader("D:\\test.txt"); BufferedReader br = new BufferedReader(fr); String s; while((s = br.readLine()) != null) { System.out.println(s); } fr.close(); } } KNt quS thMc thi ch !ng trnh NDi dung cBa file test.txt:

154

KNt quS 3\c file v hi@n th= ra Console:

5.6.L=p File L7p File khng phLc vL cho vi8c nh<p/xuRt d; li8u trn luQng. L7p File th lng 3 ac dng 3@ biNt 3 ac cc thng tin chi tiNt v: t<p tin cmng nh th mLc (tn, ngy gil tPo, kch th 7c, )
java.lang.Object +--java.io.File

Cc Constructor: TPo 3Fi t ang File tb 3 lng dgn tuy8t 3Fi public File(String pathname) v dX: File f = new File(C:\\Java\\vd1.java); TPo 3Fi t ang File tb tn 3 lng dgn v tn t<p tin tch bi8t public File(String parent, String child) v dX: File f = new File(C:\\Java, vd1.java); TPo 3Fi t ang File tb mDt 3Fi t ang File khc public File(File parent, String child) v dX: File dir = new File (C:\\Java); File f = new File(dir, vd1.java);

155

MDt sF ph !ng thKc th lng gHp cBa l7p File (chi tiNt v: cc ph !ng thKc 3\c thm trong ti li8u J2SE API Specification) public String getName() public String getPath() public boolean isDirectory() public boolean isFile() public String[] list() LRy tn cBa 3Fi t ang File LRy 3 lng dgn cBa t<p tin Ki@m tra xem t<p tin c phSi l th mLc khng? Ki@m tra xem t<p tn c phSi l mDt file khng? LRy danh sch tn cc t<p tin v th mLc con cBa 3Fi t ang File 3ang xt v trS v: trong mDt mSng.

V dX: import java.awt.*; import java.io.*; public class FileDemo { public static void main(String args[]) { Frame fr = new Frame ("File Demo"); fr.setBounds(10, 10, 300, 200); fr.setLayout(new BorderLayout()); Panel p = new Panel(new GridLayout(1,2)); List list_C = new List(); list_C.add("C:\\"); File driver_C = new File ("C:\\"); String[] dirs_C = driver_C.list();

156

for (int i=0;i<dirs_C.length;i++) { File f = new File ("C:\\" + dirs_C[i]); if (f.isDirectory()) list_C.add("<DIR>" + dirs_C[i]); else list_C.add(" " + dirs_C[i]); } List list_D = new List(); list_D.add("D:\\"); File driver_D = new File ("D:\\"); String[] dirs_D = driver_D.list(); for (int i=0;i<dirs_D.length;i++) { File f = new File ("D:\\" + dirs_D[i]); if (f.isDirectory()) list_D.add("<DIR>" + dirs_D[i]); else list_D.add(" " + dirs_D[i]); } p.add(list_C); p.add(list_D); fr.add(p, BorderLayout.CENTER); fr.setVisible(true); } } KNt quS thMc thi ch !ng trnh:

157

Ch)*ng 6: L6P TRNH C$ Sn D3 LI-U

6.1.GI+I THI-U H4u hNt cc ch !ng trnh my tnh hi8n ny 3Nu t nhi:u lin quan 3Nn vi8c truy xuRt thng tin trong cc c! s1 d; li8u. Chnh v thN nn cc thao tc ht tra l<p trnh c! s1 d; li8u l chKc njng khng th@ thiNu cBa cc ngn ng; l<p trnh hi8n 3Pi, trong 3 c Java. JDBC API l th vi8n chKa cc l7p v giao di8n ht tra l<p trnh vin Java kNt nFi v truy c<p 3Nn cc h8 c! s1 d; li8u. Phin bSn JDBC API m7i nhRt hi8n nay l 3.0, l mDt thnh ph4n trong J2SE, nOm trong 2 gi th vi8n: java.sql: chKa cc l7p v giao din c! s1 cBa JDBC API. javax.sql: chKa cc l7p v giao di8n m1 rDng. JDBC API cung cRp c! chN cho php mDt ch !ng trnh viNt bOng Java c khS njng 3Dc l<p v7i cc h8 c! s1 d; li8u, c khS njng truy c<p 3Nn cc h8 c! s1 d; li8u khc nhau m khng c4n viNt lPi ch !ng trnh. JDBC 3!n giSn ha vi8c tPo v thi hnh cc cu truy vRn SQL trong ch !ng trnh. 6.2.KI^N TRC JDBC KiNn trc cBa cBa JDBC t !ng tM nh kiNn trc ODBC do Microsoft xy dMng. Theo kiNn trc ny cc thao tc lin quan 3Nn c! s1 d; li8u trong ch !ng trnh 3 ac thMc hi8n thng qua cc JDBC API. Sau 3 cc JDBC API so truy:n cc yu c4u cBa ch !ng trnh 3Nn bD quSn l trnh 3i:u khi@n JDBC, l bD ph<n c nhi8m vL lMa ch\n trnh 3i:u khi@n thch hap 3@ c th@ lm vi8c v7i c! s1 d; li8u cL th@ m ch !ng trnh muFn kNt nFi.

158

Nh v<y kiNn trc cBa JDBC gQm 2 t4ng: t4ng 34u tin l cc JDBC API, c nhi8m vL chuy@n cc cu l8nh SQL cho bD quSn l trnh 3i:u khi@n JDBC; t4ng thK 2 l cc JDBC Driver API, thMc hi8n nhi8m vL li8n h8 v7 trnh 3i:u khi@n cBa h8 quSn tru c! s1 d; li8u cL th@.

159

Hnh bn d 7i minh h\a cc l7p v giao di8n c! bSn trong JDBC API.

6.3.Cc khi ni>m c* bQn 6.3.1.JDBC Driver [@ c th@ tiNn hnh truy c<p 3Nn cc h8 quSn tr= c! s1 d; li8u s? dLng k{ thu<t JDBC, chng ta c4n phSi c trnh 3i:u khi@n JDBC cBa h8 quSn tr= CSDL m chng ta 3ang s? dLng. Trnh 3i:u khi@n JDBC l 3oPn ch !ng trnh, do chnh nh xy dMng h8 quSn tr= CSDL hoHc do nh cung Kng thK ba cung cRp, c khS njng yu c4u h8 quSn tr= CSDL cL th@ thMc hi8n cc cu l8nh SQL. Danh sch cc trnh 3i:u khi@n JDBC cho cc h8 quSn tr= CSDL khc nhau 3 ac Sun cung cRp v c<p nh<t lin tLc tPi 3=a chu: http://industry.java.sun.com/products/jdbc/drivers. Cc trnh 3i:u khi@n JDBC 3 ac phn lm 04 loPi khc nhau. LoPi 1: c tn g\i l Bridge Driver. Trnh 3i:u khi@n loPi ny kNt nFi v7i cc h8 CSDL thng qua c4u nFi ODBC. [y chnh l chnh 3i:u khi@n 160

3 ac s? dLng phJ biNn nhRt trong nh;ng ngy 34u Java xuRt hi8n. Tuy nhin, ngy nay trnh 3i:u khi@n loPi ny khng cn phJ biNn do c nhi:u hPn chN. Trnh 3i:u khi@n loPi ny lun 3 ac cung cRp km trong bD J2SE v7i tn: sun.jdbc.odbc.JdbcOdbcDriver.

LoPi 2: c tn g\i l Native API Driver. Trnh 3i:u khi@n loPi ny so chuy@n cc lli g\i cBa JDBC API sang th vi8n hm (API) t !ng Kng v7i tbng h8 CSDL cL th@. Trnh 3i:u khi8n loPi ny th lng chu do nh xy dMng h8 CSDL cung cRp. [@ c th: thi hnh ch !ng trnh m l8nh 3@ lm vi8c v7i h8 CSDL cL th@ c4n phSi 3 ac cung cRp 3i km v7i ch !ng trnh.

LoPi 3: c tn g\i l JDBC-Net Driver. Trnh 3i:u khi@n loPi ny so chuy@n cc lli g\i JDBC API sang mDt dPng chusn 3Dc l<p v7i cc h8 CSDL, v sau 3 ac chuy@n sang lli g\i cBa h8 CSDL cL th@ bwi 1 ch !ng trnh trung gian. Trnh 3i:u khi@n cBa cc nh cung Kng thK 3 th lng thuDc loPi ny. Lai thN cBa trnh 3i:u khi@n loPi 161

ny l khng c4n cung cRp m l8nh km theo v c th@ s? dLng cng mDt trnh 3i:u khi@n 3@ truy c<p 3Nn nhi:u h8 CSDL khc nhau.

LoPi 4: c tn g\i l Native Protocol Driver. Trnh 3i:u khi@n loPi ny chuy@n cc lli g\i JDBC API sang m l8nh cBa h8 CSDL cL th@. [y l cc trnh 3i:u khi@n th4n Java, c ngh_a l khng c4n phSi c m l8nh cBa h8 CSDL cL th@ khi thi hnh ch !ng trnh.

6.3.2.JDBC URL [@ c th@ kNt nFi v7i CSDL, chng ta c4n xc 3=nh nguQn d; li8u cng v7i cc thng sF lin quan d 7i dPng 1 URL nh sau: jdbc:<subprotocol>:<dsn>:<others> Trong 3: <subprotocol>: 3 ac dng 3@ xc 3=nh trnh 3i:u khi@n 3@ kNt nFi v7i CSDL. <dsn>: 3=a chu CSDL. C php cBa <dsn> phL thuDc vo tbng trnh 3i:u khi@n cL th@. <other>: cc tham sF khc V dL:

162

jdbc:odbc:dbname l URL 3@ kNt nFi v7i CSDL tn dbname s? dLng c4u nFi ODBC. jdbc:microsoft:sqlserver://hostname:1433 l URL 3@ kNt nFi v7i CSDL Microsoft SQL Server. Trong 3 hostname l tn my ci SQL Server.

6.4.K^T NgI CSDL V+I JDBC Vi8c kNt nFi v7i CSDL bOng JDBC 3 ac thMc hi8n qua hai b 7c: 3jng k trnh 3i:u khi@n JDBC; tiNp theo thMc thi ph !ng thKc getConnection() cBa l7p DriverManager. 6.4.1.&ong k trnh 9i@u khiFn Trnh 3i:u khi@n JDBC 3 ac nPp khi m bytecode cBa n 3 ac nPp vo JVM. MDt cch 3!n giSn 3@ thMc hi8n cng vi8c ny l thMc thi ph !ng thKc Class.forName(<JDBC Driver>). V dL: 3@ nPp trnh 3i:u khi@n s? dLng c4u nFi ODBC do Sun cung cRp, chng ta s? dLng cu l8nh sau Class.forName(sun.jdbc.odbc.JdbcOdbcDriver). 6.4.2.ThYc hi>n kZt nLi Sau khi 3 nPp trnh 3i:u khi@n JDBC, vi8c kNt nFi v7i CSDL 3 ac thMc hi8n v7i mDt trong cc ph !ng thKc sau trong l7p DriverManager: public static Connection getConnection(String url) throws SQLException: thMc hi8n kNt nFi v7i CSDL 3 ac yu c4u. BD quSn l trnh 3i:u khi@n so tM 3Dng lMa ch\n trnh 3i:u khi@n ph hap trong sF cc trnh 3i:u khi@n 3 3 ac nPp. public static Connection getConnection(String url, String user, String pass) throws SQLException: tiNn hnh kNt nFi t7i CSDL v7i ti khoSn user v m<t m pass. public static Connection getConnection(String url, Properties info) throws SQLException: t !ng tM hai ph !ng thKc trn ngoi ra cung cRp thm cc 163

thng tin qui 3=nh thuDc tnh kNt nFi thng qua 3Fi t ang cBa l7p Properties. KNt quS trS v: cBa cc ph !ng thKc trn l mDt 3Fi t ang cBa l7p java.sql.Connection 3 ac dng 3@ 3Pi di8n cho kNt nFi 3Nn CSDL. 6.4.3.V dX Trong ph4n v dL ny chng ta so tm hiNu cc cch khc nhau 3@ kNt nFi v7i t<p tin CSDl Access movies.mdb c mDt bSng tn Movies. BSng ny gQm cc cDt number, title, category v fomat. [@ c th@ tiNn hnh kNt nFi v7i Microsoft Access thng qua c4u

nFi ODBC sau khi 3 tPo t<p tin CSDL movies.mdb, chng ta c4n phSi tPo Data Source Name cho CSDL bOng cch vo Control Panel v ch\n ODBC Data Source.

164

TiNp theo nhRn vo nt Add, bPn so thRy hi@n th= danh sch cc trnh 3i:u khi@n CSDL hi8n c.

165

BPn ch\n Microsoft Access Driver(*.mdb) v nhRn Finish. C?a sJ cRu hnh cho t<p tin Access so xuRt hi8n v nh<p moviesDSN vo Data Source Name

BPn nhRn nt Select v ch\n t<p tin CSDL c4n tPo data source name. Sau 3 nhRn OK 3@ kNt thc.

166

Sau khi 3 hon tRt cng vi8c tPo DSN cho t<p tin movies.mdb, chng ta c th@ s? dLng 3oPn m sau 3@ tiNn hnh kNt nFi v7i t<p tin movies.mdb. import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestConnection{ public static void main(String args[]) { Connection connection = null; if( args.length != 1) { System.out.println("Syntax: java TestConnection " + "DSN"); return; } try { // load driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println("Loading the driver..."); } catch( Exception e ) { //problem load driver,class not exist e.printStackTrace( ); return; } try { String dbURL = "jdbc:odbc:" + args[0]; System.out.println("Establishing connection..."); connection = DriverManager.getConnection(dbURL,"",""); System.out.println("Connect to + connection.getCatalog() + successfully!"); // Do whatever queries or updates you want here!!! } catch( SQLException e ) { e.printStackTrace( ); } 167

finally { if( connection != null ) { try { connection.close( ); } catch( SQLException e ) { e.printStackTrace( ); } } } } } Sau khi bin d=ch 3oPn ch !ng trnh trn, chng ta c th@ thMc hi8n kNt nFi v7i CSDL bOng cch thMc thi cu l8nh: java TestConnection moviesDSN

6.5.KI`U D3 LI-U SQL V KI`U D3 LI-U JAVA Trong qu trnh thao tc v7i CSDL, chng ta so gHp phSi vRn 3: chuy@n 3Ji gi;a ki@u d; li8u trong CSDL sang ki@u d; li8u Java ht tra v ng ac lai. Vi8c chuy@n 3Ji ny 3 ac thMc hi8n nh trong 2 bSng sau.
SQL Type BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE Java Type Boolean Byte Short Int Long Float Double Double

168

DECIMAL NUMERIC CHAR VARCHAR LONGVARCHAR DATE TIME TIMESTAMP BINARY VARBINARY LONGVARBINARY BLOB CLOB ARRAY REF STRUCT

java.math.BigDecimal java.math.BigDecimal java.lang.String java.lang.String java.lang.String java.sql.Date java.sql.Time java.sql.Timestamp byte[ ] byte[ ] byte[ ] java.sql.Blob Java.sql.Clob Java.sql.Array Java.sql.Ref Java.sql.Struct

B&ng chuy0n 34i t# ki0u d5 li7u SQL sang Java


Java Type boolean byte short int long float double java.math.BigDecimal java.lang.String byte[ ] java.sql.Date java.sql.Time java.sql.Timestamp java.sql.Blob java.sql.Clob java.sql.Array java.sql.Ref SQL Type BIT TINYINT SMALLINT INTEGER BIGINT REAL DOUBLE NUMERIC VARCHAR or LONGVARCHAR VARBINARY or LONGVARBINARY DATE TIME TIMESTAMP BLOB CLOB ARRAY REF

169

java.sql.Struct

STRUCT

B&ng chuy0n 34i t# ki0u d5 li7u Java sang SQL 6.6.CC THAO TC C$ BpN TRN CSDL Cc thao tc truy vRn CSDL chu c th@ 3 ac thMc hi8n sau khi 3 c 3Fi t ang Connection, 3 ac tPo ra tb qu trnh kNt nFi vo CSDL. Chng ta s? dLng 3Fi t ang cBa l7p Connection 3@ tPo ra cc th@ hi8n cBa l7p java.sql.Statement. Sau khi tPo ra cc 3Fi t ang cBa l7p Statement chng ta c th@ thMc hi8n cc thao tc trong cc 3Fi t ang statement trn connection t !ng Kng. NDi dung trong mDt statement chnh l cc cu SQL. Cu l8nh SQL trong cc statement chu 3 ac thMc hi8n khi chng ta g?i chng 3Nn CSDL. NNu cu l8n SQL l mDt cu truy vRn nDi dung th kNt quS trS v: so l mDt th@ hi8n cBa l7p java.sql.ResultSet, ng ac lPi (cc cu l8nh thay 3Ji nDi dung CSDL) so trS v: kNt quS l mD sF nguyn. Cc 3Fi t ang cBa l7p ResultSet cho php chng ta truy c<p 3Nn kNt quS trS v: cBa cc cu truy vRn. 6.6.1.Cc l=p c* bQn java.sql.Statement Statement l mDt trong 3 l7p JDBC c! bSn dng 3@ th@ hi8n mDt cu l8nh SQL. M\i thao tc trn CSDL 3 ac thMc hi8n thng qua 3 ph !ng thKc cBa l7p Statement. Ph !ng thKc executeQuery() nh<n vo 1 tham sF l chuti nDi dung cu l8n SQL v trS v: 1 3Fi t ang ki@u ResultSet. Ph !ng thKc ny 3 ac s? dLng trong cc tr lng hap cu l8nh SQL c trS v: cc kNt quS trong CSDL. Ph !ng thKc executeUpdate() cmng nh<n vo 1 tham sF l chuti nDi dung cu l8nh SQL. Tuy nhi8n ph !ng thKc ny chu s? dLng 3 ac 3Fi v7i cc cy l8nh c<p nh<t nDi dung CSDL. KNt quS trS v: l sF dng b= tc 3Dng bwi cu l8nh SQL. 170

Ph !ng thKc execute() l tr lng hap tJng qut cBa 2 ph !ng thKc trn. Ph !ng thKc nh<n vo chuti nDi dung cu l8nh SQL. Cu l8nh SQL c th@ l cu l8nh truy vRn hoHc c<p nh<t. NNu kNt quS cBa cu l8nh l cc dng trong CSDL th ph !ng thKc trS v: gi tr= true, ng ac lPi trS v: gi tr= false. Trong tr lng hap gi tr= true, sau 3 chng ta c th@ dng ph !ng thKc getResultSet() 3@ lRy cc dng kNt quS trS v:. java.sql.ResultSet [Fi t ang resultset l cc dng d; li8u trS v: cBa cu l8nh truy vRn CSDL. L7p ny cung cRp cc ph !ng thKc 3@ rt trch cc cDt trong tbng dng kNt quS trS v:. TRt cS cc ph !ng thKc ny 3:u c dPng: type getType(int | String) Trong 3 tham sF c th@ l sF thK tM cBa cDt hoHc tn cDt c4n lRy nDi dung. TPi 1 thli 3i@m chng ta chu c th@ thao tc trn 1 dng cBa resultset. [@ thao tc trn dng tiNp theo chng ta s? dLng ph !ng thKc next(). Ph !ng thKc trS v: gi tr= true trong tr lng hap c dng tiNp theo, ng ac lPi trS v: gi tr= false.

6.6.2.V dX truy v\n CSDL public class Movie{ private String movieTitle, category, mediaFormat; private int number; public Movie(int n, String title, String cat, String format){ number = n; movieTitle = title; category = cat; mediaFormat = format; } 171

public int getNumber(){return number;} public String getMovieTitle(){return movieTitle;} public String getCategory(){return category;} public void setCategory(String c){category = c;} public String getFormat(){return mediaFormat;} public void setFormat(String f){mediaFormat = f;} public String toString(){ return number + ": " + movieTitle + " - " + category + " " + mediaFormat; } }

import java.sql.*; public class MovieDatabase{ private Connection connection; private PreparedStatement findByNumber, updateCategory; private CallableStatement findByCategory; public MovieDatabase(Connection connection) throws SQLException{ this.connection = connection; } public void showAllMovies(){ try{ Statement selectAll = connection.createStatement(); String sql = "SELECT * FROM Movies"; 172

ResultSet results = selectAll.executeQuery(sql); while(results.next()){ int number = results.getInt(1); String title = results.getString("title"); String category = results.getString(3); String format = results.getString(4); Movie movie = new Movie(number, title, category, format); System.out.println(movie.toString()); } results.close(); selectAll.close(); } catch(SQLException e){ e.printStackTrace(); } } } import java.sql.*; public class ShowMovies{ public static void main(String [] args){ String url = "jdbc:odbc:" + args[0]; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection connection = DriverManager.getConnection(url); MovieDatabase db = new MovieDatabase(connection); db.showAllMovies(); connection.close(); } catch(Exception e){ 173

e.printStackTrace(); } } } 6.6.3.V dX cBp nhBt CSDL Ph !ng thKc addMovie() bn d 7i 3 ac thm vo l7p MovieDatabase 3 3=nh ngh_a 1 v dL trn. public class MovieDatabase{ public void addMovie(Movie movie){ System.out.println(Adding movie: + movie.toString()); try{ Statement addMovie = connection.createStatement(); String sql = INSERT INTO Movies VALUES( + movie.getNumber() + , + + movie.getMovieTitle() + , + + movie.getCategory() + , + + movie.getFormat() + ); System.out.println(Executing statement: + sql); addMovie.executeUpdate(sql); addMovie.close(); System.out.println(Movie added successfully!); } catch(SQLException e){ e.printStackTrace(); } } } import java.sql.*; public class AddMovies{ public static void main(String [] args){ String url = jdbc:odbc: + args[0]; 174

System.out.println(Attempting to connect to + url); try{ System.out.println(Loading the driver...); Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); System.out.println(Establishing a connection...); Connection connection = DriverManager.getConnection(url); System.out.println(Connect to + connection.getCatalog() + a success!); MovieDatabase db = new MovieDatabase(connection); Movie [] movies = new Movie[6]; movies[0] = new Movie(1, Star Wars: A New Hope, Science Fiction, DVD); movies[1] = new Movie(2, Citizen Kane, Drama, VHS); movies[2] = new Movie(3, The Jungle Book, Children, VHS); movies[3] = new Movie(4, Dumb and Dumber, Comedy, DVD); movies[4] = new Movie(5, Star Wars: Attack of the Clones, Science Fiction, DVD); movies[5] = new Movie(6, Toy Story, Children, DVD); for(int i = 0; i < movies.length; i++){ db.addMovie(movies[i]); } System.out.println(Closing the connection...); connection.close(); } catch(Exception e){ e.printStackTrace(); } } } 175

Ti li>u tham khQo:


[1] java.sun.com [2] Herbert Schildt. Java 2. A Beginners Guide. Second Edition. McGraw-Hill - 2003. [3] Dr. Harvey M. Deitel - Paul J. Deitel. Java How to Program, 4th Ed (Deitel). Prentice Hall - 2002 [4] Simon Roberts Philip Heller Michael Ernest. Complete Java 2 Certification study guide. BPB Publications 2000. [5] Cay S. Horstmann Gary Cornell. Core Java Volum 1 Fundamentals. The Sun Microsystems press. 1997 [6] Cay S. Horstmann Gary Cornell. Core Java Volum 2 Advanced Features. The Sun Microsystems press. 1997

176

PhX lXc A: Trkc nghi>m kiZn thWc


1. a. b. c. d. Ch\n pht bi@u 3ng InputStream v OuputStream l 2 luQng d; li8u ki@u byte Reader v Writer l 2 luQng d; li8u ki@u character. Cu a) v b) 3ng TRt cS cc cu trn 3:u sai

2. Cho biNt sF byte m 3oPn ch !ng trnh sau ghi ra t<p tin temp.txt

a. b. c. d.

2 bytes 4 bytes 8 bytes 16 bytes

3. Ch\n pht bi@u 3ng a. MDt th@ hi8n cBa l7p File c th@ 3 ac dng 3@ truy c<p cc t<p tin trong th mLc hi8n hnh b. Khi mDt th@ hi8n cBa l7p File 3 ac tPo ra th mDt t<p tin t !ng Kng cmng 3 ac tPo ra trn 3_a. c. Cc th@ hi8n cBa l7p File 3 ac dng 3@ truy c<p 3Nn cc t<p tin v th mLc trn 3_a d. Cu a) v c) 3ng 177

4. Cho biNt cch tPo mDt th@ hi8n cBa InputStreamReader tb mDt th@ hi8n cBa InputStream. a. S? dLng ph !ng thKc createReader() cBa l7p InputStream b. S? dLng ph !ng thKc createReader() cBa l7p InputStreamReader c. TPo mDt th@ hi8n cBa InputStream rQi truy:n vo cho hm kh1i tPo cBa InputStreamReader d. TRt cS cc cu trn 3:u sai 5. Ch\n pht bi@u 3ng a. L7p Writer c th@ 3 ac dng 3@ ghi cc k tM c cch m ha khc nhau ra luQng xuRt b. L7p Writer c th@ 3 ac dng 3@ ghi cc k tM Unicode ra luQng xuRt c. L7p Writer c th@ 3 ac dng 3@ ghi gi tr= cc ki@u d; li8u c! s1 ra luQng xuRt d. Cu a) v b) 3ng 6. Ch\n pht bi@u 3ng: a. Cc event listeners l cc interface qui 3=nh cc ph !ng thKc c4n phSi ci 3Ht 3@ x? l cc sM kin lin quan khi sM ki8n 3 xSy ra. b. MDt event adapter l mDt cung cRp cc ci 3Ht mHc 3=nh cho cc event listener t !ng Kng c. L7p WindowAdapter 3 ac dng 3@ x? l cc sM ki8n lin quan 3Nn c?a sJ mn hnh. d. TRt cS cc cu trn 3:u 3ng 7. Khi c nhi:u component 3 ac gen cc bD leng nghe cBa cng mDt loPi sM ki8n th component no so nh<n 3 ac sM ki8n 34u tin? a. Component 34u tin 3 ac gen bD leng nghe sM ki8n b. Component cuFi cng 3 ac gen bD leng nghe sM ki8n c. Khng th@ xc 3=nh component no so nh<n tr 7c

178

d. Khng th@ c nhi:u h!n mDt bD leng nghe cho cng mDt loPi sM ki8n 8. a. b. c. d. 9. a. b. c. d. Ch\n cc component c pht sinh action event Button Label Checkbox Windows Ch\n pht bi@u 3ng Th@ hi8n cBa TextField c th@ pht sinh ActionEvent Th@ hi8n cBa TextArea c th@ pht sinh ActionEvent Th@ hi8n cBa button c th@ pht sinh ActionEvent Cu a) v c) 3ng

10. Ch\n pht bi@u 3ng a. MouseListener interface 3=nh ngh_a cc ph !ng thKc 3@ x? l sM ki8n nhRn chuDt. b. MouseMotionListener interface 3=nh ngh_a cc ph !ng thKc 3@ x? l sM ki8n nhRn chuDt. c. MouseClickListener interface 3=nh ngh_a cc ph !ng thKc 3@ x? l sM ki8n nhRn chuDt. d. TRt cS cc cu trn 3:u 3ng 11. GiS s; chng ta c th@ hi8n e cBa bD leng nghe sM ki8n TextEvent v th@ hi8n t cBa l7p TextArea. Cho biNt cch 3@ gen bD leng nghe e vo t? a. t.addTextListener(e) b. e.addTextListener(t) c. addTextListener(e,t) d. addTextListener(t,e) 12. Mn hnh sau s? dLng ki@u trnh by no?

179

a. b. c. d.

CardLayout nullLayout BorderLayout SetLayout

13. Mn hnh sau s? dLng ki@u trnh by no?

a. b. c. d.

GridLayout FlowLayout BorderLayout GridBagLayout

14. Cho mDt component comp v mDt container cont c ki@u trnh by l BorderLayout. Cho biNt cch 3@ gen comp vo v= tr 34u cBa cont. a. addTop(cont,comp) b. comp.add(North, cont) c. cont.addTop(comp) d. cont.add(comp,BorderLayout.NORTH) 15. Cho mDt component comp v mDt container cont c ki@u trnh by l FlowLayout. Cho biNt cch 3@ gen comp vo cont. 180

a. b. c. d.

cont.add(comp) comp.add(cont) cont.addComponent(comp) cont.addAllComponents()

16. Ch\n ph !ng thKc dng 3@ xc 3=nh cch trnh by cBa mDt khung chKa a. startLayout() b. initLayout() c. layoutContainer() d. setLayout() 17. Ch\n ph !ng thKc dng 3@ xc 3=nh v= tr v kch th 7c cBa cc component a. setBounds() b. setSizeAndPosition() c. setComponentSize() d. setComponent() 18. Ch\n ki@u trnh by 3@ 3Ht cc component trn khung chKa d 7i dPng bSng. a. CardLayout b. BorderLayout c. GridLayout d. FlowLayout 19. Ch\n ph !ng thKc dng 3@ gn nDi dung cho Label a. setText() b. setLabel() c. setTextLabel() d. setLabelText() 20. Ch\n pht bi@u 3ng a. TextComponent extends TextArea b. TextArea extends TextField 181

c. TextField extends TextComponent d. TextComponent extends TextField 21. Ch\n pht bi@u 3ng a. L7p CheckboxGroup dng 3@ 3=nh ngh_a c RadioButtons b. L7p RadioGroup dng 3@ 3=nh ngh_a c RadioButtons c. TRt cS cc cu trn 3:u 3ng d. TRt cS cc cu trn 3:u sai 22. Ch\n cu l8nh 3@ tPo ra TextArea c 10 dng v 20 cDt a. new TexArea(10,20) b. new TexArea(20,10) c. new TexArea(200) d. TRt cS cc cu trn 3:u sai 23. Ch\n cu l8nh 3@ tPo ra mDt danh sch gQm 5 mLc ch\n v cho php thMc hi8n ch\n nhi:u mLc cng lc a. new List(5, true) b. new List(true, 5) c. new List(5, false) d. new List(false, 5) 24. Ch\n ph !ng thKc 3@ hi8n th= Frame ln mn hnh a. setVisible() b. display() c. displayFrame() d. TRt cS cc cu trn 3:u sai 25. Ch\n pht bi@u 3ng a. L7p Class l l7p cha cBa l7p Object b. L7p Object l mDt l7p final c. M\i l7p 3: kN thba trMc tiNp hoHc gin tiNp tb l7p Object d. TRt cS cc cu trn 3:u sai

182

26. L7p no sau 3y dng 3@ thMc hi8n cc thao tc nh<p xuRt c! bSn v7i console a. System b. Math c. String d. StringBuffer 27. L7p no sau 3y khng phSi l l7p bao? a. String b. Integer c. Boolean d. Character 28. [oPn m sau sai chJ no?

a. [oPn m khng c lti b. [i:u ki8n cBa cu l8nh if phSi c ki@u boolean thay v Boolean c. Chu sF cBa cu l8nh for l int thay v Integer d. Cu b) v c) 3 29. Ph !ng thKc no sau 3y so lm cho gi tr= biNn s b= thay 3Ji a. s.concat() 183

b. s.toUpperCase() c. s.replace() d. Cu a) v b) 3ng 30. Hy cho biNt kNt xuRt cBa 3oPn ch !ng trnh sau:

a. b. c. d.

S1 S2 S1S2 S2S1

31. Ch\n pht bi@u 3ng cho hm kh1i tPo a. MDt l7p so kNt thba cc hm kh1i tPo tb l7p cha b. Trnh bin d=ch so tM 3Dng tPo hm kh1i tPo mHc 3=nh nNu l7p khng 3=nh ngh_a hm kh1i tPo c. TRt cS cc hm kh1i tPo c ki@u trS v: l void d. TRt cS cc cu trn 3:u sai 32. Cho biNt kNt xuRt cBa 3oPn ch !ng trnh sau:

184

a. b. c. d.

S1 S2 null S1S2

33. MDt ki@u d; li8u sF c dRu c 2 gi tr= +0 v -0 bOng nhau: a. [ng b. Sai c. Chu 3ng v7i ki@u sF nguyn d. Chu 3ng v7i ki@u sF thMc 34. Ch\n khai bo tn 3ng a. Big01LongStringWidthMeaninglessName b. $int c. bytes d. TRt cS cc cu trn 3:u 3ng

185

35. Ch\n khai bo 3ng cho ph !ng thKc main() a. public static void main( ) b. public void main(String[] arg) c. public static void main(String[] args) d. public static int main(String[] arg) 36. Ch\n thK tM 3ng cBa cc thnh ph4n trong mDt t<p tin nguQn a. Cu l8nh import, khai bo package, khai bo l7p. b. Khai bo package 34u tin; thK tM cBa cu l8nh import v khai bo l7p l ty . c. Khai bo package, cu l8nh import, khai bo l7p d. Cu l8nh import tr 7c tin; thK tM cBa khai bo package v khai bo l7p l ty . 37. Cho cu l8nh sau: int[] x = new int[25]; Ch\n kNt quS 3ng sau khi thi hnh cu l8nh trn a. x[24] ch a 3 ac 3=nh ngh_a b. x[25] c gi tr= 0 c. x[0] = c gi tr= null d. x.length = 25 38. Cho 3oPn m sau: 1 : class Q6{ 2: public static void main(String args[]){ 3: Holder h = new Holder(); 4: h.held = 100; 5: h.bump(h); 6: System.out.println(h.held); 7: } 8: } 9 : class Holder{ 10 : public int held; 11 : public void bump(Holder theHolder){ 186

12 : theHolder.held++; 13 : } 14 : } Gi tr= in ra cBa cu l8nh 1 dng thK 6 l: a. 0 b. 1 c. 100 d. 101 39. Cho 3oPn m sau: 1 : class Q7{ 2: public static void main(String args[]){ 3: double d = 12.3; 4: Decrementer dec = new Decrementer(); 5: dec.decrement(d); 6: System.out.println(d); 7: } 8: } 9 : class Decrementer{ 10 : public void decrement(double decMe){ 11 : decMe = decMe 1.0; 12 : } 13 : } Gi tr= in ra cBa cu l8nh 1 dng thK 6 l: a. 0.0 b. -1.0 c. 12.3 d. 11.3 40. Mi:n gi tr= cBa biNn ki@u short l: a. N phL thuDc vo n:n ph4n cKng bn d 7i b. Tb 0 3Nn 216 1 c. Tb -215 3Nn 215 1 d. Tb -231 3Nn 231 1

187

41. Mi:n gi tr= cBa biNn ki@u byte l: a. N phL thuDc vo n:n ph4n cKng bn d 7i b. Tb 0 3Nn 28 1 c. Tb -27 3Nn 27 1 d. Tb -215 3Nn 215 1 42. Cho biNt gi tr= cBa x, a v b sau khi thi hnh 3oPn m sau: 1 : int x, a = 6, b = 7; 2 : x = a++ + b++; a. x = 15, a = 7, b = 8 b. x = 15, a = 6, b = 7 c. x = 13, a = 7, b = 8 d. x = 13, a = 6, b = 7 43. Bi@u thKc no sau 3y l hap l8 a. int x = 6;x = !x; b. itn x = 6; if (!(x > 3)) {} c. int x = 6; x = ~x; d. Cu b) v c) 3ng 44. Bi@u thKc no sau 3y cho x c gi tr= d !ng: a. int x = -1; x = x >>> 5; b. int x = -1; x = x >>> 32; c. byte x = -1; x = x >>> 5; d. int x = -1; x = x >> 5; 45. Bi@u thKc no sau 3y hap l8 a. String x = Hello; int y = 9; x +=y; b. String x = Hello; int y = 9; x = x + y; c. String x = null; int y = (x != null) && (x.length() > 0) ? x.length() : 0; d. TRt cS cc cu trn 3:u 3ng 46. [oPn m no sau 3y in ra mn hnh ch; Equal: a. 188

int x = 100; float y = 100.0F; if (x == y) { System.out.println(Equal); } b. Integer x = new Integer(100); Integer y = new Integer(100); if (x == y) { System.out.println(Equal); } c. String x = 100; String y = 100; if (x == y) { System.out.println(Equal); } d. Cu a. v c. 3ng 47. Cho biNt kNt quS sau khi thi hnh ch !ng trnh sau: 1 : public class Short{ 2: public static void main(String[] args){ 3: StringBuffer s = new StringBuffer(Hello); 4: if ((s.length() > 5) && 5: s.append( there).equals(False))) 6: ;//do nothing 7: System.out.println(value is + s); 8: } 9: } a. Gi tr= xuRt l Hello b. Lti bin d=ch tPi dng 4 v 5 c. Khng c gi tr= xuRt d. Thng bo NullPointerException 189

48. Cho biNt kNt quS sau khi thMc hi8n ch !ng trnh sau: 1 : public class Xor{ 2: public static void main(String[] args){ 3: byte b = 10;//00001010 4: byte c = 15;//00001111 5: b = (byte)(b ^ c); 6: System.out.println(b contains + b); 7: } 8: } a. KNt quS l: b contains 10 b. KNt quS l: b contains 5 c. KNt quS l: b contains 250 d. KNt quS l: b contains 245 49. Cho biNt kNt quS sau khi bin d=ch v thi hnh ch !ng trnh sau: 1 : public class Conditional{ 2: public static void mai n(String[] args){ 3: int x = 4; 4: System.out.println(value is + 5: ((x > 4 ? 99.99 : 9)); 6: } 7: } a. KNt quS l: value is 99.99 b. KNt quS l: value is 9 c. KNt quS l: value is 9.0 d. Lti bin d=ch tPi dng sF 5 50. Cho biNt kNt quS cBa 3oPn m sau: 1 : int x = 3; int y = 10; 2 : System.out.println(y % x); a. 0 b. 1 c. 2 d. 3 190

51. Ch\n cu khai bo khng hap l8 a. String s; b. abstract double d; c. abstract final double hyperbolCosine(); d. TRt cS cc cu trn 3:u 3ng 52. Ch\n cu pht bi@u 3ng a. MDt l7p trbu t ang khng th@ chKa ph !ng thKc final b. MDt l7p final khng th@ chKa cc ph !ng thKc trbu t ang c. CS a) v b) 3:u 3ng d. CS a) v b) 3:u sai 53. Ch\n cch s?a t nhRt 3@ 3oPn m sau bin d=ch 3ng 3 : final class Aaa 4: { 5: int xxx; 6: void yyy(){xxx = 1;} 7: } 8: 9: 10 : class Bbb extends Aaa 11 : { 12 : final Aaa finalRef = new Aaa(); 13 : 14 : final void yyy() 15 : { 16 : System.out.println(In method yyy()); 17 : finalRef.xxx = 12345; 18 : } 19 : } a. Xa tb final 1 dng 1 b. Xo tb final 1 dng 10 c. Xa tb final 1 dng 1 v 10 d. Khng c4n phSi chunh s?a g

191

54. Ch\n pht bi@u 3ng cho ch !ng trnh sau 1 : class StaticStuff 2: { 3: static int x = 10; 4: 5: static {x += 5;} 6: 7: public static void main(String args[]) 8: { 9: System.out.pritln(x = + x); 10 : } 11 : 12 : static {x /= 5} 13 : } a. Lti bin d=ch tPi dng 5 v 12 bwi v thiNu tn ph !ng thKc v ki@u trS v: b. Ch !ng trnh chPy v cho kNt quS x = 10 c. Ch !ng trnh chPy v cho kNt quS x = 15 d. Ch !ng trnh chPy v cho kNt quS x = 3 55. Ch\n pht bi@u 3ng cho ch !ng trnh sau: 1 : class HasStatic 2: { 3: private static int x = 100; 4: 5: public static void main(String args[]) 6: { 7: HasStatic hs1 = new HasStatic(); 8: hs1.x++; 9: HasStatic hs2 = new HasStatic(); 10 : hs2.x++; 11 : hs1 = new HasStatic(); 12 : hs1.x++; 13 : HasStatic.x++; 14 : System.out.println(x = + x); 192

15 : } 16 : } a. Ch !ng trnh chPy v cho kNt quS x = 102 b. Ch !ng trnh chPy v cho kNt quS x = 103 c. Ch !ng trnh chPy v cho kNt quS x = 104 d. TRt cS cc cu trn 3:u sai 56. Cho 3oPn m sau: 1 : class SuperDuper 2: { 3: void aMethod(){} 4: } 5: 6 : class Sub extends SuperDuper 7: { 8: void aMethod(){} 9: } Hy ch\n tb kha chu phPm vi hap l8 3Kng tr 7c aMethod() 1 dng 8 a. default b. protected c. public d. TRt cS cc cu trn 3:u 3ng 1: 2: 3: 4: 5: 6: 7: 8: [oPn m sau dng cho 2 cu hpi tiNp theo package abcde; public class Bird{ protected static int referneceCount = 0; public Bird(){referenceCount++;} protected void fly(){} static int getRefCount(){return referenceCount;} }

57. Ch\n pht bi@u 3ng cho l7p Bird trn v l7p Parrot sau: 193

1 : package abcde; 2: 3 : class Parrot extends abcde.Bird{ 4: public void fly(){ 5: // 6: } 7: public int getRefCount(){ 8: return referenceCount; 9: } 10 : } a. Lti bin d=ch 1 dng 4 t<p tin Parrot.java v ph !ng thKc fly() l protected trong l7p cha v l7p Bird v Parrot nOm trong cng package b. Lti bin d=ch 1 dng 4 t<p tin Parrot.java v ph !ng thKc fly() l protected trong l7p cha v public trong l7p con. c. Lti bin d=ch 1 dng 7 t<p tin Parrot.java v ph !ng thKc getRefCount() l static trong l7p cha. d. Ch !ng trnh bin d=ch thnh cng nh ng so pht sinh Exception khi chPy nNu ph !ng thKc fly() cBa l7p Parrot khng 3 ac g\i 58. Ch\n pht bi@u 3ng cho l7p Bird trn v l7p Nightingale sau: 1 : package singers; 2: 3 : class Nightingale extends abcde.Bird{ 4: Nightingale(){ refernceCount++;} 5: 6: public static void main(String args[]){ 7: System.out.print(Before: + refernceCount); 8: Nightingale florence = new Nightingale(); 9: System.out.print(After: + refernceCount); 10 : florence.fly(); 11 : } 12 : } 194

a. KNt quS trn mn hnh l: Before: 0 After: 2 b. KNt quS trn mn hnh l: Before: 0 After: 1 c. Lti bin d=ch 1 dng 4 cBa l7p Nightingale v khng th@ overidde thnh vin static d. Lti bin d=ch 1 dng 10 cBa l7p Nightingale v ph !ng thKc fly() l protected trong l7p cha. 59. Ch\n pht bi@u 3ng a. Chu ki@u d; li8u c! s1 m7i 3 ac chuy@n 3Ji ki@u tM 3Dng; 3@ chuy@n 3Ji ki@u d; li8u cBa biNn tham chi@u phSi s? dLng php p ki@u b. Chu biNn tham chiNu m7i 3 ac chuy@n 3Ji ki@u tM 3Dng; 3@ chuy@n ki@u cBa 1 biNn ki@u c! s1 phSi s? dLng php ton p ki@u c. CS ki@u d; li8u c! s1 v ki@u tham chiNu 3:u c th@ chuy@n 3Ji tM 3Dng v p ki@u d. Php p ki@u 3Fi v7i d; li8u sF c th@ c4n php ki@m tra khi thMc thi 60. Dng l8nh no sau 3y so khng th@ bin d=ch: 1 : byte b = 5; 2 : char c = 5; 3 : short s = 55; 4 : int i = 555; 5 : float f = 555.5f; 6 : b = s; 7 : i = c; 8 : if (f > b) 9: f = i; a. Dng 3 b. Dng 4 c. Dng 5 d. Dng 6 61. Ch\n dng pht sinh lti khi bin d=ch 195

1: 2: 3: a. b. c. d.

byte b = 2; byte b1 = 3; b = b * b1; Dng 1 Dng 2 Dng 3 TRt cS cc cu trn 3:u 3ng

62. Trong 3oPn m sau ki@u d; li8u cBa biNn result c th@ l nh;ng ki@u no? 1 : byte b = 11; 2 : short s =13; 3 : result = b * ++s; a. byte, short, int, long, float, double b. boolean, byte, short, char, int, long, float, double c. byte, short, char, int, long, float, double d. int, long, float, double 63. Cho 3oPn ch !ng trnh sau: 1 : class Cruncher{ 2: void crunch(int i){ 3: System.out.println(int version): 4: } 5: void crunch(String s){ 6: System.out.println(String version); 7: } 8: 9: public static void main(String[] args){ 10 : Cruncher crun = new Cruncher(); 11 : char ch = p; 12 : crun.crunch(ch); 13 : } 14 : } a. Dng 5 so khng bin d=ch v ph !ng thKc trS v: ki@u void khng th@ overridde 196

b. Dng 12 so khng bin d=ch v khng c phin bSn no cBa ph !ng thKc crunch() nh<n vo tham sF ki@u char c. [oPn m bin d=ch 3 ac nh ng so pht sinh Exception 1 dng 12 d. Ch !ng trnh chPy v in ra kNt quS: int version 64. Ch\n pht bi@u 3ng a. Tham chiNu cBa 3Fi t ang c th@ 3 ac chuy@n 3Ji trong php gn nh ng khng th@ thMc hi8n trong php g\i ph !ng thKc b. Tham chiNu cBa 3Ji t ang c th@ 3 ac p ki@u trong php g\i ph !ng thKc nh ng khng th@ thMc hi8n trong php gn c. Tham chi@u cBa 3Fi t ang c th@ 3 ac chuy@n 3Ji trong php g\i ph !ng thKc v php gn nh ng tun theo nh;ng quy tec khc nhau d. Tham chiNu cBa 3Fi t ang c th@ 3 ac chuy@n 3Ji trong php g\i ph !ng thKc v php gn v tun theo nh;ng quy tec giFng nhau 65. Cho 3oPn m nh bn d 7i. Hy cho biNt dng no khng th@ bin d=ch 1 : Object ob = new Object(); 2 : String stringarr[] = new String[50]; 3 : Float floater = new Float(3.14f); 4 : ob = stringarr; 5 : ob = stringarr[5]; 6 : floater = ob; 7 : ob = floater; a. Dng 4 b. Dng 5 a. Dng 6 b. Dng 7

197

Animal

Mammal

Dog

Cat (implements Washer)

Racoon (implements Washer)

Swamp Thing

Hnh sau p dLng cho cc cu 66, 67, 68 66. Cho 3oPn m sau: 1 :Dog rover, fido; 2 :Animal anim; 3: 4 :rover = new Dog(); 5 :anim = rover; 6 :fido = (Dog)anim; Hy ch\n pht bi@u 3ng a. Dng 5 khng th@ bin d=ch b. Dng 6 khng th@ bin d=ch c. [oPn m bin d=ch thnh cng nh ng so pht sinh Exception tPi dng 6 d. [oPn m bin d=ch thnh cng v c th@ thi hnh 67. Cho 3oPn m sau: 1 :Cat sunflower; 2 :Washer wawa; 3 :SwampThing pogo; 4: 5 :sunflower = new Cat(); 198

6 :wawa = sunflower; 7 :pogo = (SwampThing)wawa; Hy ch\n pht bi@u 3 a. Dng 6 khng th@ bin d=ch; c4n c mDt php p ki@u 3@ chuy@n tb ki@u Cat sang ki@u Washer b. Dng 7 khng th@ bin d=ch v khng th@ p tb ki@u interface sang ki@u class c. [oPn m so d=ch v chPy nh ng php p ki@u 1 dng 7 l thba v c th@ bp di d. [oPn m bin d=ch thnh cng nh ng so pht sinh Exceptiono 1 dng 7 v ki@u l7p cBa 3Fi t ang trong biNn wawa lc thi hnh khng th@ chuy@n sang ki@u SwampThing 68. Cho 3oPn m sau 1 :Racoon rocky; 2 :SwampThing pogo; 3 :Washer w; 4: 5 :rocky = new Racooon(); 6 :w = rocky; 7 :pogo = w; a. Dng 6 so khng bin d=ch; c4n phSi c php p ki@u 3@ chuy@n tb ki@u Racoon sang ki@u Washer b. Dng 7 so khng bin d=ch; c4n c php p ki@u 3@ chuy@n tb ki@u Washer sang ki@u SwampThing c. [oPn m so bin d=ch nh ng so pht sinh Exception 1 dng 7 v chuy@n 3Ji ki@u khi thMc thi tb interface sang class l khng 3 ac php d. [oPn m so bin d=ch v so pht sinh Exception 1 dng 7 v ki@u l7p cBa w tPi thli 3i@m thMc thi khng th@ chuy@n sang ki@u SwampThing 69. Cho 3oPn m sau: 1 : for (int i = 0; i < 2; i++){ 2: for (int j = 0; j < 3; j++){ 199

3: 4: 5: 6: 7: 8: }

if (i == j){ continue; } System.out.println(i = + i + j = + j); }

Dng no so l mDt trong sF cc kNt quS 3 ac in ra? a. i = 0 j = 0 b. i = 2 j = 1 c. i = 0 j = 2 d. i = 1 j = 1 70. Cho 3oPn m sau: 1 : outer: for (int i = 0; i < 2; i++){ 2: for (int j =0; j < 3; j++){ 3: if (i == j){ 4: continue outer; 5: } 6: System.out.println(i = + i + j = + j); 7: } 8: } Dng no so l mDt trong sF cc kNt quS 3 ac in ra? a. i = 0 j = 0 b. i = 0 j = 1 c. i = 0 j = 2 d. i = 1 j = 0 71. Ch\n vng lHp 3ng a. 1 : while (int i < 7){ 2: i++; 3: System.out.println(i is + i); 4: } b. 200

5: 6: 7: 8: c. 1: 2: 3: 4: d. 1: 2: 3: 4: 5:

int i = 3; while (i){ System.out.println(i is + i); } int j = 0; for(int k = 0; j + k != 10; j++, k++){ System.out.println(j is + j + k is + k); } int j = 0; do{ System.out.println(j is + j++); if (j == 3) { continue loop;} }while (j < 10);

72. Cho biNt kNt xuRt cBa 3oPn m sau 1 : int x = 0, y = 4, z = 5; 2 : if ( x > 2){ 3: if (y < 5){ 4: System.out.println(message one); 5: } 6: else{ 7: System.out.println(message two); 8: } 9: } 10 : else if (z > 5){ 11 : System.out.println(message three); 12 : } 13 : else{ 14 : System.out.println(message four); 15 : } a. message one b. message two c. message three 201

d. message four 73. Ch\n pht bi@u 3ng cho 3oPn m sau: 1 : int j = 2; 2 : switch (j){ 3: case 2: 4: System.out.println(value is two); 5: case 2 + 1: 6: System.out.println(value is three); 7: break; 8: default: 9: System.out.println(value is + j); 10 : break; 11 : } a. [oPn m khng hap l8 bwi bi@u thKc 1 dng 5 b. BiNn j trong cRu trc switch() c th@ l mDt trong cc ki@u: byte, short, int hoHc long c. KNt xuRt cBa ch !ng trnh chu l dng: value is two d. KNt xuRt cBa ch !ng trnh chu l dng: value is two v value is three 74. Cho biNt kNt quS sau khi d=ch v thMc thi 3oPn ch !ng trnh sau: 1. import java.awt.*; 2. 3. public class Test extends Frame { 4. Test() { 5. setSize(300,300); 6. Button b = new Button(Apply); 7. add(b); 8. } 9. 10. public static void main(String args[]) { 11. Test f = new Test(); 12. f.setVisible(true); 202

13. } 14. } a) C lti bin d=ch tPi dng 11 b1i v constructor 1 dng 4 khng khai bo public. b) Ch !ng trnh bin d=ch thnh cng nh ng c so nm ra exception khi thMc thi cu l8nh 1 dng thK 7. c) Ch !ng trnh hi@n th= frame trFng. d) Ch !ng trnh hi@n th= 1 nt nhRn (Button) s? dLng font ch; mHc 3=nh cho nhn cBa Button. Button chu 3B l7n 3@ bao quanh nhn cBa n. e) Ch !ng trnh hi@n th= nt nhRn (Button) dng font ch; mHc 3=nh cho nhn nt. Nt nhRn so chon tRt cS vng hi@n th= cBa frame. 75. NNu 1 frame dng bD quSn l trnh by (layout manager) l GridLayout v khng chKa bRt kq panel hay container no khc bn trong n th tRt cS nh;ng components khi 3 a vo trong frame ny c cng kch th 7c nh nhau (ngang, d\c)? a) [ng. b) Sai. 76. NNu 1 frame dng bD quSn l trnh by (layout manager) mHc 3=nh v khng chKa bRt kq panel no bn trong th tRt cS nh;ng components bn trong frame l cng kch th 7c (ngang, d\c) ? a) [ng. b) Sai. 77. V7i bD quSn l trnh by BorderLayout khng nhRt thiNt cc vng phSi c chKa cc components. a) [ng. b) Sai. 78. BD quSn l trnh by mHc 3=nh cho 1 khung chKa ki@u Panel l: 203

a) b) c) d)

FlowLayout BorderLayout GridLayout GridBagLayout

79. MDt Container c bD quSn l trnh by l GridBagLayout th mti component so c kch th 7c bOng nhau khi thm vo khung chKa (container) ny? a) [ng b) Sai 80. BPn c th@ tPo ra c?a sJ chnh cBa Kng dLng bOng cch g\i: Frame f = new Frame(Main Frame); Nh ng khi bPn chPy ch !ng trnh th Frame khng hi@n th=. Dng no bn d 7i so lm hi@n th= Frame. a) f.setSize(300, 200); b) f.setBounds(10, 10, 500, 400); c) f.setForeground(Color.white); d) f.setVisible(true); 81. [Fi t ang no bn d 7i c th@ chKa 1 menubar (ch\n nh;ng cu 3ng) a) Panel b) ScrollPane c) Frame d) Menu 82. Sau khi tPo 1 frame bOng cu l8nh Frame f = new Frame() v tPo menu bar bOng cu l8nh MenuBar mb = new MenuBar(), lm thN no 3@ gen MenuBar tn mb vo f. a) f.add(mb) b) f.setMenu(mb) c) f.addMenu(mb) d) f.setMenuBar(mb)

204

PhX LXc B: &p n trkc nghi>m kiZn thWc


1.c; 2.b; 3.d; 4.c; 5.d; 6.d; 7.c; 8.a; 9.d; 10.a; 11.a; 12.c; 14.d; 15.a; 16.d; 17.a; 18.c; 19.a; 20.c; 21.a; 22.a; 23.a; 25.c; 26.a; 27.a; 28.d; 29.d; 30.c; 31.b; 32.a; 33.b; 34.d; 36.c; 37.d; 38.d; 39.c; 40.c; 41.c; 42.c; 43.d; 44.a; 45.d; 47.a; 48.b; 49.c; 50.b; 51.d; 52.b; 53.a; 54.d; 55.c; 56.d; 58.a; 59.c; 60.d; 61.c; 62.d; 63.d; 64.d; 65.c; 66.d; 67.d; 69.c; 70.d; 71.c; 72.d; 73.d; 74.e; 75.a; 76.b; 77.a; 78.a; 80.d; 81.c; 82.d 13.b; 24.a; 35.c; 46.d; 57.c; 68.b; 79.b;

205

You might also like