ngai ngừ lập trình và nêu cách xây dựng, tô chức lóp các đỏi tượng trong các chvơng trình ứng dụng: các lệnh diều khiên dòng thực hiện chương trình, đạc biệ là cơ chế xứ lý ngoại lệ ho t
Trang 1ĐOÀN VẤN BAN - ĐOÀN VĂN TRUNG
LÂP TRÌNH
- !•1 *RW* w ” ■ w m w v ■
NHÀ XUẤT BẢN GIÁO DỤC VIỆT NAM
Trang 2ĐOÀN VĂN BAN - ĐOÀN VĂN TRUNG
(Tái bản lần thứ nhất)
NHÀ XUẤT BẢN GIÁO DỤC VIỆT NAM
Giáo trình
LẬP TRÌNH JAVA
Trang 3MỤC LỤC
LỜ NÓI ĐẦU 5
Chương 1 NHẬP MÔN LẬP TRÌNH JAVA 1.1 Giới thiệu về ngôn ngữ lập trình Java 7
1.2 Máy ảo Java (JVM ) ' 13
1.3 Bộ công cụ phát triển JDK (Java Development Kit) 15
1.4 Các loại chương trình Java 16
3ÀI TẬP 27
Chương 2 CÁC THÀNH PHẦN c ơ BẢN CỦA JAVA 2.1 Cấu trúc một chương trình Ja v a 28
2.2 Các lớp đối tượng 32
2.3 Các kiểu dữ liệu 39
2.4 Các phép toán trong Java 43
2.5 Cấu trúc điều khiển 50
2.6 Xử lý ngoại lệ 62
BÀI TẠP 69
Chương 3 HƯỞNG ĐỒI TƯỢNG TRONG JAVA 3.1 Giới thiệu 72
3.2 Lớp (class) các đối tượng 72
3.3 Phạm vi và thuộc tính kiểm soát truy nhập các thành phần của lớp 80
3.4 Truyền tham số cho các lời gọi h à m 97
3.5 Các tham số của chương trình 102
3.6 Phương thức tạo lập đối tượng 102
3.7 Sự kết thúc của đối tư ợ ng 108
3.8 Hàm đệ q u y 110
3 9 Oi lan hê kế thừa giữa các lớ p 112
3.10 Đa xạ và nạp chồng 120
3.11 Giao diện và sự mở rộng quan hệ kế thừa trong Java 126
BÀI TẶP 130
Chương 4 CÁC LỚP C ơ BẢN VÀ CẨU TRÚC DỮ LIỆU 4.1 Cấu trúc mảng trong Java 134
4.2 Các lớp cơ bản của Java 141
4.3 Cấu trúc tuyển tập đối tư ợ ng 163
4.4 Các cấu trúc dữ liệu động 177
BÀI TẬP 186
Trang 4Chương 5
APPLET VÀ LẬP TRÌNH ĐỒ HOẠ
5.1 Lập trình applet 189
5.2 Các thành phần của AW T 194
5.3 Các lớp xử lý đồ hoạ 202
5.4 Chọn mode để vẽ đồ hoạ 220
5.5 Xử lý hình ảnh và âm thanh 223
5.6 Bố trí sắp xếp các thành phần trong chương trình ứng dụng 226
5.7 Xử lý các sự kiện 231
BÀI TẬP 246
Chương 6 LUỒNG VÀO/ RA VÀ TỆP TIN 6.1 Các luồng vào/ra 248
6.2 Gói java.io 249
6.3 Lớp F ile 253
6.4 Các lớp xử lý tệp 258
6.5 Truy nhập tệp ngẫu nhiên 269
6.6 Truy nhập tệp tuần tự theo đối tư ợ ng 270
BÀI TAP 283
Chương 7 LẬP TRÌNH Cơ SỞ DƯ LIỆU VỚI JDBC 7.1 Giới thiệu 285
7.2 ODBC.! 285
7.3 JDBC 286
7.4 Các lớp và giao diện của JDBC API 289
7.5 Kết nối cơ sở dữ liệu qua JD B C 290
7.6 Kiểu dữ liệu SQL và JAVA 294
7.7 Chương trình ứng dụng JDBC 295
BÀI TẬP 306
Chương 8 BẢO MẬT VÀ AN NINH THÔNG TIN 8 1 G i ớ i t h i ệ u v ồ v ẩ n đ ồ b ả o m ậ t, n n t o n n h ộ t h o n g t h ô n g tin 3 0 8 8.2 Bộ nạp lớp và kiểm tra byte code 310
8.3 Lớp SecurityManager và Permission 317
8.4 Vẩn đề bảo mật trong gói java.security 330
8.5 Vấn đề chứng thự c 340
BÀI TẬP 353
TÀI LIỆU THAM KHẢO 354
4
Trang 5J lờ l nói đau
triển từ đầu những năm 90 của thế ký’ XX nó đã trở thành một trong cúc ngôn ngữ lập trình hướng đối lượng được ưa chuộng nhát trong Công nghệ
lùệr đã và đang được dùng phô biến trẽn toàn thế giới nhăm đáp ứng các yêu
hướng đoi tượng và kế thừa, sử dụng lại; được nâng cap cua những ngôn ngữ lập 'rình trước nó.
dối tượng mơ rộng cua c, nhưng loại di một so tính kha dụng quá phức tạp và
ít ding, hoặc thừa về mặt ngôn ngừ lộp trình như: loại bó ke thừa bội vì chúng
cỏ ihê tạo ra những lược đồ dữ liệu dạng đò thị và là nguyên nhàn chính gây ra
sự phức tạp trong hệ thong và không đảm bao tính nhát quán, tính đúng đăn
ỈỈỌL trên kiêu con tro vì đây là nguồn gốc cua những "con b ọ ” rắt khó phát hiện
giai thân thiện, hướng dối tượng và cách tân nhằm tạo ra những phân mèm
úm dụng dộc lập với môi trường sư dụng.
Nội dung chính cua giáo trình được trình bày trong tám chương.
ngai ngừ lập trình và nêu cách xây dựng, tô chức lóp các đỏi tượng trong các chvơng trình ứng dụng: các lệnh diều khiên dòng thực hiện chương trình, đạc biệ là cơ chế xứ lý ngoại lệ ho trợ đế tạo ra những chương trình hoạt động tôt troig mọi tình huống, thích ứng được với mọi diêu kiện trẽn cơ sớ kiêm soát diơc các loi, các tình huống có thê xay ra Chương 3 cung cấp những khái niệm dặc trưng CO' ban nhất của lập trình hướng đôi tượng, phân tích cách sử ding cơ ché đóng gói, che giấu thông tin, tinh đa xạ vù các môi quan hệ, đặc biợ là quan hệ kế thừa giữa các lớp dổi tượng Chương 4 đề cập den một sô
Trang 6lớp cơ sở nhất của J a v a và các kiểu cẩu trúc dữ liệu phố dụng, vấn để phát
chương 5 Chương 6 giới thiệu các lớp xử lý các luồng dữ liệu vào/ra chuan và các phương pháp, kỹ thuật tô chức đọc, ghi lên các loại tệp dữ liệu Chương 7
thong phần mềm tích hợp từ nhiều loại hệ thống thông tin khác nhau trên mạng Chương cuối giới thiệu một so kỹ thuật bao mật thông tin, chữ ký số và
các chương có nhiều ví dụ là những chương trình hoàn chinh, minh hoạ cho cách sử dụng những khái niệm đã nêu ớ trên.
Giáo trình được biên soạn dựa trên kinh nghiệm giảng dạy cùa các tác gia trong nhiều năm tại các khoủ đào tạo đại học, cao học ngành Công nghệ thông tin cua Đại học Quốc gia Hà Nội, Đại học Bách khoa Hà Nội, Đại học Khoa học Huế, Đại học Sư phạn Hà Nội, Dại học Bách khoa Đà Nang, Đại học Thái Nguyên, Đại học Công nghiệp Hà Nội, Giáo trình được biên soạn vê Lập
học viên cao học ngành Công nghệ thông tin và cho những ai quan tâm đến phương pháp lập trình hướng đối tượng đô phát triên những ứng dụng độc lập
Các tác gia bày tỏ lòng biết ơn chân thành tới các bạn đông nghiệp ơ các đơn vị đào tạo kể trên và Phòng Các hệ thong Phần mềm tích hợp, Viện Công nghệ Thông tin, Viện Khoa học và Công nghệ Việt Nam đã động viên, góp ý và giúp đõ' đế hoàn chinh nội dung giáo trình.
Mặc dù CO gang rất nhiều, nhưng khó tránh khoi những thiếu sót, chúng tôi mong nhận được nhũng ý kiến dóng góp cua bạn đọc đê giáo trình ngày càng tôt hơn
T h ir g ó p V r in g ir i v ê C ô n g t y C ô p h â n S á c h Đ ạ i h ọ c D ạ y n g h ê , N h à r n â t h á n
Giáo dục Việt Nam, 25 Hàn Thuyên Hà Nội.
Xin chân thành cam ơn!
CÁC TÁC GIA
6
Trang 7Chương 1
NHẬP MÔN LẬP TRÌNH JAVA
Giương này giới thiệu khái quát về ngôn ngữ lập trình Java:
■ Các đặc trưng nổi bật cùa ngôn ngữ lập trình Java
* Các loại chương trinh của Java
■ Máy ảo Java (Java Virtual Machine)
* Môi trường phát triển chương trình JDK (Java Development Kit)
1.1 Giới thiệu về ngôn ngữ lập trình Java
1.1.1 Java là gì?
J a v a đu'Ọ'c phát triển bo'i J a m e s G o s l i n g và bạn đồng nghiệp ở Sun
M c r o s y s t e m ban dầu ngôn ngữ này được gọi là Oak (cây sồi) vào năm 1991, sai năm 1995 dược dôi tên thành J a v a Ngôn ngừ J a v a dược tạo ra với mục tiêu
"ịiél (code) một lần, thực thi ở mọi nơi" (" W r ite Once Run Anywhere").
J i v a là ngôn ngữ vừa biên dịch, vừa thông dịch Đầu tiên, mã chuông trình nguồn điọc biên dịch bang chương trình ja v a c c o m (trong JDK) dê chuyên thành dạng B' t e Code Sau đó, được thực thi trên từng loại máy cụ thể nhờ chương trình thing dịch trong máy ảo JVM ( J a v a V i r t u a l M achine) Mục tiêu cùa các nhà thết kế J a v a là cho phcp người lập trình viết chương trình một lần, nhưng có thể clạy trên bât cứ phần cứng, môi trường cụ thê nào Môi trường thực thi của Sun M i c r o s y s t e m hỗ trọ'Sun S o l a r i s , L in u x , Mac OS, FreeBSD, W.ndows,
Mic dù mục tiêu ban đầu không phải cho I n t e r n e t , nhưng do đặc trưng không
plụ t h u ộ c v à o n ề n (Platform), nên J a v a đã tr ả thành n g ô n n g ữ lâp trình cho
I n t e r n e t Ngày nay, J a v a được sử dụng rộng rãi dè viết chương trình chạy trên
I i t e r n e t Nó là ngôn ngữ lập trình hướng dối tượng độc lập thiết bị, không phụ thiộc vào hệ điều hành J a v a không chi dùng dê viết các ứng dụng chạy độc lập h;y chương trình a p p l e t , mà còn dế xây dựng các trình diều khiên thiết bị cho dận thoại di dộng, PDA, các thiết bj nhúng,
11.2 Một số đặc điếm nối bật của ngôn ngữ lập trình Java
Cic đặc trưng cơ ban của ngôn ngữ lập trình J a v a là:
■ Đon giản, thân thiện;
■ Hướng đối tượng;
Trang 8a) Đon giản, thân thiện
Những người thiết kế ngôn ngữ lập trình 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 J a v a được xây dựng trên nền tảng của C/C++, có cú pháp giông như của c và có các đặc trưng hướng đối tượng cùa C+ + Đe đảm bảo đơn giản trong lập trinh, J a v a loại bỏ các đặc trưng phức tạp cùa C/C++ như thao tác con trỏ số học, không hỗ trợ định nghĩa nạp chồng các toán tử ( o p e r a t o r o v e r l o a d i n g ) , J a v a không sử dụng lệnh g o t o cũng như
f i l e h e a d e r (.h) và không hỗ trợ kế thừa bội ( M u l t i p l e I n h e r i t a n c e ) như trong C++, mà thay vào đó, J a v a đưa ra khái niệm giao diện ( i n t e r f a c e )
đô hô trợ tính kế thừa bội
b) Hướng đối tượng
Các dữ liệu và các phương thức được kết hợp vào một đơn vị cấu trúc tạo nên một đôi tượng Đôi tượng được xem như là thành phần chính của chương trình hướng đối tượng ( O b j e c t - O r i e n t e d ) , nó gồm hai thành phần chính: phần các phương thức (m e th o d ) và phần các thuộc tính ( a t t r i b u t e ) Trong lập trình, các phương thức của đổi tượng là các hàm và các thuộc tính của nó là các biến, các tham số hay hằng nội tại của một đối tượng (hay nói cách khác, tập hợp các dữ liệu nội tại tạo thành thuộc tính của đối tượng) Các phương thức là phương tiện đê sử dụng một đối tượng, trong khi các thuộc tính sẽ mô tả các tính chất đặc trưng của đối tượng
Các đối tượng thường được trừu tượng hoá ( A b s t r a c t i o n ) và bao gói ( E n c a p s u l a t i o n ) thành một lóp ( c l a s s ) Hay nói cách khác, lớp là nguyên mẫu ( p r o t o t y p e ) của những đối tượng giống nhau về các tính chất đặc trưng (các thuộc tính), tương tự nhau về hành vi ứng xử (các phương phức) và cùng có mối quan hệ với các dối tượng của các lớp khác
J a v a In n g ô n n g ữ lộ p t r ì n h h ư ớ n g ctôi t ư ợ n g t h ự c 3ự:
■ Hỗ trợ tất cả các khái niệm hướng đối tượng cơ ban: lóp, đối tượng, trim tượng hoá, bao gói, che giấu thông tin, kể thừa ( I n h e r i t a n c e ) , đa xạ ( P o ly m o rp h is m ) bao gồm nạp chồng ( O v e r l o a d i n g ) , viết dè ( O v e r r i d i n g ) và liên kết động (Dynamic B in d i n g )
■ Mọi thực thể trong chương trình đều được coi là một đối tượng, tức là một thê hiện cụ thế của một lóp xác định
■ Chương trình là tập họp các lóp ( c l a s s ) Các lóp dược xem như các kiều của đối tượng, được sử dụng đê tạo ra các đối tượng trao đôi với nhau nhằm thực thi nhiệm vụ dược giao
8
Trang 9Tất ca mọi thử được dề cập trong J a v a đều liên quan đến các dối tượng dược định nghĩa trước, thậm chí hàm chính của một chương trình viết bằng J a v a (đó là hàm
m ainQ ) cũng phải dặt bên trong một lớp Một cách khái quát ta có thể viết:
Chương trình hướng đối tượng = Các lớp + Kế thừa.
c) Độc lập vói nền
Đối với các ngôn ngữ lập trình truyền thống như B a s i c , P a s c a l , C/C++, phương pháp biên dịch được thực hiện như hình 1.1
Hình 1.1 Chu trình phát triển và thực hiện của chương trinh C/C++
Với mỗi nền phần cứng (kiến trúc máy - mà máy) khác nhau, có một trình biên dịch khác nhau để biên dịch mã nguồn chương trình cho phù họp với nền phần cứng ấy Do vậy, khi chạy trên một nền phần cứng hay hệ điều hành khác thì bất buộc phải biên dịch lại, nghĩa là tất cả các chương trình viết bằng ngôn ngữ lập trình truyền thống dều phụ thuộc vào môi trường mà chúng dược biên dịch
Công nghệ mạng Internet phát triển mạnh mẽ đã cung cấp nhiều dịch vụ tiện lợi cho nhiều ứng dụng khác nhau trên các nền (phần cứng, hệ diêu hành, chương trình tiện ích) rất khác nhau, nhất là các ứng dụng trên mạng cùa công nghệ Web
Điêu mà người dùng muôn nhất hiện nay là cân có mọt ngon ngư lạp trinh that mạnh để khắc phục những nhược điếm nêu trên, đặc biệt đế phát triển được dễ dàng các ứng dụng với Web trên mạng Java là một trong những ngôn ngữ dược thiết kế để đưa được các yếu tố lập trình lên mạng và kết hợp với Web
J a v a vượt qua được các nhược điểm trên bằng cách dịch các chương trình nguồn sang ngôn ngữ của máy ảo không phụ thuộc vào phần cứng và hệ lệnh cụ thế nào cả; sau đó khi cần thực hiện, nó sẽ được thông dịch sang hệ máy cụ thế như trong hình 1.2
Kẻt qua cùa chương trình dịch là chuỗi các b y t e c o d e cơ sở bao gồm các mã lệnh thực hiện (Opcode) và các tham số của máy lý thuyết (máy áo) là máy ảo J a v a (JVM - J a v a V i r t u a l M achine)
Trang 10Hình 1.2 Chu trình phát triển và thực hiện của chương trình Java
Môi trường phát triển của J a v a được chia làm hai phần:
■ Trình biên dịch và trình thông dịch Không như C/C ++, trình biên dịch của
J a v a chuyên mã nguồn thành dạng b y t e c o d e độc lập với phần cứng, và
có thể chạy trên bất kỳ CPU nào
* Nhưng đế thực thi chương trình dưới dạng b y t e c o d e , tại mỗi máv can phải có trình thông dịch của J a v a hay còn gọi là máy ảo J a v a Máy ảo
J a v a chưyển b y t e c o d e thành mã lệnh mà CPU thực thi được
Như chúng ta đã biết, nhưọc điểm chính của chương trình thông dịch là tốc độ tlhực hiện chậm J a v a giãi quyết vấn đề tốc độ bằng cách dịch chưong trình nguồn sang các mã b y t e ( b y t e code) Khi JVM thực hiện, nó sẽ tìm các đối tượng cần thiam chiếu cùa các lóp trong chương trình chính (chương trình ứng dụng) Mặt khác, dôi với nhũng chương trình không đòi hỏi tốc độ thực hiện cao như hầu hết các chương trình ứng dụng, các dịch vụ trên mạng, thì việc lựa chọn ngôn ngữ lập trình J a v a
là hoàn toàn phù họp
Ví dụ sau dây là một chưonii trình đon giản gồm một lóp H e l lo W o r ld A p p khi thực hiện thì hiên thị thông báo " H e l l o W orld", được dịch và thông qua JVM dể thông dịch và thực hiện cho kết quả giống nhau trên các máy với các nền Win3 2,
Trang 11d) Mạnh mõ và đảm báo an toàn
J a v a là ngôn ngữ kiểm soát chặt chẽ về các kiểu dữ liệu:
■ Phải khai báo kiêu dữ liệu tường minh khi viết chương trình, J a v a kiêm tra lúc biên dịch và cả trong thời gian thông dịch Vì vậy, J a v a loại bỏ dược một số loại lỗi thường xảy ra trong lập trình
■ J a v a không sử dụng con trỏ và các phép toán số học ( A r i t h m e t i c
O p e r a t o r ) trên con trỏ, không cho phép nhảy tự do đế thao tác tuỳ ý ỏ' các
vị trí bất kỳ trong bộ nhớ Mặt khác, các lời gọi các hàm trong mã b y t e
c o d e không phải là các địa chi như trong các ngôn ngữ truyền thống mà là thông qua tên gọi (định danh đối tượng) Định danh được hệ thống tạo ra cho các đối tượng khi thực thi chương trình
■ J a v a 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 J a v a kiểm soát chặt sự chuyến dổi kiểu dữ liệu từ dạng này sang dạng khác khi thực thi 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 và giải phóng bộ nhó' theo yêu cầu vấn đề sẽ nảy sinh khi lập trình viên quên giải phóng bộ nhớ dã xin cap trước đó Trong chương trình J a v a , lập trinh 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, giai phóng bộ nhó' được thực hiện tự động nhò' dịch vụ thu nhặt và giải phóng những đối tượng không còn sử dụng nữa (G a rb a g e C o l l e c t i o n )
* Cơ chế bẫy lỗi của J a v a giúp đơn giản hoá quá trình xử lý lỗi và phục hôi sau lỗi
Mặt khác, v i r u s là nguyên nhân gây ra sự lo lắng trong việc sử dụng máy tính Trước khi có J a v a , các lập trình viên phải quét v i r u s các tệp trước khi tai về hav thực hiện chúng Thông thường việc này cũng không loại trừ được hoàn toàn
v i r u s Ngoài ra, chưong trình khi thực thi có khả năng tìm kiếm và đọc các thông tin nhạy cảm trên máy cùa người sử dụng mà họ không hề hay biết
Vê nguyên tắc, sẽ không có một đoạn mã nào là an loàn ca Vì vậy, J a v a không chi là ngôn ngữ lập trình thuần túy, mà còn cung cấp nhiều mức dê kiêm soát tính
an toàn khi thực thi chương trình:
■ ơ mức đầu tiên, dữ liệu và các phương thức dược đóng gói bên trong lớp Chúng chi dược truy xuất thông qua các giao diện ma lớp cung cap J a v a không hỗ trợ con trỏ, vì vậy không cho phép truy xuất bộ nhớ trực tiếp Nó cũng ngăn chặn không cho truy xuất thông tin bên ngoài kích thước cua mang bằng kỹ thuật tràn ô và cung cấp kỹ thuật dọn rác trong bộ nhớ Các đặc trưng này tạo cho J a v a an toàn tối da và có khả năng CO' động cao
■ Trong mức thứ hai, trình biên dịch kiếm soát để đàm bao mã là an toàn, và tuân theo các nguyên tắc của J a v a đề bảo mật
■ Mức thứ ba được đảm bảo bởi trình thông dịch Chúng kiểm tra xem b y t e
c o d e có đảm bão các quy tắc an toàn trước khi thực thi hay không
* Mức thứ tư kiếm soát việc nạp các lớp vào bộ nhó' đe giám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống
Trang 12e) Lập trình mạng, phân tán
J a v a có thê dùng để xây dựng các ứng dụng cho phép làm việc trên nhiều phần cứng, hệ điều hành và giao diện đồ hoạ khác nhau J a v a được thiết kế hỗ trợ cho các ứng dụng chạy trên mạng ( j a v a n e t ) Vì vậy, chúng được sử dụng rộng rãi như là công cụ phát triển trên I n t e r n e t , nơi sử dụng nhiều nền tàng khác nham
* J a v a được thiết kế để hỗ trợ các ứng dụng chạy trên mạng bằng các lớp mạng trong gói j a v a n e t
* J a v a hỗ trợ nhiều nền chạy khác nhau, nên chúng được sử dụng rộng rãi như là công cụ phát triển trên I n t e r n e t , noi sử dụng nhiều nền khác nhau
đê tạo ra các trang web động
* Một đặc trưng chính của J a v a là khả năng nạp xuống (d o w n lo a d e d ) theo yêu cầu và thực hiện chương trình ứng dụng trên các máy khách Do vậy, các chương trình (hệ thống) J a v a tương đối gọn nhẹ và linh hoạt
■ Với J a v a , Web được bố sung thêm sự liên kết giữa các mẩu dữ liệu liên quan đê biến đôi những dữ liệu thô thành những thông tin
■ J a v a hỗ trợ mạnh mẽ đối với việc phát triển các ứng dụng Web thông qua công nghệ J2EE ( J a v a 2 E n t e r p r i s e E d i t i o n ) Công nghệ J2 E E hoàn toàn có thể tạo ra các ứng dụng Web một cách hiệu quà không thua kém công nghệ NET của M i c r o s f t
0 Thực hiện đa luồng
■ J a v a dáp ứng được tiêu chuẩn da luồng vì: Thú' nhất, nó cung cấp các lớp
có thể thực hiện như là các luồng được điều khiển riêng biệt; thứ hai, J a v a
tự thực hiện được sự kết hợp giữa các phần dị bộ trong các luồng với nhau
■ Chương trình J a v a da luồng ( M u l t i t h r e a d i n g ) để thực thi các công việc đồng thời Chúng cũng cung cấp giải pháp đồng bộ giữa các luồng, đặc tính hỗ trợ đa luồng này cho phép xây dựng các ứng dụng trên mạng, trên những máy nhiều lõi ( c o r e ) rất hiệu quả
* Web là môi trường mà ỏ' dó có nhiều sự kiện có thể xảy ra đồng thời Ngôn ngữ sử dụng để lập trình Web phải hỗ trọ' cho phcp nhiều sự kiện dễ dàng có thế thực hiện cùng một lúc, J a v a rất phù hợp đế xử lý các sự kiện
■ Ngoài ra, Sun còn đưa ra công nghệ J2ME ( J a v a 2 M ic r o E d i t i o n ) hỗ trợ phát triển các chương trinh, phần mềm nhúng J2ME cung cấp một môi trường cho những chương trình ứng dụng có thể chạy được trên các thiết bị
cá nhân như: điện thoại di dộng, máy tính bỏ túi PDA hay Palm, cũng như các thiết bị nhúng khác
Trang 13trinh ứng dụng dộc lập của J a v a giống như các chương trình của những ngôn ngữ lập trình truyền thống (C/C+ + ) là qưá trình bắt đầu, thực hiện và kết thúc diễn ra trong hàm m a in ( ) , nhưng trong J a v a chỉ có một cách viết duy nhất (được chuẩn hoá) là:
p u b l i c s t a t i c v o i d m a in ( S t r i n g [] a r g s ) {
// Nội dưng công việc can thục hiện}
1.2 Máy ảo Java (JVM)
Tất cả các chương trình muốn thực thi được trên máy tính thi phải đưcrc biên dịch
ra mã máy Mã máy của tùng kiến trúc CPU cùa mỗi máy tính là khác nhau (tập lệnh mã máy của CPU I n t e l , CPU S o l a r i s , CPU M a c i n t o s h , là khác nhau) Vì vậy, trước đây một chương trình sau khi được biên dịch xong chi có thê chạy được trên một kiến trúc CPU cụ thế nào dó Đối với CPU I n t e l ta có thể chạy các hệ điều hành như M i c r o s o f t Windows, Unix, Linux, o s / 2,
Chuông trình thực thi được trên Windows dược biên dịch dưới dạng f i l e có đuôi EXE, còn trên L i n u x thi được biên dịch dưới dạng f i l e có đuôi ELF Vì vậy, trước đây một chương trình chạy được trên Windows muốn chạy được trên
hệ điều hành khác như L i n u x chẳng hạn, thì phải chinh sửa và biên dịch lại.Ngôn ngữ lập trinh J a v a ra đời, nhò' vào máy ảo J a v a JVM mà khó khăn nêu trên
dã được khắc phục Một chương trình viết bằng ngôn ngữ lập trình J a v a (tệp j a v a ) sẽ được biên dịch ra mã của máy ảo J a v a (B y te c o d e ) thành các tệp c l a s s Sau dó máy ảo J a v a JVM chịu trách nhiệm chuyền mã b y t e c o d e ( c l a s s ) thành mã máy tương ứng (.exe) để thực thi dược ở mọi nơi Sun
M i c r o s y s t e m chịu trách nhiệm phát triển các máy ào J a v a chạy trên các hệ điều hành và trên các kiến trúc CPU khác nhau
Khả năng cơ động cùa f i l e c l a s s (mã b y t e c o d e ) cho phép các chương trình
J a v a viết một lần, nhưng chạy ỏ' bất kỳ dâu Khả năng này có được nhờ sự giúp
đỡ cùa máy ảo J a v a Cũng chính nhò' cơ chế dịch thành mã trung gian b y t e
c o d e ( c l a s s ) mà tệp ( f i l e ) này có thể dịch ngược (D e c o m p ile ) để thu lại được ch lion (J trình nguồn ( j a v a )
1.2.1 Máy áo Java ỉà gì?
Máy ảo là một phần mềm dựa trcn cơ sờ máy tính ảo Nó có tập hợp các lệnh
l o g i c đế xác định các hoạt động cua máy tính Người ta có thể xem nó như một
hệ điều hành thu nhỏ Nó thiết lập các lóp trừu tượng cho phần cứng bcn dưới, hệ diêu hành, mã lệnh đã biên dịch
Trình biên dịch chuyển mã nguồn thành tập các lệnh cùa máy ảo (B y te c o d e ) mà không phụ thuộc vào phần cứng cụ thể Trình thông dịch trên mỗi may sẽ chuyến tập lệnh này thành chưong trình thực thi Máy ảo tạo ra một môi trường bên trong
đê thực thi các lệnh băng cách:
Trang 14Khi JVM thực thi mã b y t e c o d e ( c l a s s ) , một thanh ghi cục bộ có tên
" P ro g ra m C o u n t e r " đượ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 cua chưong trình Trong trường hợp thông thường thì từng lệnh một sẽ được nối tiếp nhau thực thi
Một khái niệm thông dụng khác trong J a v a là trình biên dịch " J u s t I n T im e -
J IT " Các trình duyệt Web thông dụng như N e t s c a p e , IE, F i r e f o x hay Chrome, đều có J I T bên trong dê tăng tốc độ thực thi chương trình J a v a Mục đích chính cùa J I T là chuyển tập lệnh b y t e c o d e 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 được gọi đến
1.2.2 Quản lý bộ nhó’ và dọn rác
Trong C/C++ hay P a s c a l , người lập trình thường sử dụng phương pháp trực tiếp
đè câp phát và thu hồi bộ nhớ "Heap" Heap là vùng bộ nhớ lớn dược phân chia cho tất cà các luồng thực hiện
Đô quản lý bộ nhớ Heap, bộ nhớ được theo dõi qua các danh sách:
* Danh sách các vùng nhớ chưa sử dụng;
* Danh sách các vùng đã cấp
Khi có một yêu cầu về cấp phát bộ nhớ, hệ thống xem xét trong danh sách chưa càp phát đế lấy ra khối bộ nhớ dầu tiên có kích cỡ sát nhất với lượng bộ nhớ cần thiết
Kỹ thuật cấp phát này giảm tối thiểu việc phân mành cùa bộ nhớ Heap
Kỹ thuật kết hợp lại ( C o a l e s c i n g ) nhằm giảm thiểu việc phân mảnh của bộ nhớIIca.p băng oáoli gom lại oáo vùng Iilió cliua dùng 11ÔI1 nhau thành ntỌl khỏi lớnhon Còn kỹ thuật sắp xếp lại các phần bộ nhớ dã dùng đe tạo vùng nhớ chưa sử dụng lớn hơn gọi là kỹ thuật nén (C o m p a c tio n )
J a v a sử dụng hai bộ nhớ Heap riêng biệt cho cấp phát vùng nhớ tĩnh và vùng nhớ dộng Một bộ nhó' Heap tĩnh chứa các định nghĩa về lớp các hằng và danh sách các phương thức Bộ nhớ Heap còn lại (H eap động) dược chia làm hai phần được cấp phát theo hai chiều ngược nhau Một bên chứa đối tượng còn một bcn chứa con trỏ tham chiếu đến đối tượng đó
H a n d le là cấu trúc bao gồm hai con trỏ Một con trỏ trỏ den bang phương thức của đối tượng, con tro thứ hai trò dến chính đối tượng đó Chú ý ràng khi
" c o m p a c t i o n " cần, nó cập nhật lại giá trị con trỏ cùa cấu trúc h a n d l e
14
Trang 15Thuật toán "dọn rác" có thể áp dụng cho các dối tượng dặt trong Heap dộng Khi
có yêu cầu về bộ nhớ, trình quản lý bộ nhớ Heap trước ticn kiểm tra danh sách bộ nhớ chưa cấp phát Neu không tìm thấy khối bộ nhớ nào phù họp (về kích cỡ) thì trình dọn rác sẽ được kích hoạt khi hệ thống rỗi Nhưng khi dòi hỏi bộ nhớ cấp bách thì trình dọn rác sẽ được kích hoạt ngay
Trình dọn rác gọi phương thức f i n a l i z e () của đối tượng trước khi dọn dẹp đối tượng Hàm này sẽ dọn dẹp các tài nguyên bên ngoài như các f i l e đang mở
1.2.3 Quá trình kicm tra file class
Việc kiểm tra được áp dụng cho tất cả các f i l e c l a s s sắp được nạp lèn bộ nhó'
đê đám bảo tính an toàn thông tin Trình " C l a s s L o a d e r " sẽ kiếm tra tất cà các
f i l e c l a s s không thuộc hệ diều hành với mục đích giám sát sự tuân thủ các nghi thức đế phát hiện các f i l e c l a s s có nguy cơ gây hư hong den bộ nhớ, hệ thống f i l e cục bộ, mạng hoặc hệ điều hành Quá trình kiểm tra sẽ xem xét tông thể tính nguyên vẹn của từng lóp
* Báng M ethod chứa các hàm (phương thức) của lớp;
■ Bảng I n t e r f a c e chứa các nguyên mẫu hàm và các hằng số
Quá trình kiểm tra f i l e c l a s s được thực hiện ờ bốn mức:
* Mức đầu tiên, thực hiện việc kiểm tra cú pháp đế đảm bao tính cấu trúc và tính toàn vẹn cú pháp cùa f i l e c l a s s được nạp
■ Mức thứ hai, xem xét f i l e c l a s s để đảm báo các f i l e này không vi phạm các nguyên tắc về sự nhất quán ngữ nghĩa
■ M ứ c t h ứ ba k i ề m t r a orxrĩcì T r o n g b ư ó o n à y s ẽ k i ê m t ra s ô t h ô n g s ôtruyền vào phương thức; khả năng truy xuất sai chi số cùa mảng, chuỗi, biếu thức
■ Mức thứ tư, kiểm tra trong thời gian thực thi dể giám sát các việc còn lại mà
ba bước trên chưa làm Ví dụ như liên kết tới các lóp khác trong khi thực thi, hay kiểm tra quyền truy xuất; nếu mọi điều thoả mãn, lóp sẽ đưọc khỏi tạo
1.3 Bộ công cụ phát triển JDK (Java Development Kit)
J a v a D e v e lo p m e n t K i t (JDK - Bộ công cụ cho người phát triền ứng dụng bàng ngôn ngữ lập trình J a v a ) là một tập họp những công cụ phần mềm dưọc phát
15
Trang 16triển bởi Sun M i c r o s y s t e m s dành cho các nhà phát triển phần mềm, dùng để viết những J a v a A p p l e t hay những ứng dụng J a v a Bộ công cụ này dược phát hành miễn phí gồm có trình biên dịch, trình thông dịch, trình giúp sửa lỗi ( d e b u g g e r ) , trình chạy a p p l e t và tài liệu nghiên cứu.
JDK bao gồm J a v a P l u g - I n , chúng cho phép chạy trực tiếp J a v a A p p l e t hay J a v a B e a n bằng cách dùng JRE thay cho sử dụng môi trường tthực thi mặc định của trình duyệt Bộ JDK do Sun cung cấp theo Web s i t e :
Hiện nay có nhiều môi trường phát triển phần mềm với J a v a như: E c l i p s e (mã nguồn mở), J C r e a t o r , N e tB e a n , v i s u a l J++, S y m a t e c ' s CaLfe,
B o r l a n d J B u i l d e r ,
Các chưong trình của giáo trình này được phát triển và thực hiện vói J c r e a t o r
Bộ JDK cung cấp các công cụ và các chương trình sau:
* j a v a c Trình dịch chuyển mã nguồn sang mã b y t e c o d e
■ j a v a Trình thông dịch, nó thực thi các úng dụng độc lập, các tệp tin
Bộ gỡ lỗi ( j a v a d e b u g e r ) cho phép thực hiện từng dòng lệnh, đặt diêm dừng, xem giá trị của các biến,
Bô tao lâp h e a d e r của c và cho phép chuông trình c gọi các phương thức (hàm) của J a v a và ngược lại
Trình dịch ngược A s s e m b l e r , hiến thị các phương thức, dừ liệu truy nhập đưọc bên trong cùa tệp till c l a s s đã được dịch
và hiển thị nghĩa của b y t e c ode
1.4 Các loại chiFOTig trinh Java
J a v a hỗ trợ để phát triển ba loại chương trình ứng dụng:
Trang 171.4.1 Chuông trình ứng dụng độc lập
Chương trình ứng dụng độc lập là loại chương trình giống như các chương trinh của các ngôn ngữ truyền thong, chúng thực thi mà không cần sự hỗ trợ của các phần mềm khác Chương trình ứng dụng độc lập bẳt đầu thực hiện và kết thúc công việc đều thực thi ở hàm m a in () giống như trong chương trình C/C+ + Đặc trưng chính của chương trình ứng dụng dộc lập là:
■ Mọi chương trình ứng dụng độc lập đều được tạo ra từ các lớp ( c l a s s )
■ Một lóp ( c l a s s ) giống như cấu trúc ( s t r u c t ) trong C/C++, nhưng khác
ở chồ là c l a s s định nghĩa gộp chung các phương thức xử lý trên dữ liệu trong một đơn vị
■ Đe tạo ra một chương trình ứng dụng độc lập trong J a v a , người lập trình phải định nghĩa một lóp có chứa hàm m a in ()
■ Các mã lệnh trong m a in () sẽ được thực hiện khi chương trình bắt đầu thực thi
Quá trình phát triển chương trình ứng dụng độc J a v a với SDK ( S o f t w a r e
Quá trình trên dược mô tá như hình 1.4
Hình 1.4 Quá trinh phát triển chương trình với SDK
Sau đây là một chương trình dơn giản đầu tiên hiển thị một thông báo lên màn hình
17
Trang 18■ Ta có thế dùng bất kỳ một chương trình soạn thảo nào dấy, ví dụ như
N o te p a d , Word O f f i c e hay một môi trường phát triển chương trình
J a v a như J C r e a t o r , E c l i p s e , để viết mã nguồn cho mọi chương trình J a v a và lưu lại với tên có đuôi " ja v a "
■ Đê biên dịch mã nguôn, ta sử dụng trình biên dịch j a v a c Trình biên dịch xác định tên của file nguồn tại dòng lệnh như mô tả dưới đây:
c : \ j d k l 6 2 \ b i n > j a v a c P r o g l j a v aTrình dịch j a v a c được cài đặt ờ thư mục C: \ j d k l 6 2 \ b i n sẽ dịch
f i l e P r o g l j a v a và tạo ra f i l e P r o g l c l a s s chứa các mã b y t e
c o d e ỏ' thư mục hiện thời, thường là thư mục lưu trữ tệp nguồn Những mã này chưa thể thực thi được
■ Đè chương trình thực thi được ta cần dùng trình thông dịch " J a v a
I n t e r p r e t e r " , lệnh được thực hiện như sau:
C : \ j d k l 6 2 \ b i n > j a v a P r o g lTrình thông dịch j a v a được cài dặt ỏ' thư mục c : \ j d k l 6 2 \ b i n sẽ thông dịch P r o g l ở thư mục hiện thời để hiển thị thông báo lên màn hình
* Ket quả sẽ hiển thị trên màn hình ( C o n s o le ) như sau:
X in moi c a c b a n d e n v o i l a p t r i n h J a v a !
Lưu ý:
■ Trong các môi trường phát triển chương trình J a v a như j C r p a t - n r
E c l i p s e , ta sử dụng các biêu tượng tương ứng vói các chức năng biên dịch, thông dịch (thực hiện) chương trình
■ Khi dịch nếu gặp thông báo lồi "Bad Command o f f i l e n a m e " hoặc
18
Trang 19Phân tích chương trình 1.1:
■ Dòng // Chương t r ì n h đơn g i ả n đ ầu t i ê n P r o g l j a v a
Ký hiệu // dùng dể thuyết minh, chú thích tù' dây dến hết dòng 1'rình biên dịch sẽ bo qua dòng thuyết minh từ // đến cuối dòng J a v a còn hỗ trọ- thuyết minh nhiều dòng, loại thuyết minh này có thể bắt đầu vói /* và kết thúc với */, ví dụ:
■ Dòng kế tiếp khai báo lớp có tên P r o g l
Đe tạo thêm một lớp, ta bắt dầu vói từ khoá c l a s s , kế đến là tên lớp (và cũng chính là tên f i l e ) Tên lớp nói chung nên viết in hoa các chừ cái đầu của các từ được ghép thành
Định nghĩa lớp nằm trọn vẹn giữa hai ngoặc móc mở và dóng '}' Các ngoặc này đánh dấu bắt đầu và kết thúc một khối lệnh
p u b l i c , bơi vậy JVM có thế truy xuất phương thức này
- Từ khoá s t a t i c cho phép m a in () được gợi tới mà không cần tạo ra một thê hiện ( i n s t a n c e ) của lớp Nhưng trong trường hợp này, bản
c o p y của phương thức m a i n ( ) được phép tồn tại trên bộ nhớ, thậm chí không có một thể hiện của lớp đó được tạo ra Điều này rất quan trọng vì JVM trước tiên gọi phương thức m a in () dể thực thi chương trình Vì lý do này mà phương thức m a i n ( ) cần phải là tĩnh ( s t a t i c ) ,
nó không phụ thuộc vào các thể hiện (đổi tượng) cùa lóp được tạo ra
Từ khoá v o i d thông báo cho máy tính biết rằng, phưong thức sẽ không tra lại bất cứ giá trị nào khi thực thi chương trình
19
Trang 20Phương thức m a in () sẽ thực hiện một số tác vụ cùa chương trình, nó
là điểm mốc mà từ đó tất cà các ứng dụng J a v a đưọc khởi động
- S t r i n g a r g s [] là tham số dùng trong phương thức m a in () Các biến số trong dấu ngoặc đon nhận từng thông tin đưọc chuyển vào
m a in () Những biến này là các tham số của phương thức Thậm chí ngay khi không có một thông tin nào dược chuyên vào m a in (), phương thức vẫn được thực hiện với các dừ liệu rỗng - không có gì trong dấu ngoặc đơn
- a r g s [] là tên một mảng kiểu s t r i n g do ngưòi lập trình tự đặt, dó là các đối so ( a r g u m e n t s ) từ các dòng lệnh được lưu vào mảng
- Mã nằm giữa hai ngoặc móc { và } của m a in () đưọc gọi là khối lệnh của phương thức Các lệnh đưọc thực thi trong m a in () cần dược viết trong khối này
- S y s te m , o u t p r i n t l n ( "Xin moi cac ban den voi lap trinh J a v a ! ") ; Dòng lệnh này hiển thị thông báo " x i n moi c a c b a n d e n v o i l a p
t r i n h J a v a !" trên màn hình khi chưoơg trình thực thi Phưong thức
p r i n t ln () cùa S y s te m o u t cho phép hiên thị chuỗi được truyền vào
để hiển thị trên màn hình C o n s o le Ở dây, S y s te m là một lớp đã định nghĩa trước trong gói j a v a l a n g , nó cho phép truy nhập vào hệ thống và o u t là một thành phần cho phép dưa các chuỗi, xâu ký tự ra màn hình
L im ý:
■ Phần đầu của một chương trình J a v a xác định thông tin môi trường De làm được việc này, chương trình được chia thành các lóp hoặc các gói ( p a c k a g e ) phân theo các lĩnh vực khác nhau Những gói này sẽ được nhập vào chương trình bang chí dan i m p o r t J a v a có một hệ thống các lóp thư viện được chia thành nhiều gói: j a v a , l a n g , j a v a i o , j a v a a w t ,
j a v a u t i l , Thông tin này được chỉ ra với sự trợ giúp của lệnh nhập
i m p o r t Mỗi chương trình có thể có nhiều hơn một lệnh nhập i m p o r t
h o ạ c m ặ c đ ị n h l à j a v a l a n g *■ V í d ụ , l ệ n h n h ậ p
i m p o r t j a v a a w t * ;Lệnh này nhập gói j a v a aw t Gói này dùng đế tạo lập các đối tượng xử lý giao diện đồ hoạ với người sử dụng GUI Ở dây, j a v a là tên của thư mục chứa gói aw t Ký hiệu * chỉ tất cả các lớp thuộc gói này
Gói j a v a l a n g là mặc định Chương trình P r o g l ở trên sử dụng gói
j a v a l a n g mặc định
■ Trong J a v a , tất cả các mã, bao gồm các biến và cách khai báo đưọc thực hiện trong phạm vi một lóp Mỗi lệnh đều kết thúc bò'i dấu chấm phẩy Chương trình còn có thể bao gồm các ghi chú, chi dẫn Khi dịch, chương trình dịch sẽ tự loại bỏ các ghi chú này
20
Trang 21Quá trình phát triển chương trình J a v a a p p l e t với SDK tương tự như đoi với chương trình ứng dụng độc lập, bao gồm các bước soạn thảo chương trình nguồn ( J a v a S o u r c e Code) ghi vào tệp F ile N a m e j a v a , dịch với j a v a c để tạo ra tệp lóp của J a v a là F ile N a m e c l a s s , sau đó chưa sử dụng chưong trình thông dịch được mà phải nhúng vào tệp chủ HTML (HTML H o s t F i l e ) rồi có thể sử dụng a p p l e t v i e w e r để thông dịch và cho kết quả của chưong trình Ngoài ra, khi dịch chúng ta có thể sử dụng chương trình j a v a d o c để chuyển sang tệp tài liệu hoá HTML (HTML D o c u m e n t a t i o n F i l e ) , sử dụng j a v a h để chuyển thành tệp đầu của C/C++ (C/C++ H e a d e r F i l e ) và dùng j d b để gỡ lỗi chương trình.
Quá trình phát triển chương trình J a v a a p p l e t dược mô tả như hình 1.5
Trang 22// Viết đè hàm p a i ' () để hiển thị thông báo tại toạ độ (x = 40, y 50)
p u b l i c v o i d p a i n t (G ra p h ic s g) {
g d r a w s t r i n g ("Xin moi cac ban den voi lap trinh J a v a ! ", 4 0,5 0);
// Viết đè hàm drawArc 0 đê vẽ hình tròn ớ (x = 60, y = 60)
■ j ava applet hoặc j avax swing;
Sử dụng cú pháp sau dế dịch một a p p l e t tương tự như đối với chương trình ứng dụng độc lập: j a v a c A p p l e t P r o g j a v a
Dịch thành công sẽ lưu kết quả là AppletProg class ở thư mục hiện thời
Đê thực thi một applet, ta cân tạo một file HTML File HTML này sử dụng thẻ applet code Thẻ applet này lấy tham số đầu tiên là đường dẫn của file applet Ví dụ sau đây tạo ra file Prog2.html và sử dụng thẻ applet với các tham so width, height xác định chiều rộng, chiều cao cùa khung chương trình:
Trang 23Lúc này, ta có thể thực thi A p p l e t P r o g bằng cách dùng một trình duyệt web dê
mơ f i l e P r o g 2 h tm l, hoặc trong JDK để chạy file HTML, ta gõ câu lệnh sau:
a p p l e t v i e w e r P ro g 2 h tm lKet quả thực hiện P r o g 2 h tm l như hình 1.6
Hình 1.6 Kết quả thực hiện của chương trinh Prog2
Ta thấy có sự khác nhau giữa một chương trình ứng dụng độc lập và chương trình
a p p l e t :
■ Đế thực thi các chương trình ứng dụng độc lập, ta dùng trình thông dịch j a v a , trong khi đó a p p l e t có thể chạy đuợc trên các trình duvệt (có hỗ trợ J a v a ) như IE hoặc sử dụns công cụ a p p l e t v i e w e r , công cụ này di kèm với JDK
■ Quá trình thực thi cùa một chương trình ứng dụng độc lập bất đầu và kết thúc ở phương thức m a i n ( ) Tuy nhiên, chương trình a p p l e t thì không làm như vậy Quá trình thực hiện các a p p l e t chúng la sẽ xét ờ ngay sau dây
* Các chương trình ứng dụng độc lập sử dụng S y s t e m , o u t p r i n t l n () để hiển thị kết quà ra màn hình trong khi dó, a p p l e t sử dụng phưong thức
Trang 24■ Trước tiên, a p p l e t được tạo bỏ'i một trình duyệt web hoặc trinh thông dịch
a p p l e t v i e w e r
■ Bước kế tiếp là khởi tạo Diều này xảy ra khi một a p p l e t dược nạp xuống Ọuá trình này bao gồm việc tạo iập các đối tượng mà a p p l e t cần Phương thức i n i t 0 được định nghĩa đè để cung cấp các hành vi đề khởi tạo chương trình a p p l e t
■ Một khi a p p l e t dược khởi tạo, a p p l e t sẽ được khởi động để bắt đầu thực thi bằng lệnh s t a r t () A p p l e t có thể khởi động ngay cà khi nó dã được ngừng trước đó Ví dụ, nếu trình duyệt nhảy đến một liên kết nào đó ở trang khác, lúc đó a p p l e t sẽ bị dừng s t o p ( ) , và được khởi động trở lại khi người sử dụng quay về trang đó Sự khác nhau giữa quá trình khỏi tạo và quá trình khởi động là một a p p l e t có thể khởi động nhiều lần, nhưng quá trình khởi tạo thì chi xảy ra một lần Phưong thức s t a r t () dược viết đè ( o v e r r i d e ) để cung cấp các thao tác khỏi động cho a p p l e t Phương thức s t o p O chỉ được gọi khi người sử dụng không còn ở trang đó nữa, hoặc trang dó đã được thu nhỏ lại ở dưó'i thanh t a s k b a r
■ Ke tiếp là phưong thức d e s t r o y () Phương thức này giúp a p p l e t dọn dẹp trước khi nó được giải phóng khỏi vùng nhớ, hoặc trước khi trình duyệt kết thúc Phương thức này được dùng đế huỷ những luồng ( t h r e a d ) hay quá trình đang chạy Phương thức d e s t r o y ! ) khác với phương thức
f i n a l i z e () là phương thức d e s t r o y ! ) chỉ dùng cho a p p l e t , trong khi f i n a l i z e () là cách tổng quát để dọn dẹp bộ nhớ
Bàng 1.1 Các phương thức chính của Applet
tạo đối tượng để cung cấp cho applet Phương thức này được dùng đề tải các hình ảnh đồ hoạ, khởi tạo các biến và tạo các đối tượng.
tất thi applet được khởi động Phương thức này được dùng để khởi động
nó bị huỷ.
gian thực thi của vi xử lý, không gian lưu trữ được trả về cho hệ thống.
thõng số là đối tượng của lớp Graphics.
hình ảnh trên nền applet Đối số của phương thức này là đối tượng của
■ Phương thức p a i n t () cũng là một phương thức quan trọng khác Phương thức này cho phép ta hiển thị một cái gì đó trên màn hình, có the là văn bản ( t e x t ) , đưòng thắng, màu nền, hoặc hình ảnh, Phương thức này xảy ra
24
Trang 25nhiều lần trong suốt quá trình a p p l e t tồn tại Nó sẽ lặp di lặp lại khi di chuyển từ cửa sổ trình duyệt sang cửa số khác Nó cũng xảy ra khi cửa sổ trình duyệt thay đổi vị trí của nó trên màn hình Phưong thức p a i n t () có một tham số là đối tượng của lớp G r a p h i c s Lóp G r a p h i c s thuộc gói
j a v a a w t, chúng ta phải i m p o r t vào chương trình của a p p l e t
1.4.3 Chuong trình lai ghép
Một diều đáng lưu ý là một chương trình J a v a có thể vừa là chương trình ứng dụng độc lập, vừa là a p p l e t Chức năng cứa a p p l e t được bỏ qua khi nó được thực thi như là một chưong trình ứng dụng độc lập và ngược lại Nghĩa là, J a v a cho phép xây dựng chương trình chạy được cả ở Web B r o w s e r lẫn như một ứng dụng độc lập Một chương trình như thế phải:
■ Định nghĩa lóp ứng dụng mở rộng, kế thừa từ lóp A p p l e t , hoặc J A p p l e t ;
* Trong lóp ứng dụng phải có hàm m a in ()
Chương trình 1.3 sau đây sẽ minh hoạ diều này
Chương trình 1.3:
im p o r t j ava awt Graphics;
im p o rt javax.swing.Jframe;
im p o r t j ava applet Applet;
p u b l i c c l a s s AppApplet e x te n d s Applet {
p u b l i c v o id init () { resize (200,160) ; // Đặt lại kích thước}
p u b l i c v o i d paint (Graphics g) {
g drawstring ("Xin chao cac b a n ! ", 6 0,2 5) ;
}// Hàm main () dảm báo chương trình sẽ chạy được độc lập
p u b l i c s t a t i c v o id main ( s t r i n g a r g s [] ) {
//Tạo lập đối tượng cua AppApplet
h i n i t () ;
// Khới tạo khung chương trình f của lớp FrameJframe f = new Jf rame ( "Chương trình lai AppApplet") ;
f r e s i z e ( 2 0 0 , 1 6 0 ) ; // Đặt lại kích thước// Dặt đối tượng h vào trung tâm cúa f
f a d d ( " C en te r" , h) ;
f show () ; // Hiến thị Frame f}
}
Sử dụng j a v a c để dịch như hai trường họp trên
Sau khi biên dịch chương trình, nó có thể được thực thi như là một chương trình ứng dụng độc lập, nghĩa là sử dụng trình thông dịch j a v a để thực thi và cho kết quá như hình 1.8
Trang 26B Chuông trinh lot AppApplet m f & if x l
Xin chao cac Ban đen voi lap trinh Java!
Hình 1.8 Chương trình lai chạy như chương trình ứng dụng độc lập
Nhưng đồng thời chương trình AppApplet lại có thể thực thi như một appplet Tất nhiên, để một applet thực thi chúng ta phải tạo ra thẻ HTML và thực hiện nó với trình thôns dịch appletviewer hoặc sử dựng trình duyệt web
Thực hiện chương trình trên với appletviewer chúng ta nhận được:
Hình 1.9 Chương trình AppApplet thực thi như một applet
Khi applet chạy trên trình duyệt web, đặc điểm này thực sự hữu ích khi bạn muốn tải applet trong một frame mới Ví dụ, trong applet được tạo để trao đổi (chat), một so Website sử dụng một cửa số Chat riêng biệt để Chat
Bạn cũng có thế kết hợp các đặc diêm của frame và applet vào trong một chương trình
Tủm lại, chương trình ứng dụng dộc lập và chưong trình a p p l e t có những đặc
trưng riêng phù họp với các loại ứng dụng khác nhau
Bảng 1.2 Các chương trình ứng dụng độc lập và Applet
Khai báo Lả lớp con cúa bất kỳ lớp nào trong các
gói thư viện các lớp
Phái lả lớp con của Applet
hoặc JApplet
Y c u oầu Lộ 1 l i lử Đ ộ n h ó ’ tổ i th iổ u bộ nhữ danh Cho cá trinh duyẹr
và applet đó
Cách nạp chương
trinh
Trang 27BÀI TẬP
1.1 Trong số các nhận định sau, câu nào đúng, câu nào sai?
a) Bạn có thể viết các chương trình dạng thủ tục bang J a v a
b) J a v a là ngôn ngữ có kiểu dữ liệu chặt chẽ
c) J a v a là ngôn ngữ lập trình hướng đối tượng
d) Ngôn ngữ J a v a cho phép phát triển các chương trình ứng dụng độc lập với nền
c) Lệnh dược sử dụng đế thông dịch chương trình a p p l e t
d) Lớp chương trình a p p l e t phải l à của A p p l e t , hoặc J a p p l e t e) Chương trình a p p l e t là chương trình có thể nhúng v à o hay chạybang J a v a
g) Tên của f i l e chương trình J a v a tên c ủ a
h) Chương trình a p p l e t sau khi dịch thành công p h ả i t h ẻ củaHTML
Trang 28Ch iron g 2
CÁC THÀNH PHÂN c ơ BÂN CỦA JAVA
Chương này giới thiệu các khái niệm, thành phần cơ bản của ngôn ngữ lập trình
Java:
■ Các thành phần của chương trình Java
■ Cách tổ chức các lớp đối tượng
■ Các kiểu dữ liệu
■ Biến, biểu thức và các phép toán xử lý dữ liệu
■ Các cấu trúc điều khiển chương trinh
■ Cơ chế xử lý ngoại lệ trong chương trình Java
■ Một số lớp cấu trúc dữ liệu phổ dựng: mảng, string, StringBuf fer
2.1 Cấu trúc một chương trình Java
Các chương trình ứng dụng Java (ứng dụng độc lập hoặc Java applet) thường được tố chức thực hiện theo các Dự án (Project) Khi tạo ra một dự án phần mềm là tạo ra một thư mục (Folder, Directory) tương ứng trên máy tính Hệ thống phần mềm (chương trình) thường phức tạp nên khi phân tích thiết kế tluròng phải sử dựng "Nguyên lý chia dế trị" để chia chúng thành một số gói (Package), mỗi gói sẽ do một nhóm (Team) thực hiện Mỗi gói được tạo ra thành một thư mục con (SubFolder) tương ứng và có thể chứa nhiều lóp được lưu trữ thành các tệp (File) và mồi lóp (Class) sẽ bao gồm các thuộc tính và các phưong thức (method) đế xử lý dữ liệu, cấu trúc của chương trình ứng dụng Java tống quát
Trang 29Phần đầu cùa một chương trình J a v a xác định các gói thư viện cần tạo lập hoặc nhập vào và sử dụng trong chương trình Những gói này sẽ được chỉ dẫn nhập vào
để sử dụng trong chương trình với sự trợ giúp cùa lệnh nhập i m p o r t Ví dụ lệnh:
i m p o r t j a v a a w t * ;
nhập gói j a v a a w t chứa các lớp, giao diện để tạo các đối tượng giao diện đô hoạ GUI ( G r a p h i c s U s e r I n t e r f a c e ) Ký hiệu để chi tất cả các lớp, giao diện thuộc gói này
Trường hợp muốn tạo ra một gói thư viện các lớp, giao diện, ví dụ gói myProg, chúng ta sử dụng câu lệnh sau ở đầu f i l e chương trình:
p a c k a g e m yP rog;
Từ khoá p a c k a g e được dùng dê đóng gói các lớp, giao diện trong chương trình lại với nhau thành một gói và đặt tên là myProg Đây là một cách hữu hiệu để lưu trữ các lớp gần giống nhau về đặc tính, hoặc hành vi hoạt động thành một khối thông nhất Sau đó, nhũng ai cần sử dụng thì nhập i m p o r t đó vào đầu chương trình cùa mình
Trong J a v a , tất cả các mã, bao gồm các biến, các phương thức (hàm) và các khai báo, định nghĩa cần dược thực hiện trong phạm vi một lớp Bởi vậy, tất cả các khai báo, định nghĩa lớp được tiến hành sau lệnh nhập i m p o r t Một chương trình có thế có một hoặc nhiều lớp, giao diện ( i n t e r f a c e ) Những lớp này có thế kế thừa ( e x t e n d s ) từ lớp khác hoặc cài dặt ( i m p l e m e n t s ) các giao diện Mỗi lệnh đều được kết thúc bời dấu chấm pliấy Ngoài các câu lệnh, chương trình còn có thể bao gồm các ghi chú, chỉ dẫn Khi dịch, chưong trình dịch sẽ tự loại bó các ghi chú này
Trong tất cả các chương trình, chúng ta sử dụng định danh ( I d e n t i f i e r ) đế xác định tên gọi duy nhất cho các phần tử của chương trình như: tên biến, tên hàm, tên trường dữ liệu, Trong chương trình J a v a có sáu loại tên gọi khác nhau là:
■ Tên gói ( p a c k a g e names);
■ Tên kiểu, lớp ( t y p e , c l a s s names);
■ Tên trường dữ liệu, biến thành phần dữ liệu ( f i e l d names);
■ Tên phương thức (m e th o d names);
■ Tên biến cục bộ kể cả tên biến tham số ( l o c a l v a r i a b l e names,
i n c l u d i n g p a r a m e t e r s ) ;
■ Tên nhãn ( L a b e l s )
Việc dặt các loại tên như trên cho phép khá linh hoạt trong chương trình J a v a Chúng ta có thể sử dụng cùng một tên gọi cho cả sáu loại tên gọi và chúng đưọc phân biệt theo ngữ cảnh (không gian tên gọi - n a m e s p a c e s ) của chúng trongchương trình Ví dụ chương trình:
Trang 30và trả lại kết quả là giá trị của tham so Reuse.
Đế tiện cho việc lập trình, đặc biệt đối với những dự án lớn có nhiều nhóm tham gia và dễ dàng theo dõi các chưong trình, chúng ta nên thống nhất cách đặt tên gọi trong các chương trình Tên gọi các phần tử của chương trình như tên lớp, tên hàm, tên biển, biến tham chiếu (đối tượng), tên hằng thường là một từ, hoặc gồm một số
từ ghép lại Tên gọi phải được đặt ngắn gọn, don giản và gần với nghĩa của các dối tượng mà chúng cần xử lý Trong J a v a , việc đặt tên phải thực hiện theo các quy ước thống nhất như sau:
■ Chí được bắt đầu bằng chữ cái, hoặc một dấu gạch dưới, hoặc một ký tự $
■ Không có khoảng trắng (dấu cách) giữa tên gọi
■ Từ ký tự thứ hai, có thế dùng các chữ cái, chữ số, dấu $, dấu gạch dưới
* Tên gọi không được trùng với các từ khoá
■ Có phân biệt chữ in hoa, chữ thường
Nưoài ra đế tiện theo dõi, chúng ta quy định thống nhất cách viết tên gọi các lóp, biến, phương thức, như sau:
* Tên lớp: Tất cả các chữ cái đầu của các từ trong tên lóp đều được viết in hoa
Ví dụ s i n h v i e n là tên của lóp sinh viên
* Tên biến đối tượng, biến tham chiếu: Giống như tên lớp, trừ từ đâu tiên viết
thường Ví dụ s i n h v i e n dược sử dụng đê dặt tên cho biển tham chiếu dời tượng của lóp S i n h v i e n
■ Têm hàm (phương thức): Giống như tên biến, nhưng bô sung thêm cặp ngoặc đon 0 còn được gọi là toán tử hàm Ví dụ sinhvien {) được đặt tên cho
hàm xử lý các thông tin về sinh viên chăng hạn Tât nhiên, các tên hàm còn được phân biệt với nhau về số các tham số, kiêu của các tham số dê tạo ra định danh (chữ ký) hàm (Function signature)
■ Tên đại lượng hang: Tất cả các chữ cái đều viết hoa, ví dụ P I là số 71 bất
biến trong chương trình
Vói quy ước đặt tên thống nhất như trên, chúng ta dễ dàng phân biệt dược tên gọi cua lóp, biến, hàm hay hằng mà không cần phải có thêm những chú thích như trong các chương trình khác Lưu ý, hầu hết trong các gói thư viện của JDK, trong mã nguồn mở đều thực hiện theo quy ước trên
30
Trang 31Tóm lại, cấu trúc cơ bản của một tệp mã nguồn J a v a có cấu trúc như sau:
[package packageName; ] // Khai báo tên gói, tuỳ chọn
[ im p o rt j ava a w t * ; ] // Khai báo tên thư viện sẵn có, nếu cần dùng// Khai báo và định nghĩa các lóp dạng
[Bố nghĩa] c l a s s ClassName [ e x te n d s AnyClass] [implements
InterfaceList] {
/* Ghi chú, nếu cần */
// Khai báo biến
// Khai báo hoặc định nghĩa các hàm, phương thức
}
// Khai báo các giao diện dạng
[Bố nghĩa] i n t e r f a c e InterfaceName [e x te n d s Anylnterface] {
// Định nghĩa các đại lượng hàng
// Chi khai báo các hàm (prototype): chì có định danh mà không có thân hàm}
Trong đó:
■ Thử tự các câu lệnh khai báo các biến, lớp, giao diện là không quan trọng,
* Cặp dấu ngoặc '[' và ']' dược sử dụng giống như trong cú pháp của C/C+ + , nghĩa là nội dung giữa chúng là tuỳ chọn ( o p t i o n ) , có thể có hoặc không cần sử dụng
■ Tuỳ chọn [Bổ nghĩa] (modifier) có the sử dụng các từ khoá bổ trọ’ xác định phạm vi cua lóp, giao diện, là một trong các từ khoá: public, abstract cho lóp, giao diện công khai, sử dụng đưọc ỏ' mọi nơi hay là lớp, giao diện trừu tượng Đối vói lóp thì tuỳ chọn này có thê khai báo là lóp cuối final
■ Tuỳ chọn [ e x t e n d s A n y C la s s ] sử dụng khi cần xây dựng một lóp kế thừa một lóp cha đã được xây dựng trước trong các gói thư viện hay trong chưong trình là A n y C la s s Lưu ý, nếu không sử dụng tuỳ chọn này thì mặc định là kế thừa lóp O b j e c t trong gói j a v a l a n g Nghĩa là mọi lóp trong chưong trình J a v a đều là lóp con của một lóp nào đó và do vậy, chúng sẽ tạo thành cấu trúc cây mà gốc là lóp O b j e c t
* T u ỳ c h ọ n [ i m p l e m e n t o I n t c r f a c c L i a t ] đ ư ự c s ù d ụ n g đố cùi d ặ t c úchàm dã dược khai báo, chưa được định nghĩa nội dung thực hiện trong danh sách các giao diện InterfaceList InterfaceList gôm một hoặc nhiều giao diện phân cách nhau bằng dấu V-
■ Tuỳ chọn [extends Anylnterf ace] sử dụng khi cần khai báo một giao diện kế thừa giao diện Anylnterf ace
Khi biên soạn chưong trình chủng ta thường phải chi rõ tên (Name) cùa file chương trình Java, thư mục hiện thời làm việc (Current Directory), thư mục lưu các file chương trình nguồn (Source Path) và thư mục lưu kêt quá (Output Path) Thông thường cả ba thư mục trên chúng ta để cùng một đường dẫn và được gọi là thư mục hiện thời
Trang 32Chương trình ứng dụng J a v a có thể có nhiều f i l e chương trình Một f i l e chương trình có thể có nhiều lớp, giao diện được dịch và lưu ờ thư mục hiện thời
2.2 Các lớp đối tượng
Trong ngôn ngữ lập trình J a v a , lớp là một đơn vị khuôn mẫu ( T e m p l a te ) có chửa các thuộc tính, trường ( F i e l d ) dữ liệu xác định các đặc trưng và các phương thức (Method), hàm mô tả hành vi ứng xử của một nhóm các thực thể nào đó Lóp được sử dụng đê tạo ra đối tượng cho các biến tham chiếu ( R e f e r e n c e
v a r i a b l e ) của lóp đã được khai báo Đối tượng là các thể hiện ( i n s t a n c e ) , là
cá thế của một lóp Chúng hình thành nền tảng của chương trình J a v a
Một lớp đon thường được định nghĩa như sau:
■ C la ss N a m e là tên gọi chúng ta đặt cho lóp
* D a ta T y p e là kiểu dữ liệu, có thể là kiểu nguyên thuỷ như i n t , lo n g ,
f l o a t , hay kiểu lóp như lóp S i n h v i e n
■ varN am e là tên của biển thành phần dữ liệu cùa lóp
■ Tuỳ chọn [Đặc t í n h t r u y c ậ p ] xác dịnh phạm vi truy cập của biến thành phần dừ liệu, có thể là p u b l i c , p r o t e c t e d , p r i v a t e , s t a t i c ,
f i n a l hay mặc định
■ R e t u r n T y p e là kiểu trả lại kết quả của phương thức, hàm R e t u r n T y p e
có thể là D a ta T y p e khi phương thức cần trả lại kết quả tính toán hoặc void khi phương thức không cần trả lại kết quà tính toán
32
Trang 33■ methođName là tên của phương thức.
■ Tuỳ chọn [ p a r a m L i s t ] là danh sách các tham số hình thức bao gồm một dãy các khai báo dạng D ataT ype varName được ngăn cách nhau bởi dấu
> Ch trưng trình 2.1: Chương trình dơn giản nhập vào hai số nguyên và hiên thị
trung bình cộng cùa chúng được tố chức gồm có một lóp T ru n g B inhC ong như sau:// Chương trình TrungBinhCong j ava
import java.io.*;
public class TrungBinhCong {
public static void main (string [] args) {
catch(IOException loi) {
System.out.printIn(" Loivao/ra") ;
Dịch và thực hiện chương trình cho kết qua như hình 2.2
Hình 2.2 Kết quả chưomg trình TrungBinhCong
Trong chương trình 2.1, chúng ta cần nhập dữ liệu vào nên phải nhập gói thư viện
j a v a i o Lóp T r u n g B in h C o n g chỉ có một hàm m a in () và trong dó khai báo bốn biến cục bộ ( L o c a l) là:
i n t a, b ;
S t r i n g c h u o ỉ ;
D a t a l n p u t s t r e a m x a u = new D a t a l n p u t s t r e a m ( S y s t e m i n ) ;Chương trình J a v a thực hiện độc lập với các nền, nên vào/ra số liệu không đơn gian nhu những ngôn ngữ lập trình truyền thong mà phai thông qua những lớp thư viện đã đưọc xây dựng sẵn như lớp D a t a l n p u t s t r e a m Dữ liệu nhập vào luôn
ở dạng chuỗi các ký tự U n ic o d e đê đám bảo không phụ thuộc vào thiết bị phần cứng.
Trang 34Câu lệnh cuối ở trên khai báo một biến tham chiếu x a u và tạo lập đối tượng cua lóp băng toán tử new D a t a l n p u t S t r e a m ( S y s t e m i n )
Đe hiển thị một thông báo nhắc lên màn hình, ví dụ "Nhap v a o s o a =", ta SU' dụng lệnh
Một vấn đề nữa cần lưu ý là tham số của hàm S y s t e m o u t p r i n t I n () có thè
là các xâu (dãy các ký tự) và các số được ghép với nhau thông qua phép Tương
tự như đối với các phép cộng số học, thứ tự thực hiện phép cộng lả từ trái qua phai, nếu không có cặp ngoặc đơn làm thay đôi thứ tự ưu tiên Neu một trong hai toán hạng của phép V là dữ liệu số thì nó sẽ được chuyên đối thành dãy các chữ số (xâu) đê ghép với xâu còn lại
> Chương trình 2.2: Lóp S i n h v i e n có các thuộc tính họ và tên, địa chỉ, môn
học là công khai, còn điểm môn học cần che giấu được định nghĩa như sau:
// Chương trình Sinhvien java
public class sinhvienj
public String hoTen;
public String diaChi ;
public String monHoc;
private float diemMH;
static int SISO;
II CO li lẻ K-liai l)áơ cac hâm dẻ nhạ
II
// Mặc định kế thừa Obj ect // Khai báo biến tham chiếu cùa lóp // Khai báo biến tham chiếu cùa lóp // Khai báo biến tham chiếu của lớp // Khai báo biến nguyên thuý cùa lớp // Khai báo biến nguyên thuy tĩnh cùa lóp , tilẻn thị du liẹu
}
> Chương trình 2.3: Dê tiện lọi cho việc nhập dữ liệu, chúng ta có thể xây dựng
lóp M y ln p u t riêng và đặt ở gói i n p u t dược xem như là lóp chương trình thư viện dế mọi người cùng sử dụng Lóp M y ln p u t có các hàm s t a t i c để có thểgọi trực tiêp thông qua tên lóp:
34
Trang 35public class Mylnput{
static private Datalnputstream input =
new Datalnputstream(System.in) ;public static byte readByte() {
}catch (IOException ex) {
System out print In (" Loi vao/ ra " + ex) ;
return Byte MAXVALUE ;
//Trà lại giá trị cực đại của byte khi có ngoại lệ vào/ra
public static short readshort () {
}catch (IOException ex) {
System out println ("Loi vao/ra " + ex) ;
return Short MAXVALUE ;
//Trả lại giá trị cực đại của short khi có ngoại lệ vào/ra
}catch (IOException ex) {
System out println ( "Loi vao/ra " + ex) ;
return Integer MAXVALUE ;
// Trà lại giá trị cực đại cứa int khi có ngoại lệ vào/ra
Trang 361 = Long.parseLong(line) ;
feturn 1 ;
Ịcatch (IOException ex) {
System out println ("Loi vao/ra " + ex) ;
return Long MAXVALUE ;
// Trà lại giá trị cực đại cùa long khi có ngoại lệ vào/ra
}catch (IOException ex) {
System out print In (" Loi vao/ ra " + ex) ;
return Float MAXVALUE ;
// Trà lại giá trị cực đại cùa float khi có ngoại lệ vào/ra
}catch (lOException ex) {
System.out println ( "Loi vao/ra " + ex) ;
return Doublet MAXVALUE ;
// Trá lại giá trị cực đại của double khi có ngoại lệ vào/ra
}
}
public static char readchar () {
try{
String line = input.readLine() ;
return line char At ( 0 ) ; // Trả lại ký tự dầu
( f a t - r h ( T D E v r p p t - i o n n V ) {
System out println ("Loi vao/ra " + ex) ;
}
}
public static String readstring () {
try{String line = input.readLine() ;
return line ;
}catch (IOExceptionex) {
System out println (" Loi vao/ra " + ex) ;
return null; // Trả lại null (xâu trống) khi có ngoại lệ vào ra
}
}
36
Trang 37Lint ỷ:
■ Trong các gói thư viện của Java, cách đặt tên lớp, hàm được thực hiện theo chuân như đã nêu ở chương 1, nó tạo ra một quy luật rất dề nhớ Ví dụ, câu lệnh Integer.parselnt(line) gọi hàm thành phần parselnt(line) cua lóp Integer để chuyền line là xâu các chữ số thành một số nguyên Tương tự, đối với các số kiểu nguyên thuỷ ta chì cần thay tương ứng tên các kiêu vào theo đúng quy ước là được, ví dụ đối vói kiêu float sẽ là Float.par se Float (line)
■ Khi dịch lóp Mylnput thành công, một thư mục con input cùa thư mục hiện thời đưọc tạo ra là input và ớ dó lưu trữ file Mylnput class Những ai muốn sử dụng lóp Mylnput thì nhập vào theo câu lệnh
Lim ý: Trong Java, mọi biến tham chiếu, biến đối tượng đều phải sử dụng phương
thức khỏi tạo đế tạo lập dôi tượng trước khi sử dụng chúng trong chương trình
> Chương trình 2.4: Lóp Sinhvien có các thuộc tính như dã nêu trong chương
trình 2.2 Chúng ta tiếp tục xây dựng các phương thức dê khơi tạo, nhập thông tin
sử dụng gói input ờ chương trình trên và hiến thị các thông tin của sinh viên.// Chương trình sinhvien java
i m p o r t input Mylnput; // Nhập vào gói input có lóp Mylnput
s t a t i c i n t siSo; // Khới tạo mặc định là 0 khi tạo lập đối tượng dầu tiên
// Phương thức khởi tạo không tham số - mặc định
p u b l i c Sinhvien () { //Khới tạo mặc định các thuộc tính
}
// Phương thức khởi tạo đối tượng có dủ tham số
public SinhVien(String men, string dem, stiiny miioc, Ciocvt dMH){
Trang 38//Hàm hiến thị thông tin cùa sinh viên
public void hienThi () {
System out println (" \tHo ten sinh vien : " + hoTen) ;System.out.println(" \tDia chi: " + diaChi);
System.out.println("\tMon hoc : " + monHoc) ;System.out.println("\tDiem mon hoc:" + diemMH) ;
// Hàm cập nhật lại điếm môn học
public void setDiem ( float d) {
public static void main (string!] args) {
sinhvien sv = new sinhvien () ;
System out println (" — Nhap thong tin cua sinh vien — \n")sv.nhapTin();
System out print In (" — Thông tin sinh vien da nhap — \n") sv.hienThi();
Trang 39Lav ý: Trong dãy các ký tự của một xâu có sứ dụng các ký tự đặc biệt sau:
■ Biến dữ liệu thành phan lớp: Các biến khai báo của lóp được sử dụng đê lưu
trữ các dữ liệu đặc trưng về các thuộc tính của đối tượng Có hai loại biến thành phần:
1 Biến khai báo vói kiểu dữ liệu nguyên thuỷ được gọi là biến kiêu nguyên
thuỷ, gọi tắt là biến nguyên thuỳ;
2 Biến khai báo vói kiểu là lóp được gọi là biến tham chiếu.
■ Biên cục bộ là biến chi có thê truy xuất trong khối lệnh nó dược khai báo
Các biến cục bộ thường được sử dụng trong thân của phương thức để định nghĩa nội dung công việc cần thực hiện của chương trình Các biến cục bộ cũng có thể là biến kiêu nguyên thuỷ hoặc biến tham chiếu
Cú pháp khai báo biến cục bộ là:
[Bổ nghĩa] DataType varName ;
Trong đó:
■ Tuỳ chọn [Bổ nghĩa] có thê là final đê xác định biến cục bộ varName khi đã gán giá trị thì sẽ trở thành bất biến
■ DataType là kiêu dữ liệu của biến
■ varName là tên biên cục bộ
Ví dụ, biến s v khai báo trong hàm main () ỏ' chương trình 2.4 là biến tham chiêu cục bộ
2.3.1 Kiêu dũ' liệu nguyên thuỷ
Mỗi ngôn ngữ lập trình đều định nghĩa sẵn một số kiểu dữ liệu cơ bản được gọi là
kiêu nguyên thuy (primitive type) Java có các kiểu nguyên thuỷ được phân
chia theo nhóm như nhu' hình 2.4
Trang 40boolean char byte short int long float double
Hình 2.4 Các kiểu nguyên thuỷ (Primitive type)
Các kiểu nguyên thuỷ được định nghĩa thông qua độ dài các b i t , và phạm vi xác định như bảng 2.2
Bảng 2.2 Các kiểu nguyên thuỷ
Dữ liệu boolean dùng đẻ lưu các giá trị "true" ("Đúng") hoặc "false"
("sai") Giá trị mặc định là "false".
Kiểu short dùng để lưu các số có giá trị nhỏ dưới 32 767 Giá trị mặcđịnh lá 0
+2 147 483 648
Kiểu int dùng để lưu một số có giá trị lớn đến 2 147 483 648 Giá trị mặc định là 0.
Kiểu long được sử dụng để lưu một
số cố giá trị rất lớn đến 264 - 1 Giá trị mặc định là OL.
+3.40292347E+38
Kiểu float dùng để lưu các số thập phân đến 3.40292347E+38 Giá tri mặc định lá 0.0F
-1.79769313486231570E+308
đến +1.79769313486231570E+308
Kiểu double dùng để lưu các số thập phân có giá trị lớn đến
1,79769313486231570E+308 Giá trị mặc định là 0.0D
40