Khi xây dựng một lớp, thực chất bạn đang tạo ra một m ột kiểu dữ liệu.. Biên so n: Nguy n Th Đi u Page 29 - char charAtint index Phương thức này trả về một ký tự tại vị trí index tron
Trang 1Biên so n: Nguy n Th Đi u Page 1
M C L C
CH NG 1 GI I THI U T NG QUAN V NGÔN NG L P TRÌNH JAVA 6
1 L ch s ra đ i và phát triển c a Java 6
2 M t s đặc tr ng c a Java 6
2.1 Đ n gi n 7
2.2 H ng đ i t ng 7
2.3 Đ c l p v i h n n 7
2.4 M nh m 7
2.5 H tr l p trình đa tuy n 8
2.6 Phân tán 8
2.7 H tr Internet 8
2.8 Thông d ch 8
3 Các kiểu ng dụng Java 8
3.1 ng dụng Applets 8
3.2 ng dụng dòng l nh (console) 9
3.3 ng dụng đ họa(Window form) 9
3.4 JSP/Servlet 9
3.5 ng dụng c s d li u 9
3.6 ng dụng m ng 9
3.7 ng dụng nhi u tầng(multi-tier) 9
3.8 ng dụng cho các thi t b di đ ng 9
4 Máy o Java (JVM-Java Virtual Machine) 9
5 B công cụ phát triển JDK (Java Development Kit) 10
6 Java Core API 12
7 Ch ng trình Java đầu tiên 13
7.1 C u trúc ch ng trình Java 13
7.2 Ch ng trình Java đầu tiên 15
7.3 Biên d ch và ch y ch ng trình 15
CH NG 2 L P TRỊNH H NG Đ I T NG TRONG JAVA 17
BÀI 1 N N T NG L P TRÌNH JAVA 17
1 T khóa c a Java 17
2 Đ nh danh trong Java (tên) 19
3 Chú thích trong ch ng trình 20
4 Kiểu d li u 20
4.1 D li u kiểu nguyên thuỷ 20
4.2 Kiểu d li u tham chi u (reference) 21
4.3 Ép kiểu (Type casting) 21
5 Bi n, m ng và hằng trong Java 22
5.1 Khai báo bi n 22
5.2 Khai báo m ng 22
Trang 2Biên so n: Nguy n Th Đi u Page 2
5.2.1 M ng m t chi u 22
5.2.2 M ng nhi u chi u 26
5.3 Xâu ký tự 28
5.3.1 L p String 28
5.3.2 L p StringBuffer 31
5.3.3 L p StringTokenizer 34
BÀI 2 CÁC C U TRÚC L P TRÌNH 37
1 C u trúc r nhánh 37
1.1 Phát biểu if 37
1.2 Biểu th c đi u ki n 37
1.3 C u trúc switch 38
2 C u trúc lặp while và do-while 39
2.1 Lặp kiểm tra đi u ki n tr c 39
2.2 Lặp kiểm tra đi u ki n sau 40
3 C u trúc for 41
4 L nh break và continue 43
BÀI 3 L P TRỊNH H NG Đ I T NG TRONG JAVA 46
1 Đ nh nghĩa l p 47
1.1 Khai báo l p 47
1.1.1 Khai báo thu c tính 49
1.1.2 Khai báo ph ng th c 50
1.2 Chi ti t v khai báo m t ph ng th c 51
1.2.1 T ng quát m t ph ng th c đ c khai báo nh sau 51
1.2.2 Nh n giá tr tr v t ph ng th c 52
1.2.3 Truy n tham s cho ph ng th c 52
1.2.4 Thân c a ph ng th c 54
2 S dụng l p 54
2.1 Khai báo m t bi n, m ng đ i t ng 54
2.2 Truy xu t t i các thành phần c a l p 55
3 Ph ng th c t o dựng (constructor) 55
3.1 Công dụng 55
3.2 Cách vi t hàm t o 55
3.2.1 Đặc điểm c a ph ng th c t o dựng 55
3.2.2 Hàm t o mặc đ nh 56
3.2.3 Gọi hàm t o t hàm t o 57
3.3 Kh i kh i đầu vô danh và kh i kh i đầu tĩnh 58
3.3.1 Kh i vô danh 58
3.3.2 Kh i kh i đầu tĩnh 59
4 Dọn dẹp: k t thúc và thu rác 60
4.1 Ph ng th c finalize 60
Trang 3Biên so n: Nguy n Th Đi u Page 3
4.2 C ch gom rác c a java 61
5 T khóa this 61
6 Đi u khiển vi c truy c p đ n các thành viên c a m t l p 61
6.1 Các thành phần private 62
6.2 Các thành thành phần protected 62
6.3 Các thành phần public 63
6.4 Các thành phần có m c truy xu t gói 63
7 N p ch ng ph ng th c 63
7.1 Khái ni m v ph ng th c b i t i 63
7.2 Yêu cầu c a các ph ng th c b i t i 64
BÀI 4 K TH A (INHERITANCE), ĐA HỊNH 65
1 L p c s và l p d n xu t 65
2 Cách xây dựng l p d n xu t 65
3 Th a k các thu c tính 65
4 Th a k ph ng th c 65
5 Ph ng th c kh i t o c a l p c s 65
5.1 Tr t tự kh i đầu 68
5.2 Tr t tự dọn dẹp 68
6 Ghi đè ph ng th c (Override) 68
7 T khoá final 69
7.1 Thu c tính final 69
7.2 Đ i s final 70
7.3 Ph ng th c final 70
7.4 L p final 70
8 L p c s tr u t ng 71
9 Đa hình thái 71
BÀI 5 GIAO DI N, L P TRONG, GÓI 73
1 Giao di n (Interface) 73
1.1 Phần khai báo c a giao di n 73
1.2 Phần thân 74
1.3 Triển khai giao di n 74
2 L p trong 75
CH NG 3 L P TRỊNH ĐA TUY N(MULTITHREAD) 77
L P TRÌNH SOCKET 77
BÀI 1 L P TRỊNH ĐA TUY N 77
1 Các ki n th c liên quan 77
1.1 Ti n trình ( process) 77
1.2 Tiểu trình ( thread ) 77
1.3 H đi u hƠnh đ n nhi m, đa nhi m 77
1.4 Các tr ng thái c a ti n trình 78
Trang 4Biên so n: Nguy n Th Đi u Page 4
1.5 Mi n găng ( Critical Section ) 78
1.6 Khoá ch t (deadlock) 78
2 L p trình đa tuy n trong Java 79
2.1 L p Thread 79
2.2 Vòng đ i c a Thread 82
2.3 Lu ng ch y ngầm (deamon) 82
2.4 Giao di n Runnable 82
2.5 Thi t l p đ u tiên cho tuy n 83
2.6 Nhóm tuy n (Thread Group) 84
2.7 Đ ng b các tuy n thi hành 84
BÀI 2 L P TRÌNH SOCKET 86
1 Các ki n th c liên quan 86
1.1 Gi i thi u Socket 86
1.2 L p trình Socket trong java 87
2 Kh o sát m t s l p trong gói java.net 87
2.1 L p InetAddress 87
2.2 L p URL và URI 93
2.3 L p Socket 101
2.3.1 M t s hàm t o c a l p Socket 102
2.3.2 L y v thông tin gắn v i Socket 103
2.3.3 Đóng Socket 106
2.3.4 Truy n trong ch đ haft duplex 107
2.4 L p ServerSocket 108
2.4.1 M t s hàm t o c a l p ServerSocket 108
2.4.2 Ch p nh n vƠ đóng k t n i 111
2.5 L p DatagramSocket 113
2.6 L p DatagramPacket 113
3 TCP Socket 113
CH NG 4 CÔNG NGH JSP/SERVLET VÀ L P TRÌNH K T N I C S D LI U TRONG JAVA 133
1 Công ngh Jsp/Servlet 133
1.1 Gi i thi u 133
1.2 So sánh JSP/Servlet và CGI, ASP, ISAPI 133
1.3 Servlet là gì 134
1.3.1 Gi i pháp v i Servlet 135
1.3.2 Môi tr ng runtime c a servlet 135
1.3.3 Giao ti p vƠ vòng đ i c a servlet 136
1.3.4 Các đ i t ng request và response 137
1.3.5 D li u chia sẻ và c đ nh (Persistent and shared data) 141
1.3.6 Các thu c tính ServletContext 143
Trang 5Biên so n: Nguy n Th Đi u Page 5
1.3.7 Các thu c tính và tài nguyên yêu cầu (Request attributes and resources) 144
1.3.8 Đa tuy n (Multithreading) 145
2 Truy c p c s d li u trong java 146
2.1 T ng quan 146
2.2 Các l p trong JDBC API dùng để truy c p CSDL 146
2.2.1 M t s giao di n và l p trong gói java.sql 146
2.2.2 M t s giao di n và l p trong gói javax.sql 147
2.3 K t n i CSDL v i JDBC 147
2.4 T ng tác v i CSDL 152
2.4.1 T o ra m t JDBC Statements 152
2.4.2 S dụng đ i t ng Prepared Statements 161
2.5 Gọi th tục l u tr bằng JDBC 162
2.6 Qu n lý giao d ch 162
CH NG 5 L P TRÌNH THI T B DI Đ NG V I J2ME 163
1 Gi i thi u v J2ME và l p trình cho thi t b di đ ng 163
2 Ki n trúc c a J2ME 164
2.1 Gi i thi u các thành phần trong n n t ng J2ME 164
2.2 Đ nh nghĩa v Profile 165
3 L p trình v i J2ME 166
3.1 MIDlet ậ Vòng đ i c a m t MIDlet 166
3.2 Đ i t ng Display 169
3.3 Đ i t ng Displayable 169
3.4 Giao di n ng i dùng c p cao 169
3.4.1 Đ i t ng Display, Displayable và Screens 169
3.4.2 Thành phần Form và Items 170
3.4.3 Thành phần List, Textbox, Alert, và Ticker 171
4 Ch ng trình J2ME đầu tiên 171
4.1 Thi t l p môi tr ng l p trình 171
4.2 T o project 172
4.2.1 T o ng dụng MIDP Using Source Editor 172
4.2.2 T o ng dụng MIDP Using the Visual Mobile Designer 173
4.3 Đóng gói vƠ t i ng dụng j2me vƠo đi n tho i 174
4.3.1 Đóng gói ng dụng 174
4.3.2 T i ng dụng vào thi t b di đ ng qua Internet 177
TÀI LI U THAM KH O 179
Trang 6Biên so n: Nguy n Th Đi u Page 6
Java Core API
Ch ng trình Java đầu tiên
1 L ch s ra đ i và phát triển của Java
Năm 1991, m t nhóm kỹ s c a Sun Microsystems mu n l p trình để điểu khiển các thi t b điển t nh tivi, t l nh, máy giặt, lò n ng,… Ban đầu họ đ nh dùng C/C++ nh ng trình biên d ch c a C/C++ l i phụ thu c vào t ng lo i CPU Do đó họ bắt tay vào xây dựng m t ngôn ng ch y nhanh, gọn, hi u qu , đ c l p v i thi t b và ngôn
ng có tên là OAK (Oak- là cây s i mọc phía sau văn phòng c a nhà thi t k chính ông Jame Gosling sau này ông th y rằng đư có ngôn ng l p trình tên Oak r i, do v y nhóm thi t k quy t đ nh đ i tên, “Java” lƠ cái tên đ c chọn, Java là tên c a m t quán cafe mà nhóm thi t k java hay đ n đó u ng)
Ngôn ng l p trình Java đ c Sun Microsystems đ a ra gi i thi u vào tháng 6 năm 1995 vƠ đư nhanh chóng tr thành m t ngôn ng l p trình c a các l p trình viên chuyên nghi p Java đ c xây dựng dựa trên n n t ng c a C vƠ C++, nghĩa lƠ Java s
dụng cú pháp c a C vƠ đặc tr ng h ng đ i t ng c a C++ Java là ngôn ng v a biên
d ch v a thông d ch
Ngày nay, Java đ c s dụng r ng rãi, không ch để vi t các ng dụng trên máy
cục b hay trên m ng để xây dựng các trình đi u khiển thi t b di đ ng
Trang 7Biên so n: Nguy n Th Đi u Page 7
H tr Internet
Thông d ch
2.1 Đơn giản
Nh ng ng i thi t k mong mu n phát triển m t ngôn ng d học và quen thu c
v i đa s ng i l p trình Java tựa nh C++, nh ng đư l c b đi các đặc tr ng ph c t p, không cần thi t c a C vƠ C++ nh : thao tác con tr , thao tác đ nh nghĩa ch ng toán t
(operator overloading),… Java không s dụng l nh “goto” cũng nh file header (.h) C u trúc “struct” vƠ “union” cũng đ c lo i b kh i Java Nên có ng i b o Java lƠ “C++ “,
ngụ ý b o java lƠ C++ nh ng đư b đi nh ng th ph c t p, không cần thi t
2.2 Hướng đối tượng
Có thể nói java là ngôn ng l p trình hoƠn toƠn h ng đ i t ng, t t c trong java
đ u là sự v t, đơu đơu cũng lƠ sự v t
2.3 Độc lập với hệ nền
Mục tiêu chính c a các nhà thi t k Java lƠ đ c l p v i h n n hay còn gọi lƠ đ c
l p phần c ng và h đi u hƠnh Đơy lƠ kh năng m t ch ng trình đ c vi t t i m t máy
nh ng có thể ch y đ c b t kỳ đơu
Tính đ c l p v i phần c ng đ c hiểu theo nghĩa m t ch ng trình Java n u ch y đúng trên phần c ng c a m t họ máy nƠo đó thì nó cũng ch y đúng trên t t c các họ máy khác M t ch ng trình ch ch y đúng trên m t s họ máy cụ thể đ c gọi là phụ thu c vào phần c ng
Tính đ c l p v i h đi u hƠnh đ c hiểu theo nghĩa m t ch ng trình Java có thể
ch y đ c trên t t c các h đi u hành M t ch ng trình ch ch y đ c trên m t s h
đi u hƠnh đ c gọi là phụ thu c vào h đi u hành
Các ch ng trình vi t bằng java có thể ch y trên hầu h t các h n n mà không cần
ph i thay đ i gì, đi u nƠy đư đ c nh ng ng i l p trình đặt cho nó m t khẩu hi u ‘viết một lần, chạy mọi nơi’, đi u này là không thể có v i các ngôn ng l p trình khác
Đ i v i các ch ng trình vi t bằng C, C++ hoặc m t ngôn ng nào khác, trình biên d ch s chuyển t p l nh thành mã máy (machine code), hay l nh c a b vi x lý
Nh ng l nh này phụ thu c vào CPU hi n t i trên máy b n Nên khi mu n ch y trên lo i CPU khác, chúng ta ph i biên d ch l i ch ng trình
2.4 Mạnh mẽ
Java là ngôn ng yêu cầu chặt ch v kiểu d li u, vi c ép kiểu tự đ ng b a bãi
c a C, C++ nay đ c h n ch trong Java, đi u nƠy lƠm ch ng trình rõ rƠng, sáng và ít
l i h n Java kiểm tra lúc biên d ch và c trong th i gian thông d ch vì v y Java lo i b
Trang 8Biên so n: Nguy n Th Đi u Page 8
m t m t s lo i l i l p trình nh t đ nh Java không s dụng con tr và các phép toán con
tr Java kiểm tra t t c các truy nh p đ n m ng, chu i khi thực thi để đ m b o rằng các truy nh p đó không ra ngoƠi gi i h n kích th c
Trong các môi tr ng l p trình truy n th ng, l p trình viên ph i tự mình c p phát
b nh Tr c khi ch ng trình k t thúc thì ph i tự gi i phóng b nh đư c p V n đ n y sinh khi l p trình viên quên gi i phóng b nh đư xin c p tr c đó Trong ch ng trình Java, l p trình viên không ph i b n tơm đ n vi c c p phát b nh Quá trình c p phát, gi i phóng đ c thực hi n tự đ ng, nh d ch vụ thu nhặt nh ng đ i t ng không còn s dụng
m t cách d dƠng, h n th n a vi c đ ng b tƠi nguyên dùng chung trong Java cũng r t
đ ng gi n Đi u này là không thể có đ i v i m t s ngôn ng l p trình khác nh C/C++, pascal …
2.8 Thông dịch
Các ch ng trình Java cần đ c thông d ch tr c khi ch y, m t ch ng trình Java
đ c biên d ch thƠnh mư byte code mư đ c l p v i h n n, ch ng trình thông d ch Java
s ánh x mã byte code này lên m i n n cụ thể, đi u này khi n Java ch m ch p đi phần nào
3 Các ki ểu ng d ng Java
V i Java ta có thể xây dựng các kiểu ng dụng sau:
3.1 ng dụng Applets
Trang 9Biên so n: Nguy n Th Đi u Page 9
Applet lƠ ch ng trình Java đ c t o ra để s dụng trên Internet thông qua các trình duy t h tr Java nh IE hay Netscape Applet đ c nhúng bên trong trang Web Khi trang Web hiển th trong trình duy t, Applet s đ c t i v và thực thi t i trình duy t
Java thích h p để phát triển ng dụng nhi u l p Applet lƠ ch ng trình đ họa
ch y trên trình duy t t i máy tr m các ng dụng Web, máy tr m g i yêu cầu t i máy
ch Máy ch x lý và g i k t qu tr l i máy tr m Các Java API ch y trên máy ch ch u trách nhi m x lý t i máy ch và tr l i các yêu cầu c a máy tr m Các Java API ch y trên máy ch này m r ng kh năng c a các ng dụng Java API chuẩn Các ng dụng trên máy ch nƠy đ c gọi là các JSP/Servlet hoặc Applet t i máy ch X lý Form c a HTML là cách s dụng đ n gi n nh t c a JSP/Servlet Chúng còn có thể đ c dùng để
x lý d li u, thực thi các giao d ch vƠ th ng đ c thực thi thông qua máy ch Web
3.5 ng d ụng cơ sở dữ liệu
Các ng dụng này s dụng JDBC API để k t n i t i c s d li u Chúng có thể là Applet hay ng dụng, nh ng Applet b gi i h n b i tính b o m t
3.6 ng d ụng mạng
Java là m t ngôn ng r t thích h p cho vi c xây dựng các ng dụng m ng V i th
vi n Socket b n có thể l p trình v i hai giao th c: UDP và TCP
4 Máy o Java (JVM-Java Virtual Machine)
Trang 10Biên so n: Nguy n Th Đi u Page 10
Máy o là m t phần m m mô ph ng m t máy tính th t (máy tính o) Nó có t p
h p các l nh logic để xác đ nh các ho t đ ng c a máy tính và có m t h đi u hành o
Ng i ta có thể xem nó nh m t máy tính th t (máy tính có phần c ng o, h đi u hành o) Nó thi t l p các l p tr u t ng cho: Phần c ng bên d i, h đi u hƠnh, mư đư biên
Vi c không nh t quán c a phần c ng làm cho máy o ph i s dụng ngăn x p để
l u tr các thông tin sau:
Các “Frame” ch a các tr ng thái c a các ph ng th c
Các toán h ng c a mã bytecode
Các tham s truy n cho ph ng th c
Các bi n cục b
Khi JVM thực thi mã, m t thanh ghi cục b có tên “Program Counter” đ c s
dụng Thanh ghi này tr t i l nh đang thực hi n Khi cần thi t, có thể thay đ i n i dung thanh ghi để đ i h ng thực thi c a ch ng trình Trong tr ng h p thông th ng thì
t ng l nh m t n i ti p nhau s đ c thực thi
M t khái ni m thông dụng khác trong Java là trình biên d ch “Just In Time-JIT” Các trình duy t thông dụng nh Netscape, IE, NetBeans, Jcreator đ u có JIT bên trong để tăng t c đ thực thi ch ng trình Java Mục đích chính c a JIT là chuyển t p l nh bytecode thành mã máy cụ thể cho t ng lo i CPU Các l nh này s đ c l u tr và s
dụng m i khi gọi đ n
5 B công c phát tri ển JDK (Java Development Kit)
Sun Microsystem đ a ra ngôn ng l p trình Java qua s n phẩm có tên là Java Development Kit (JDK) Ba phiên b n chính là:
Java 1.0 - S dụng lần đầu vƠo năm 1995
Java 1.1 ậ ợ a ra năm 1997 v I nhi u u điểm h n phiên b n tr c
o JDK 1.1.4 (Sparkler) 12 tháng 9, 1997
o JDK 1.1.5 (Pumpkin) 3 tháng 12, 1997
Trang 11Biên so n: Nguy n Th Đi u Page 11
javap [options] classname
d) Công c ụ sinh tài liệu, 'javadoc'
Trang 12Biên so n: Nguy n Th Đi u Page 12
Ti n ích này cho phép ta t o ra t p HTML dựa trên các l i gi i thích trong mã
ch ng trình (phần nằm trong cặp d u /* */)
Cú pháp:
javadoc [options] sourcecodename.java
e) Chương trình tìm lỗi - Debug, 'jdb’
Cú pháp:
jdb [options] sourcecodename.java
hay
jdb -host -password [options] sourcecodename.java
f) Chương trình xem Applet , 'appletviewer‘
Cú pháp:
appletviewer [options] url
6 Java Core API
Nhơn Java API đ c thay th b i phiên b n JFC 1.1 M t s package thông dụng
Trang 13Biên so n: Nguy n Th Đi u Page 13
Package này ch a Java DataBase Connectivity (JDBC), dùng để truy xu t c s
d li u quan h nh Oracle, SQL Server,
7 Ch ng trình Java đầu tiên
7.1 Cấu trúc chương trình Java
- M i ng dụng Java bao g m m t hoặc nhi u đ n v biên d ch (m i đ n v biên
d ch là m t t p tin có phần m r ng java)
- M i đ n v biên d ch bao g m m t hoặc nhi u l p
- M i ng dụng đ c l p ph i có duy nh t m t ph ng th c main (điểm bắt đầu c a
Trang 14Biên so n: Nguy n Th Đi u Page 14
- Bên trong thân c a m i l p ta khai báo các thu c tính, ph ng th c c a l p đó, Java là ngôn ng h ng đ i t ng, do v y mã l nh ph i nằm trong l p nƠo đó M i l nh
đ u đ c k t thúc bằng d u ch m ph y “;”
- Trong ngôn ng Java, l p là m t đ n v m u có ch a d li u và mã l nh liên
quan đ n m t thực thể nƠo đó Khi xây dựng một lớp, thực chất bạn đang tạo ra một
m ột kiểu dữ liệu Kiểu d li u m i nƠy đ c s dụng để xác đ nh các bi n mƠ ta th ng
gọi lƠ “đ i t ng” Đối tượng là các thể hiện (instance) c a lớp T t c các đ i t ng
đ u thu c v m t l p có chung đặc tính và hành vi M i l p xác đ nh m t thực thể, trong khi đó m i đ i t ng là m t thể hi n thực sự
- Khi b n khai báo m t l p, b n cần xác đ nh d li u vƠ các ph ng th c c a l p
đó V c b n m t l p đ c khai báo nh sau:
… public static void main(String args[]){
//điểm bắt đầu của chương trình }
Trang 15Biên so n: Nguy n Th Đi u Page 15
l p trong đó lƠ l p trong tĩnh “static” vƠ l p trong không tĩnh “non static”
L p trong tĩnh (static)VISUAL BASIC
L p trong tĩnh đ c đ nh nghĩa v i t khoá “static” L p trong tĩnh có thể truy
nh p vào các thành phần tĩnh c a l p ph nó
L p trong không tĩnh (non static)
L p bên trong (không ph i là l p trong tĩnh) có thể truy nh p t t c các thành phần
c a l p bao nó, song không thể ng c l i
7.2 Chương trình Java đầu tiên
7.3 Biên d ịch và chạy chương trình
Chu ẩn bị môi trường:
- JRE (Java Runtime Enviroment) môi tr ng thực thi c a java, nó bao g m: JVM (Java Virtual Machine) máy o java vì các ch ng trình java đ c thông d ch và ch y trên máy o java và t p các th vi n cần thi t để ch y các ng dụng java
- B công cụ biên d ch và thông d ch JDK c a Sun Microsystem
Định nghĩa lớp có tên HelloWorld
B ắt đầu đoạn lệnh
Ph ương thức main
Xu ất ra màn hình
K ết thúc đoạn lệnh
Trang 16Biên so n: Nguy n Th Đi u Page 16
Sau khi cƠi đặt JDK (gi s th mục cƠi đặt là C:\Program files\Java) ta s nh n
Trang 17Biên so n: Nguy n Th Đi u Page 17
Đ nh nghĩa tính Đa hình (Polymorphism)
Giao di n (Interface), l p trong
BÀI 1 N N T NG L P TRÌNH JAVA
1 T khóa c ủa Java
M i ngôn ng l p trình có m t t p các t khoá, ng i l p trình ph i s dụng t khoá theo đúng nghĩa mƠ ng i thi t k ngôn ng đư đ ra, ta không thể đ nh nghĩa l i nghĩa c a các t khoá, nh s dụng nó để đặt tên bi n, hƠm
Sau đây là một số từ khoá thường gặp:
T khóa Mô t
abstract S dụng để khai báo l p, ph ng th c tr u t ng
boolean Kiểu d li u logic
break Đ c s dụng để k t thúc vòng lặp hoặc c u trúc switch
byte kiểu d li u s nguyên
case đ c s dụng trong l n switch
cast Ch a đ c s dụng (để dƠnh cho t ng lai)
catch đ c s dụng trong x lý ngo i l
char kiểu d li u ký tự
Trang 18Biên so n: Nguy n Th Đi u Page 18
class Dùng để khai báo l p
const Ch a đ c dùng
continue đ c dùng trong vòng lặp để bắt đầu m t vòng lặp m i
default đ c s dụng trong l nh switch
do đ c dùng trong vòng lặp đi u ki n sau
double kiểu d li u s thực
else kh năng lựa chọn th hai trong câu l nh if
extends ch rằng m t l p đự c k th a t m t l p khác
false Gía tr logic
final Dùng để khai báo hằng s , ph ng th c không thể ghi đè, hoặc l p không
implements ch rằng m t l p triển khai t m t giao di n
import Khai báo s dụng th vi n
instanceof kiểm tra m t đ i t ng có ph i là m t thể hi n c a l p hay không
interface s dụng để khai báo giao di n
long kiểu s nguyên
native Khai báo ph ng th c đ c vi t bằng ngôn ng biên d ch C++
Trang 19Biên so n: Nguy n Th Đi u Page 19
return Quay t ph ng th c v ch gọi nó
short kiểu s nguyên
static Dùng để khai báo bi n, thu c tính tĩnh
super Truy xu t đ n l p cha
switch l nh lựa chọn
synchronized m t ph ng th c đ c quy n truy xu t trên m t đ i t ng
this Ám ch chính l p đó
throw Ném ra ngo i l
throws Khai báo ph ng th c ném ra ngo i l
true Giá tr logic
try s dụng để bắt ngo i l
void Dùng để khai báo m t ph ng th c không tr v giá tr
while Dùng trong c u trúc lặp
B ảng 2.1 Danh mục các từ khóa trong java
2 Đ nh danh trong Java (tên)
Tên dùng để xác đ nh duy nh t m t đ i l ng trong ch ng trình Trong java tên
đ c đặt theo quy tắc sau:
- Tên nên đặt sao cho có thể mô t đ c đ i t ng trong thực t
- Gi ng nh C/C++, java có phơn bi t ch hoa ch th ng
- Trong java ta có thể đặt tên v i đ dài tuỳ ý
- Ta có thể s dụng các kí tự ti ng vi t để đặt tên
Quy ước về đặt tên trong java
Ta nên đặt tên bi n, hằng, l p, ph ng th c sao cho nghĩa c a chúng rõ rƠng, d hiểu, khoa học vƠ mang tính c l qu c t Do java có phơn bi t ch hoa, ch th ng nên ta ph i cẩn th n vƠ chú ý
Trang 20Biên so n: Nguy n Th Đi u Page 20
Sau đơy lƠ quy c đặt tên trong java (chú ý đơy ch lƠ quy c do v y không
bắt bu c ph i tuơn theo quy c nƠy):
- Đ i v i bi n và ph ng th c thì tên bao gi cũng bắt đầu bằng ký tự th ng, n u tên có nhi u t thì ghép l i thì: ghép t t c các t thành m t, ghi t đầu tiên ch
th ng, vi t hoa kí tự đầu tiên c a m i t theo sau trong tên, ví dụ area, radius, readInteger…
- Đ i v i tên l p, giao di n ta vi t hoa các kí tự đầu tiên c a m i t trong tên, ví dụ
Chú ý: trong java ta có thể đặt chú thích đơu?, cơu tr l i là: đơu có thể đặt
đ c m t d u cách thì đó có thể đặt chú thích
4 Ki ểu d li u
Các ng dụng luôn x lý d li u đầu vƠo vƠ xu t d li u k t qu đầu ra Đầu vƠo, đầu ra, vƠ k t qu c a các quá trình tính toán đ u liên quan đ n d li u Trong môi
tr ng tính toán, d li u đ c phơn l p theo các tiêu chí khác nhau phụ thu c vƠo b n
ch t c a nó m i tiêu chí, d li u có m t tính ch t xác đ nh vƠ có m t kiểu thể hi n riêng bi t
Java cung c p m t vƠi kiểu d li u Chúng đ c h tr trên t t c các n n Ví dụ,
d li u lo i int (integer) c a Java đ c thể hi n bằng 4 bytes trong b nh c a t t c các
lo i máy b t lu n đơu ch y ch ng trình Java B i v y các ch ng trình Java không cần ph i thay đ i khi ch y trên các n n khác nhau
Trong Java kiểu d li u đ c chia thƠnh hai lo i:
Các kiểu d li u nguyên th y (primitive)
Các kiểu d li u tham chi u (reference)
4.1 D ữ liệu kiểu nguyên thuỷ
Trang 21Biên so n: Nguy n Th Đi u Page 21
(ki ểu s nguyên)
short s nguyên 2 byte 16 bit -215 215-1 Short
char kiểu kí tự 2 byte 16 bit Unicode 0 Unicode 216-1 Character
Bảng 2.2 Kiểu dữ liệu nguyên thuỷ
4.2 Ki ểu dữ liệu tham chiếu (reference)
M ng (Array) T p h p các d li u cùng kiểu Ví dụ : tên sinh viên
L p (Class) T p h p các bi n vƠ các ph ng th c.Ví dụ : l p “Sinhviên” ch a
toƠn b các chi ti t c a m t sinh viên vƠ các ph ng th c thực thi trên các chi ti t đó
Giao di n
(Interface)
Là m t l p tr u t ng đ c t o ra cho phép cƠi đặt đa th a k trong Java
Bảng 2.3 Kiểu dữ liệu tham chiếu
4.3 Ép kiểu (Type casting)
Có thể b n s gặp tình hu ng khi c ng m t bi n có d ng integer v i m t bi n có
d ng float Để x lý tình hu ng nƠy, Java s dụng tính năng ép kiểu (type casting) c a
các phần m m tr c đó C, C++ Lúc nƠy m t kiểu d li u s chuyển đ i sang kiểu khác Khi s dụng tính ch t nƠy, b n cần th n trọng vì khi đi u ch nh d li u có thể b sai giá
tr
Đo n mư sau đơy thực hi n phép c ng m t giá tr d u phẩy đ ng (float) v i m t giá tr nguyên (integer)
Trang 22Biên so n: Nguy n Th Đi u Page 22
float c=34.896751f;
int b = (int)c +10;
Đầu tiên giá tr d u ph y đ ng c đ c đ i thƠnh giá tr nguyên 34 Sau đó nó đ c
c ng v i 10 vƠ k t qu lƠ giá tr 44 đ c l u vƠo b
Sự n i r ng (widening) ậ quá trình lƠm tròn s theo h ng n i r ng không lƠm
m t thông tin v đ l n c a m i giá tr Bi n đ i theo h ng n i r ng chuyển m t giá tr sang m t d ng khác có đ r ng phù h p h n so v i nguyên b n Bi n đ i theo h ng l i thu nh l i (narrowwing) lƠm m t thông tin v đ l n c a giá tr đ c chuyển đ i Chúng không đ c thực hi n khi thực hi n phép gán ví dụ trên giá tr th p phơn sau d u ph y
đ ng trong ph m vi kh i đó, không có ý nghĩa vƠ không đ c phép truy nh p t bên ngoƠi kh i
Vi c khai báo m t bi n bao g m 3 thƠnh phần: kiểu bi n, tên c a nó vƠ giá tr ban đầu đ c gán cho bi n (không bắt bu c) Để khai báo nhi u bi n ta s dụng d u phẩy để phơn cách các bi n, Khi khai báo bi n, luôn nh rằng Java phơn bi t ch th ng vƠ ch
in hoa (case -sensitive)
Cú pháp:
Datatype indentifier [=value] [, indentifier[=value]… ];
Để khai báo m t bi n nguyên (int) có tên lƠ counter dùng để l u giá tr ban đầu lƠ
1, ta có thể thực hi n phát biểu sau đơy:
int counter = 1;
Java có nh ng yêu cầu h n ch đặt tên bi n mƠ b n có thể gán giá tr vƠo Nh ng
h n ch nƠy cũng gi ng các h n ch khi đặt tên cho các đ nh danh mƠ ta đư th o lu n các phần tr c c a ch ng nƠy
5.2 Khai báo mảng
5.2.1 M ảng một chiều
a) Khai báo
Trang 23Biên so n: Nguy n Th Đi u Page 23
- Khi m ng đ c t o ra thì m i phần t c a m ng s nh n m t giá tr mặc đ nh, quy
tắc kh i t o giá tr cho các phần t c a m ng cũng chính lƠ quy tắc kh i đầu giá tr cho các thu c tính c a đ i t ng, t c là m i phần t c a m ng s nh n giá tr :
int mangInt[]=new int[100];
Ví d 2: Gi s ta có l p SinhVien đư đ c đ nh nghĩa, hưy khai báo m t m ng g m 100
đ i t ng c a l p SinhVien
SinhVien arraySinhVien[]=new SinhVien[100];
Chú ý: Lúc này m i phần t c a m ng arraySinhVien là m t con tr c a l p SinhVien và
hi n gi m i phần t c a m ng đang tr đ n giá tr null Để kh i t o t ng phần t c a
m ng ta ph i lƠm nh sau:
Trang 24Biên so n: Nguy n Th Đi u Page 24
arraySinhVien[0]=new SinhVien(“sv01”, “Nguyễn Văn An”, “Hưng Yên”);
arraySinhVien[1]=new SinhVien(“sv02”, “Nguyễn Thị Bình”, “Bắc Giang”);
…
arraySinhVien[99]=new SinhVien(“sv100”, “Đào Thị Mến”, “Hà Nam”);
Ngoài cách khai báo trên Java còn cho phép ta k t h p c khai báo và kh i gán các phần t c a m ng theo cách sau:
int a[]=new int [3];//Khai báo và t ạo ra mảng gồm 3 phần tử
Lúc này các phần t c a m ng lần l t đ c truy xu t nh sau:
- Phần t đầu tiên c a m ng là a[0]
Trang 25Biên so n: Nguy n Th Đi u Page 25
Tên_m ng.length
Ví d 1: Nh p vào m t m ng và in ra màn hình
class ArrayDemo{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Nhập số phần tử của mảng:");
int n=sc.nextInt();
//Khai báo m ảng với số phần tử bằng n
int a[]=new int[n];
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
//Nh ập số phần tử của mảng
System.out.print("Nh ập số phần tử của mảng:");
int n=sc.nextInt();
//Khai báo m ảng với số phần tử bằng n
int a[]=new int[n];
Trang 26Biên so n: Nguy n Th Đi u Page 26
- Khai báo m t con tr c a m ng 2 chi u
int[][] a; hoặc int a[][];
- Khai báo và t o ra m ng 2 chi u:
int[][] a = new int[2][3]; // Ma tr n g m 2 hàng, 3 c t
- Khai báo và kh i gán giá tr cho các phần t c a m ng 2 chi u:
int a[][]={
{1, 2, 5} //Các phần tử trên hàng thứ nhất {2, 4, 7, 9} //Các phần tử trên hàng thứ hai {1, 7} //Các ph ần tử trên hàng thứ ba
Trang 27Biên so n: Nguy n Th Đi u Page 27
a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[1][3], a[2][0], a[2][1]
b) Truy xu t đ n phần t m ng nhi u chi u
tên_m ng[ind1][ind2]
Ví d 1: Nh p vào m t ma tr n và in ra màn hình
class MaTran {
public static void main(String[] args) {
Scanner cs = new Scanner(System.in);
//Khai báo m ảng hai chiều gồm sh hàng và sc cột
float a[][] = new float[sh][sc];
//Nhập dữ liệu cho mảng hai chiều
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++) {
System.out.print("a[" + i + "," + j + "]=");
//Nhập liệu cho phần tử hàng i, cột j
a[i][j] = cs.nextInt();
}
//In mảng hai chiều ra màn hình
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++)
Trang 28Biên so n: Nguy n Th Đi u Page 28
5.3 Xâu ký tự
Vi c x lý các xâu ký tự trong Java đ c h tr b i hai l p String và StringBuffer L ớp String dùng cho những xâu ký tự bất biến, nghĩa là nh ng xâu ch
đọc vƠ sau khi đ c kh i t o giá tr thì n i dung bên trong xâu không thể thay đ i đ c
L p StringBuffer đ c s dụng đ i v i nh ng xâu ký tự đ ng, t c là có thể thay đ i
đ c n i dung bên trong c a xâu
5.3.1 L ớp String
Chu i lƠ m t dưy các ký tự L p String cung c p các ph ng th c để thao tác v i
các chu i Nó cung c p các ph ng th c kh i t o (constructor) khác nhau:
String str1 = new String( );
String str4 = new String(ch,0,2);
//str4 ch a “AB” vì 0- tính t ký tự bắt đầu, 2- là s l ng ký tự kể t ký tự bắt đầu
Toán t “+” đ c s dụng để c ng chu i khác vƠo chu i đang t n t i Toán t “+” nƠy đ c gọi nh lƠ “n i chu i” đơy, n i chu i đ c thực hi n thông qua l p
“StringBuffer” Chúng ta s th o lu n v l p nƠy trong phần sau Ph ng th c “concat( )” c a l p String cũng có thể thực hi n vi c n i chu i Không gi ng nh toán t “+”,
ph ng th c nƠy không th ng xuyên n i hai chu i t i v trí cu i cùng c a chu i đầu tiên Thay vƠo đó, ph ng th c nƠy tr v m t chu i m i, chu i m i đó s ch a giá tr
c a c hai Đi u nƠy có thể đ c gán cho chu i đang t n t i Ví dụ:
String strFirst, strSecond, strFinal;
Trang 29Biên so n: Nguy n Th Đi u Page 29
- char charAt(int index ) Phương thức này trả về một ký tự tại vị trí index trong chuỗi
Ví dụ:
String name = new String(“Java Language”);
char ch = name.charAt(5);
Bi n “ch” ch a giá tr “L”, t đó v trí các s bắt đầu t 0
- boolean startsWith(String s ) Phương thức này trả về giá trị kiểu logic (Boolean), phụ
thuộc vào chuỗi có bắt đầu với một chuỗi con cụ thể nào đó không
Ví dụ:
String strname = “Java Language”;
boolean flag = strname.startsWith(“Java”);
Bi n “flag” ch a giá tr true
- boolean endsWith(String s ) Phương thức này trả về một giá trị kiểu logic (boolean), phụ thuộc vào chuỗi kết thúc bằng một chuỗi con nào đó không
Ví dụ:
String strname = “Java Language”;
boolean flag = strname.endsWith(“Java”);
Bi n “flag” ch a giá tr false
- String copyValueOf( )
Ph ng th c nƠy tr v m t chu i đ c rút ra t m t m ng ký tự đ c truy n nh
m t đ i s Ph ng th c nƠy cũng l y hai tham s nguyên Tham s đầu tiên ch đ nh v trí t n i các ký tự ph i đ c rút ra, vƠ tham s th hai ch đ nh s ký tự đ c rút ra t
m ng Ví dụ:
char name[] = {‘L’,’a’,’n’,’g’,’u’,’a’,’g’,’e’};
String subname = String copyValueOf(name,5,2);
Bơy gi bi n “subname” ch a chu i “ag”
- char [] toCharArray( )
Ph ng th c nƠy chuyển chu i thƠnh m t m ng ký tự Ví dụ:
String text = new String(“Hello World”);
char textArray[] = text.toCharArray( );
- int indexOf(String sunString )
Ph ng th c nƠy tr v th tự c a m t ký tự nƠo đó, hoặc m t chu i trong ph m vi
m t chu i Các cơu l nh sau biểu di n các cách khác nhau c a vi c s dụng hƠm
String day = new String(“Sunday”);
Trang 30Biên so n: Nguy n Th Đi u Page 30
int index1 = day.indexOf(‘n’);
//chứa 2
int index2 = day.indexOf(‘z’,2);
//chứa –1 nếu “z” không tìm thấy tại vị trí 2
int index3 = day.indexOf(“Sun”);
//chứa mục 0
- String toUpperCase( )
Ph ng th c nƠy tr v ch hoa c a chu i
String lower = new String(“good morning”);
Ph ng th c nƠy cắt b kho ng trắng hai đầu chu i Hưy th đo n mư sau để th y
sự khác nhau tr c vƠ sau khi cắt b kho ng trắng
String space = new String(“ Spaces “);
System.out.println(space);
System.out.println(space.trim()); //Sau khi cắt bỏ khoảng trắng
- boolean equals(String s)
Ph ng th c nƠy so sánh n i dung c a hai đ i t ng chu i
String name1 = “Java”, name2 = “JAVA”;
boolean flag = name1.equals(name2);
Bi n “flag” ch a giá tr false
- Các phương th c valueOf đ c n p ch ng để cho phép chuyển m t giá tr thƠnh xơu
static String valueOf(Object obj)//Chuy ển một đối tượng thành xâu, bẳng cách gọi đến phương thức toString của đối tượng obj
static String valueOf(char[] characters)//Chuyển m ng các ký tự thành xâu
static String valueOf(boolean b)//Chuy ển một giá trị logic thành xâu, xâu nhận được là
“true” hoặc “false” tương ứng với giá trị true hoặc false của b
static String valueOf(char c)//Chuy ển kí tự thành xâu
static String valueOf(int i)//chuy ển một số nguyên thành xâu
Trang 31Biên so n: Nguy n Th Đi u Page 31
static String valueOf(long l)//Chuy ển một giá trị long thành xâu
static String valueOf(float f)//chuy ển một giá trị float thành xâu
static String valueOf(double d)//chuy ển một giá trị double thành xâu
5.3.2 L ớp StringBuffer
L p StringBuffer cung c p các ph ng th c khác nhau để thao tác m t đ i t ng
d ng chu i Các đ i t ng c a l p nƠy r t m m dẻo, đó lƠ các ký tự vƠ các chu i có thể
đ c chèn vƠo gi a đ i t ng StringBuffer, hoặc n i thêm d li u vƠo t i v trí cu i L p nƠy cung c p nhi u ph ng th c kh i t o Ch ng trình sau minh ho cách s dụng các
ph ng th c kh i t o khác nhau để t o ra các đ i t ng c a l p nƠy
class StringBufferCons{
public static void main(String args[]){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer(20);
StringBuffer s3 = new StringBuffer(“StringBuffer”);
System.out.println(“s3 = “+ s3);
System.out.println(s2.length()); //chứa 0 System.out.println(s3.length()); //chứa 12 System.out.println(s1.capacity()); //chứa 16 System.out.println(s2.capacity()); //chứa 20
Dung l ng c a StringBuffer có thể thay đ i v i ph ng th c “ensureCapacity()”
Đ i s int đư đ c truy n đ n ph ng th c nƠy, vƠ dung l ng m i đ c tính toán nh sau:
NewCapacity = OldCapacity * 2 + 2(CONG THUC)
Tr c khi dung l ng c a StringBuffer đ c đặt l i, đi u ki n sau s đ c kiểm tra:
N u dung l ng(NewCapacity) m i l n h n đ i s đ c truy n cho ph ng th c
“ensureCapacity()”, thì dung l ng m i (NewCapacity) đ c đặt
N u dung l ng m i nh h n đ i s đ c truy n cho ph ng th c
“ensureCapacity()”, thì dung l ng đ c đặt bằng giá tr tham s truy n vƠo
Trang 32Biên so n: Nguy n Th Đi u Page 32
Ch ng trình sau minh ho dung l ng đ c tính toán vƠ đ c đặt nh th nƠo
class Test{
public static void main(String args[]){
StringBuffer s1 = new StringBuffer(5);
System.out.println(“Dung lượng của bộ nhớ đệm = “+s1.capacity());
Thi t l p dung l ng c a s1 đ n 12 =(5*2+2) b i vì dung l ng truy n vƠo lƠ 8
nh h n dung l ng đ c tính toán lƠ 12
Ph ng th c nƠy có hai tham s Tham s đầu tiên lƠ v trí chèn Tham s th hai
có thể lƠ m t chu i, m t ký tự (char), m t giá tr nguyên (int), hay m t giá tr s thực
Trang 33Biên so n: Nguy n Th Đi u Page 33
(float) đ c chèn vƠo V trí chèn s l n h n hay bằng 0, vƠ nh h n hay bằng chi u dƠi
c a đ i t ng StringBuffer B t kỳ đ i s nƠo, tr ký tự hoặc chu i, đ c chuyển sang chu i vƠ sau đó m i đ c chèn vƠo Ví dụ:
StringBuffer str = new StringBuffer(“Java sion”);
StringBuffer str = new StringBuffer(“James Gosling”);
char letter = str.charAt(6); //chứa “G”
- void setCharAt(int index, char value)
Ph ng th c nƠy đ c s dụng để thay th ký tự trong m t StringBuffer bằng m t
Trang 34Biên so n: Nguy n Th Đi u Page 34
StringBuffer str = new StringBuffer(“Leopard”);
char ch[] = new char[10];
StringBuffer str = new StringBuffer(“devil”);
StringBuffer strrev = str.reverse();
Bi n “strrev” ch a “lived”
5.3.3 L ớp StringTokenizer
M t l p StringTokenizer có thể s dụng để tách m t chu i thƠnh các phần t (token) nh h n Ví dụ, m i t trong m t cơu có thể coi nh lƠ m t token Tuy nhiên, l p StringTokenizer đư đi xa h n vi c phơn tách các t trong cơu Để tách ra các thƠnh token
ta có thể tuỳ bi n ch ra m t t p d u phơn cách các token khi kh i t o đ i t ng StringTokenizer N u ta không ch ra t p d u phơn cách thì mặc đ nh lƠ d u trắng (space, tab, ) Ta cũng có thể s dụng t p các toán t toán học (+, *, /, vƠ -) trong khi phân tích
m t biểu th c
StringTokenizer(String) T o ra m t đ i t ng StringTokenizer m i dựa
trên chu i đ c ch đ nh
StringTokenizer(String, String) T o ra m t đ i t ng StringTokenizer m i dựa
trên (String, String) chu i đ c ch đ nh và m t
đ c tr v nh các token hay không
Bảng 2.4 Tóm tắt 3 phương thức tạo dựng của lớp StringTokenizer
Các ph ng th c t o dựng trên đ c minh họa trong các ví dụ sau:
StringTokenizer st1 = new StringTokenizer(“A Stream of words”);
StringTokenizer st2 = new StringTokenizer(“4*3/2-1+4”, “+-*/”, true);
StringTokenizer st3 = new StringTokenizer(“aaa,bbbb,ccc”, “,”);
Trang 35Biên so n: Nguy n Th Đi u Page 35
Trong cơu l nh đầu tiên, StringTokenizer c a “st1” s đ c xơy dựng bằng cách
s dụng các chu i đ c cung c p vƠ d u phơn cách mặc đ nh D u phơn cách mặc đ nh lƠ kho ng trắng, tab, các ký tự xu ng dòng Các d u phơn cách nƠy thì ch s dụng khi phơn tách văn b n, nh v i “st1”
Cơu l nh th hai trong ví dụ trên xơy dựng m t đ i t ng StringTokenizer cho các biểu th c toán học bằng cách s dụng các ký hi u *, +, /, vƠ -
Cơu l nh th 3, StringTokenizer c a “st3” s dụng d u phẩy nh m t d u phơn cách
L p StringTokenizer cƠi đặt giao di n Enumeration Vì th , nó bao g m các
ph ng th c hasMoreElements() vƠ nextElement() Các ph ng th c có thể s dụng c a
l p StringTokenizer đ c tóm tắt trong b ng sau:
nextToken(String) Thay đ i b d u phân cách bằng chu i đ c ch đ nh, và sau
đó tr v token k ti p trong chu i
Bảng 2.5 Tóm tắt ác phương thức có thể sử dụng của lớp StringTokenizer
Hưy xem xét ch ng trình đư cho bên d i Trong ví dụ nƠy, hai đ i t ng StringTokenizer đư đ c t o ra Đầu tiên, “st1” đ c s dụng để phơn tách m t biểu th c toán học Th hai, “st2” phơn tách m t dòng c a các tr ng đ c phơn cách b i d u phẩy C hai tokenizer, ph ng th c hasMoreTokens() vƠ nextToken() đ c s dụng đ duy t qua t p các token, vƠ hiển th các token
import java.util.*;
public class StringTokenizerImplementer{
public static void main(String args[]){
// đặt một biểu thức toán học và tạo một tokenizer cho chuỗi đó
Trang 36Biên so n: Nguy n Th Đi u Page 36
String mathExpr = “4*3+2/4”;
StringTo kenizer st1 = new StringTokenizer(mathExpr,”*+/-“, true);
//trong khi vẫn còn các token, hiển thị
System.out.println(“Tokens of mathExpr: “);
while(st1.hasMoreTokens())
System.out.println(st1.nextToken());
//tạo một chuỗi của các trường được phân cách bởi dấu phẩy và tạo
//một tokenizer cho chuỗi
String commas = “field1,field2,field3,and field4”;
StringTokenizer st2 = new StringTokenizer(commas,”,”,false);
//trong khi vẫn còn token, hiển thị
Trang 37Biên so n: Nguy n Th Đi u Page 37
BÀI 2 CÁC C U TRÚC L P TRÌNH
Ch ng trình lƠ m t dưy các l nh đ c b trí thực hi n theo m t trình tự nƠo đó,
nh ng đôi khi ta mu n đi u khiển lu ng thực hi n c a ch ng trình tuỳ thu c vƠo đi u
ki n gì đó Ngôn ng l p trình java cung c p m t s phát biểu cho phép ta đi u khiển
lu ng thực hi n c a ch ng trình, chúng đ c li t kê trong b ng sau:
Ki ểu l nh T khoá
Lặp while, do-while, for
Quy t đ nh if-else, switch-case
1.2 Bi ểu th c điều kiện
Toán t đi u ki n lƠ m t lo i toán t đặc bi t vì nó g m ba thƠnh phần c u thƠnh biểu th c đi u ki n hay nói cách khác toán t đi u ki n lƠ toán t 3 ngôi
đúng sai
Statement2
Trang 38Biên so n: Nguy n Th Đi u Page 38
Trong đó:
- biểu th c 1: Biểu th c 1 lƠ m t biểu th c logic T c lƠ nó tr tr v giá tr True
hoặc False
- biểu th c 2: Giá tr tr v n u biểu th c 1 nh n giá True
- biểu th c 3: Giá tr tr v n u biểu th c 1 nh n giá tr False
Chú ý: Kiểu giá tr c a biểu th c 2 vƠ biểu th c 3 ph i t ng thích v i nhau
Ví dụ: Đo n biểu th c đi u ki n sau tr v giá tr “a lƠ s chẵn” n u nh giá tr c a bi n a
lƠ s chẵn, ng c l i tr v giá tr “a lƠ s lẻ” n u nh giá tr c a bi n a lƠ s lẻ
String result=a%2==0 ? “a là số chẵn” : “a là số lẻ”;
Trang 39Biên so n: Nguy n Th Đi u Page 39
- biểu_th c ph i là m t biểu th c có kiểu char, byte, short, int nh ng không thể là
kiểu long, n u biểu_th c có kiểu khác v i các kiểu li t kê trên thì java s đ a ra m t thông báo l i
- N u biểu_th c bằng giá tr c a gt_i thì các l nh t l nh i cho đ n l nh n n u không có default (l nh n+1 n u có default) s đ c thực hi n
- Câu l nh break thoát ra kh i c u trúc switch
S đ kh i mô t sự ho t đ ng c a c u trúc switch trong tr ng h p có l nh break:
2 C u trúc l ặp while và do-while
2.1 Lặp kiểm tra điều kiện trước
Ta có thể s dụng c u trúc while để thực thi lặp đi lặp l i m t l nh hoặc m t kh i
l nh trong khi đi u ki n đúng
Trang 40Biên so n: Nguy n Th Đi u Page 40
Tr c tiên phát biểu while s tính giá tr c a biểu th c logic, n u giá tr c a biểu th c logic lƠ đúng thì cơu l nh trong thân c a while s đ c thực hi n, sau khi thực hi n xong
nó tính l i giá tr c a biểu th c logic, n u giá tr đúng nó l i ti p tục thực hi n l nh trong thơn while cho đ n khi giá tr c a biểu th c sai
Ví d :
public class WhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " +
"encounter the letter 'g'.";
StringBuffer copyToMe = new StringBuffer();
int i = 0;
char c = copyFromMe.charAt(i);
while (c! = 'g') { copyToMe.append(c);
c = copyFromMe.charAt(++i);
} System.out.println(copyToMe);
} }
Chú ý:
- Biểu th c bên trong cặp ngoặc tròn ph i là m t biểu th c logic ( biểu th c tr v giá tr true hoặc false)
- Biểu th c đi u ki n ph i nằm trong cặp ngoặc tròn
- Sau t khoá while ta ch có thể đặt đ c duy nh t m t l nh, do v y để có thể thực hi n nhi u tác vụ sau while ta ph i bao chúng trong m t kh i l nh
- Bên trong thân c a vòng lặp while ta nên có l nh lƠm thay đ i giá tr c a biểu th c logic, n u không chúng ta s r i vƠo vòng lặp vô h n
- Câu l nh trong thân c u trúc while có thể không đ c thực hi n lần nào (do biểu th c lôgic ban đầu có giá tr false )
2.2 L ặp kiểm tra điều kiện sau
L nh
sai