LỜI NĨI ĐẦU
Hiện nay có nhiều ngơn ngữ lập trình được sử dụng để viết các ứng dụng trên
máy tính như: C++, C#, VB, VB.Net…. Mỗi ngơn ngữ đều có một thế mạnh riêng, nếu
biết lựa chọn một ngôn ngữ phù hợp để xây dựng ứng dụng sẽ giúp cho các chun gia
lập trình tích kiệm được thời gian, cơng sức và giúp xử lý kỹ thuật lập trình đơn giản
và thuận tiện hơn.
Java là ngơn ngữ lập trình hướng đối tượng thuần túy với nhiều đặc trưng ưu việt
so với các ngơn ngữ lập trình hướng đối tượng khác như tính độc lập với nên, Tính Đa
nhiệm - đa luồng tính bảo mật, khả năng đóng gói, giao tiếp….
Khác với các ngơn ngữ lập trình hướng đối tượng khác như c++ hay c# là ngay
từ khi ra đời mục tiêu của java là phát triển một ngôn ngữ đơn giản, nhỏ nhẹ và có thể
chạy trên nhiều mơi trường khác nhau, do đó Java đặc biệt thích hợp để viết chương
trình cho các ứng dụng trên mạng, trên các thiết bị di động, …, việc việt các ứng dụng
này bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác.
Chính vì vậy trong rất nhiều ngơn ngữ lập trình đang được các chuyên gia sử
dụng để viết nên các ứng dụng trên máy tính, trong doanh nghiệp, trên các thiết bị cầm
tay... Java luôn là ngôn ngữ được các chuyên gia lựa chọn ở mức ưu tiên số 1. Java đã
được ứng dụng rộng rãi và trở thành một ngơn ngữ lập trình được ưa chuộng bậc nhất
hiện nay. Ở Việt Nam, Java đang rất phát triển các doanh nghiệp đã sử dụng Java
trong các sản phẩm Game, phần mềm, ngân hàng, thiết bị cầm tay, ứng dụng
web,…Những chuyên gia thành thạo ngôn ngữ này luôn đứng trước sự săn đón của
hàng trăm nghìn việc làm và cơ hội thăng tiến.
Tập bài giảng này được xây dựng gồm có 6 chương trình bày chi tiết về lập trình
Java cơ bản, bám sát theo khung chương trình mơn lập trình Java của Trường Đại học
Sư phạm Kỹ thuật Nam Định. Nhằm trang bi cho sinh viên những kiến thức cơ bản về
lập trình Java tạo nền tảng để sinh viên tiếp cận với ngôn ngữ này cũng như học các
học phần khác trong chương trình như thực tập lập trình trên thiết bị di động. Tập bài
giảng được sử dụng làm tài liệu giảng dạy cho các giáo viên, giảng viên và tài liệu học
tập cho học sinh – sinh viên thuộc Trường Đại học Sư phạm Kỹ thuật Nam Định.
Ngồi ra có thể làm tài liệu tham khảo cho mọi đối tượng quan tâm đến lập trình Java.
NHĨM TÁC GIẢ
i
MỤC LỤC
CHƢƠNG 1: LẬP TRÌNH JAVA CƠ BẢN ......................................................1
1.1. Giới thiệu về Java và cài đặt .....................................................................1
1.1.1. Lịch sử Java ..........................................................................................1
1.1.2. Đặc trưng của Java ................................................................................1
1.1.3. Các kiểu chương trình Java ..................................................................5
1.1.4. Máy ảo Java ..........................................................................................6
1.1.5. Bộ công cụ phát triển JDK....................................................................8
1.1.6. Cài đặt JDK .........................................................................................11
1.2. Ngơn ngữ lập trình Java..........................................................................17
1.2.1. Mở đầu lập trình với Java ...................................................................17
1.2.2. Cấu trúc chương trình Java .................................................................17
1.2.3. Kiểu dữ liệu cơ sở, hằng, biến ............................................................20
1.2.4. Kiểu dữ liệu Mảng (Array) .................................................................27
1.2.5. Toán tử và biểu thức ...........................................................................29
1.2.6. Các cấu trúc điều khiển.......................................................................32
1.2.7. Hàm – Phương thức (Function – Method)..........................................38
1.2.8. Nhập xuất dữ liệu ................................................................................39
Câu hỏi và bài tập chƣơng 1 ..........................................................................43
CHƢƠNG 2: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG TRONG JAVA ............45
2.1. Giới thiệu về lập trình hƣớng đối tƣợng ................................................45
2.2. Trừu tƣợng hố dữ liệu ...........................................................................47
2.3. Lớp và định nghĩa lớp trong Java ..........................................................50
2.4. Đối tƣợng ..................................................................................................62
2.5. Thiết lập và hủy .......................................................................................63
2.5.1. Thiết lập ..............................................................................................63
2.5.2. Hủy......................................................................................................65
2.6. Các đặc tính của lớp ................................................................................66
2.6.1. Tính bền vững .....................................................................................66
ii
2.6.2. Tính thừa kế ........................................................................................68
2.6.3. Tính đa thừa kế ...................................................................................72
2.6.4. Tính đa hình ........................................................................................73
2.6.6. Lớp trừu tượng ....................................................................................76
2.7. Xử lý ngoại lệ ............................................................................................80
Câu hỏi và bài tập chƣơng 2 ..........................................................................84
CHƢƠNG 3: CÁC GĨI VÀ LẬP TRÌNH VÀO RA .......................................92
3.1. Các gói trong Java ...................................................................................92
3.1.1. Giới thiệu ............................................................................................92
3.1.2. Các giao diện ......................................................................................92
3.1.3. Các gói ................................................................................................95
3.1.4. Gói và điều khiển truy xuất ................................................................98
3.1.5. Gói Java.lang ......................................................................................99
3.2. Các dịng (Stream) .................................................................................115
3.3. Gói Java.io ..............................................................................................115
3.3.1. Lớp InputStream ...............................................................................115
3.3.2. Lớp OutputStream ............................................................................117
3.3.3. Vào ra mảng byte ..............................................................................117
3.3.4. Vào ra tập tin ....................................................................................119
3.3.5. Nhập xuất lọc ....................................................................................121
3.3.6. Vào ra có sử dụng bộ đệm ................................................................122
3.3.7. Lớp Reader và Writer .......................................................................125
3.3.8. Nhập xuất chuỗi ................................................................................125
3.3.9. Lớp PrinterWriter .............................................................................128
3.3.10. Giao diện DataInput ........................................................................129
3.3.11. Giao diện DataOutput .....................................................................129
3.3.12. Lớp RandomAccessFile ..................................................................130
3.4. Gói java.awt.print ..................................................................................132
Câu hỏi và bài tập chƣơng 3 ........................................................................133
iii
CHƢƠNG 4: LẬP TRÌNH ĐỒ HOẠ AWT ...................................................136
4.1. Giới thiệu về AWT .................................................................................136
4.2. Container (vật chứa)..............................................................................137
4.2.1. Giới thiệu ..........................................................................................137
4.2.2. Frame ................................................................................................137
4.2.3. Panel..................................................................................................138
4.2.4. Dialog................................................................................................139
4.3. Thành phần (Component) .....................................................................140
4.3.1. Giới thiệu ..........................................................................................140
4.3.2. Nhãn ..................................................................................................140
4.3.3. Ô văn bản ..........................................................................................142
4.3.4. Vùng văn bản ....................................................................................144
4.3.5. Nút ....................................................................................................145
4.3.6. Checkbox và Radio Button ..............................................................147
4.3.7. Danh sách lựa chọn ...........................................................................149
4.4. Quản lý cách trình bày ..........................................................................151
4.4.1. FlowLayout manager .......................................................................152
4.4.2. BorderLayout Manager ....................................................................153
4.4.3. Card Layout Manager .......................................................................154
4.4.4. GridLayout Manager ........................................................................156
4.4.5. GridBagLayout Manager ..................................................................158
4.5. Xử lý các sự kiện ....................................................................................163
4.6. Thực đơn .................................................................................................169
Câu hỏi và bài tập chƣơng 4 ........................................................................173
CHƢƠNG 5: JAVA APPLET VÀ SWING ....................................................175
5.1. Java Applet .............................................................................................175
5.1.1. Giới thiệu về Applet .........................................................................175
5.1.2. Cấu trúc của một Applet ...................................................................175
5.1.3. Chu trình sống của một Applet .........................................................178
iv
5.1.4. Truyền tham số cho Applet...............................................................179
5.1.5. Lớp Graphics ....................................................................................181
5.1.6. Điều khiển màu .................................................................................190
5.1.7. Điều khiển Font ................................................................................191
5.1.8. Lớp FontMetrics ...............................................................................192
5.1.9. Chọn chế độ để vẽ.............................................................................196
5.2. Java Swing ..............................................................................................198
5.2.1 Giới thiệu về Swing ...........................................................................198
5.2.2. Các biểu tượng và nhãn ....................................................................199
5.2.3. Các trường văn bản ...........................................................................200
5.2.4. Nút nhấn ...........................................................................................201
5.2.5. Lớp JButton ......................................................................................202
5.2.6. Hộp kiểm tra .....................................................................................202
5.2.7. Radio Button .....................................................................................203
5.2.8. ComboBox ........................................................................................203
5.2.9. Tabbed Pane ......................................................................................203
5.2.10. Scroll Pane ......................................................................................204
5.2.11. Cây ..................................................................................................205
5.2.12. Bảng ................................................................................................207
Câu hỏi và bài tập chƣơng 5 ........................................................................210
CHƢƠNG 6: LẬP TRÌNH ĐA LUỒNG ........................................................224
6.1. Giới thiệu về lập trình luồng .................................................................224
6.2. Luồng và đa luồng .................................................................................224
6.3. Tạo và quản lý luồng .............................................................................225
6.4. Vòng đời của luồng ................................................................................228
6.5. Trạng thái của luồng và các phƣơng thức của lớp Thread ...............228
6.6. Thời gian biểu luồng ..............................................................................229
6.7. Luồng chạy ngầm ...................................................................................231
6.8. Đa luông với Applet ...............................................................................232
v
6.9. Nhóm luồng ............................................................................................233
6.10. Sự đồng bộ luồng..................................................................................234
6.10.1. Đồng bộ mã.....................................................................................235
6.10.2. Sử dụng khối đồng bộ (Synchronized Block) ................................237
6.10.3. Ưu điểm của các phương thức đồng bộ ..........................................240
6.11. Cơ chế đợi thơng báo ...........................................................................240
6.12. Khố chết (Deadlock) ..........................................................................244
6.13. Thu dọn rác ..........................................................................................246
Câu hỏi và bài tập chƣơng 6 ........................................................................250
TÀI LIỆU THAM KHẢO ............................................................................254
vi
DANH MỤC CÁC HÌNH VẼ
Bảng 1.1. Bảng các ký hiệu ghi chú .....................................................................18
Bảng 1.2. Các từ khóa của Java ............................................................................20
Bảng 1.3. Các kiểu số nguyên ..............................................................................21
Bảng 1.4. Các phép toán trên kiểu số nguyên.......................................................21
Bảng 1.5. Các loại số thực ....................................................................................22
Bảng 1.6. Các phép toán trên kiểu số thực ...........................................................22
Bảng 1.7. Giá trị mặc định ....................................................................................23
Bảng 1.8. Hằng số nguyên ....................................................................................25
Bảng 1.9. Các hằng số thực ..................................................................................26
Bảng 1.10. Toán tử 2 ngơi ....................................................................................30
Bảng 1.11. Danh sách các tốn tử đơn .................................................................30
Bảng 1.12. Danh sách các toán tử gán ..................................................................31
Bảng 1.13. Danh sách các toán tử trên kiểu số thực .............................................31
Bảng 1.14. Danh sách các phép tốn logic ...........................................................31
Bảng 2.1. Một ví dụ về hai phương pháp giải quyết OOP và Structured .............47
Bảng 2.2. Sử dụng các bổ nghĩa ...........................................................................54
Bảng 2.3. Các exception thường gặp ....................................................................83
Bảng 2.4. Các phương thức thông dụng của Throwable ......................................84
Bảng 3.1. Truy cập đến các thành phần của lớp ...................................................99
Bảng 3.2. Các lớp trình bao bọc cho các kiểu dữ liệu nguyên thủy. ....................99
Bảng 3.3. Lớp Runtime .......................................................................................110
Bảng 3.4. Lớp System. ........................................................................................111
Bảng 3.5. Lớp Object. .........................................................................................114
Bảng 3.6. Các phương thức của lớp InputStream ...............................................116
Bảng 3.7. Các phương thức lớp OutputStream...................................................117
Bảng 3.8. Các phương thức của giao diện DataInput .........................................129
Bảng 3.9. Các phương thức của giao diện DataOutput ......................................130
Bảng 4.1. Các phương thức của Label ................................................................141
vii
Bảng 4.2. Các phương thức của TextField .........................................................143
Bảng 4.3. Các phương thức của TextArea ..........................................................144
Bảng 4.4. Các biến thành viên của lớp GridBagConstraints ..............................159
Bảng 4.5. Các biến thành viên dữ liệu tĩnh của biến fill ....................................159
Bảng 4.6. các sự kiện của AWT .........................................................................164
Bảng 5.1. Các phương thức của một applet ........................................................176
Bảng 5.2. Phạm vi giá trị của các thành phần màu .............................................190
Bảng 5.3. Các giá trị RGB ..................................................................................190
Bảng 5.4. Các màu thường gặp ...........................................................................191
Bảng 5.5. Các lớp thành phần Swing..................................................................199
Bảng 5.6. Các hàm sử dụng của JLabel ..............................................................200
Bảng 5.7. Các hằng số ........................................................................................205
Bảng 6.1. Các phương thức của một lớp luồng ..................................................229
viii
DANH MỤC CÁC HÌNH VẼ
Hình 1.1. Cách biên dịch truyền thống ...................................................................3
Hình 1.2. Dịch chương trình Java ...........................................................................3
Hình 1.3. Trang web tải bộ cơng cụ Java .............................................................12
Hình 1.4. Biểu tượng Java Download ...................................................................12
Hình 1.5. Lựa chọn bản quyền ..............................................................................12
Hình 1.6. Bộ JDK cho Windows bản 64 bit .........................................................12
Hình 1.7. Màn hình cài đặt đầu tiên......................................................................13
Hình 1.8. Màn hình Custom Setup .......................................................................13
Hình 1.9. Màn hình Description Folder ................................................................13
Hình 1.10. Màn hình Description Folder ..............................................................14
Hình 1.11. Đường dẫn của thư mục cài đặt Java ..................................................14
Hình 1.12. Màn hình Computer Properties ...........................................................15
Hình 1.13. Màn hình System Properties ...............................................................15
Hình 1.14. Màn hình Environment Variables .......................................................16
Hình 1.15. Màn hình Edit System Variable ..........................................................16
Hình 1.16. Màn hình cửa sổ run ...........................................................................16
Hình 1.17. Màn hình Command Prompt ..............................................................16
Hình 3.1. Minh họa khái niệm của String Pool. .................................................101
Hình 3.2. Kết quả chạy ví dụ 3.22 ......................................................................112
Hình 3.3. Kết quả chạy ví dụ 3.23 ......................................................................114
Hình 3.4. Kết quả chạy ví dụ 3.25 ......................................................................119
Hình 3.5. Kết quả chạy ví dụ 3.26 ......................................................................121
Hình 3.6. Kết quả chạy ví dụ 3.27 ......................................................................125
Hình 3.7. Kết quả chạy ví dụ 3.28 ......................................................................127
Hình 3.8. Kết quả chạy ví dụ 3.29 ......................................................................128
Hình 3.9. Kết quả chạy ví dụ 3.30 ......................................................................132
Hình 4.1. Hệ thống cây phân cấp lớp AWT .......................................................137
Hình 4.2. Kết quả chạy ví dụ 4.1 ........................................................................138
ix
Hình 4.3. Kết quả chạy ví dụ 4.2 ........................................................................139
Hình 4.4. Các lớp thành phần .............................................................................140
Hình 4.5. Kết quả chạy ví dụ 4.3 ........................................................................142
Hình 4.6. Kết quả chạy ví dụ 4.4 ........................................................................143
Hình 4.7. Kết quả chạy ví dụ 4.5 ........................................................................145
Hình 4.8. Kết quả chạy ví dụ 4.6 ........................................................................147
Hình 4.9. Kết quả chạy ví dụ 4.7 ........................................................................149
Hình 4.10. Kết quả chạy ví dụ 4.8 ......................................................................151
Hình 4.11. Kết quả chạy ví dụ 4.9 ......................................................................153
Hình 4.12. BorderLayout ....................................................................................154
Hình 4.13. Kết quả chạy ví dụ 4.10 ....................................................................156
Hình 4.14. Kết quả chạy ví dụ 4.10 ....................................................................158
Hình 4.15. Kết quả chạy ví dụ 4.12 ....................................................................162
Hình 4.16. Kết quả chạy ví dụ 4.13 ....................................................................167
Hình 4.17. Gói Event ..........................................................................................167
Hình 4.18. Event Listener ...................................................................................168
Hình 4.19. Action Listener .................................................................................168
Hình 4.20. Item Listener .....................................................................................168
Hình 4.21. Window Listener ..............................................................................169
Hình 4.22. Các Component ................................................................................169
Hình 4.23. Kết quả chạy ví dụ 4.14 ....................................................................172
Hình 4.24. Pop-up menu .....................................................................................173
Hình 5.1. Kết quả chạy ví dụ 5.1 ........................................................................178
Hình 5.2. Chu trình sống của một applet ............................................................178
Hình 5.3. Kết quả chạy ví dụ 5.2 ........................................................................180
Hình 5.4. Kết quả chạy ví dụ 5.3 ........................................................................184
Hình 5.5. Kết quả chạy ví dụ 5.4 ........................................................................188
Hình 5.6. Kết quả chạy ví dụ 5.5 ........................................................................189
Hình 5.7. Kết quả chạy ví dụ 5.6 ........................................................................194
x
Hình 5.8. Kết quả chạy ví dụ 5.7 ........................................................................196
Hình 5.9. Kết quả chạy ví dụ 5.8 ........................................................................198
Hình 6.1. Kết quả thực hiện ví dụ 6.2 .................................................................227
Hình 6.2. Vịng đời của luồng.............................................................................228
Hình 6.3. Kết quả chạy ví dụ 6.3 ........................................................................231
Hình 6.4. Kết quả chạy ví dụ 6.4 ........................................................................233
Hình 6.5. Kết quả chạy ví dụ 6.5 ........................................................................237
Hình 6.6. Kết quả hiển thị của ví dụ 6.5 khơng có sự đồng bộ ..........................237
Hình 6. 7. Kết quả sau mỗi lần kích chuột..........................................................243
Hình 6.8. Kết quả thực hiện ví dụ 6.8 .................................................................246
Hình 6. 9. Kết quả chạy ví dụ 6.9 .......................................................................249
xi
CHƢƠNG 1: LẬP TRÌNH JAVA CƠ BẢN
1.1. Giới thiệu về Java và cài đặt
1.1.1. Lịch sử Java
Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) doSun Microsystem đưa ra
vào giữa thập niên 90.
Chương trình viết bằng ngơn ngữ lập trình Java có thể chạytrên bất kỳ hệ thống
nào có cài máy ảo Java (Java VirtualMachine).
Ngơn ngữ lập trình Java do James Gosling và các công sựcủa Công ty Sun
Microsystem phát triển.
Đầu thập niên 90, Sun Microsystem tập hợp các nhà nghiêncứu thành lập nên
nhóm đặt tên là Green Team. Nhóm GreenTeam có trách nhiệm xây dựng cơng nghệ
mới cho ngành điệntử tiêu dùng. Để giải quyết vấn đề này nhóm nghiên cứu pháttriển
đã xây dựng một ngơn ngữ lập trình mới đặt tên là Oaktương tự như C++ nhưng loại
bỏ một số tính năng nguy hiểmcủa C++ và có khả năng chạy trên nhiều nền phần cứng
khácnhau. Cùng lúc đó WorldWide Web bắt đầu phát triển và Sun đãthấy được tiềm
năng của ngôn ngữ Oak nên đã đầu tư cải tiếnvà phát triển. Sau đó khơng lâu ngơn ngữ
mới với tên gọi làJava ra đời và được giới thiệu năm 1995.
Đến quý II năm 1995, Sun Microsystems công bố chính thức Java và nó trở
thành một cơng cụ mạnh mẽ cho việc phát triển các ứng dụng trên Internet.
Java được xây dựng chủ yếu trong bộ công cụ phát triển JDK (Java Development
Kit) nó gồm các trình biên dịch, thông dịch, giúp đỡ, soạn tài liệu, thư viện chuẩn…
sau đó các nhà phát triển phần mềm đã xây dựng thêm rất nhiều nhánh mới như Java
Mail (Java-Thư tín), Java TAPI (Java-Viễn thông)…
Bắt đầu với JDK 1.0 vào 1995, đến năm 1996 Sun đưa ra phiên bản JDK 1.1,
năm 1998 ra đời phiên bản JDK 1.2 và hiện nay đã có phiên bản JDK 1.7.
Java là tên gọi của một hịn đảo ở Indonexia, Đây là nơinhóm nghiên cứu phát
triển đã chọn để đặt tên cho ngơn ngữlập trình Java trong một chuyến đi tham quan và
làm việc trênhòn đảo này. Hòn đảo Java này là nơi rất nổi tiếng với nhiềukhu vườn
trồng cafe, đó chính là lý do chúng ta thường thấybiểu tượng ly cafe trong nhiều sản
phẩm phần mềm, cơng cụ lậptrình Java của Sun cũng như một số hãng phần mềm khác
đưara.
1.1.2. Đặc trƣng của Java
Đơn giản
1
Hướng đối tượng
Độc lập phần cứng và hệ điều hành
Mạnh
Bảo mật
Phân tán
Đa luồng
Động
a) Đơ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. Do vậy Java loại bỏ các đặc trưng phức tạp của C và C++
như thao tác con trỏ, thao tác định nghĩa chồng tố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.
b) Hƣớng đối tƣợng
Java được thiết kế xoay quanh mơ hình hướng đối tượng. Vì vậy trong Java, tiêu
điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó. Dữ liệu và các phương
pháp mô tả trạng thái và cách ứng xử của một đối tượng trong Java.
c) Độ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. Chúng được thể hiện ở mức mã nguồn và mức nhị phân.
Ở mức mã nguồn, người lập trình cần mơ tả kiểu cho mỗi biến. Kiểu dữ liệu
trong Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau. Java có
riêng một thư viện các lớp cơ sở. Vì vậy chương trình Java được viết trên một máy có
thể dịch và chạy trơn tru trên các loại máy khác mà không cần viết lại.
Tính độc lập ở mức nhị phân, một chương trình đã biên dịch có thể chạy trên
nhiều nền (phần cứng, hệ điều hành) khác mà không cần dịch lại mã nguồn. Tuy vậy
cần có phần mềm máy ảo Java (sẽ đề cập đến ở phần sau) hoạt động như một trình
thơng dịch tại máy thực thi.
2
Hình 1.1. Cách biên dịch truyền thống
Đố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. Hình 1.2 thể hiện quá trình để
thực thi chương trình viết bằng C++ trên các loại máy khác nhau.
Hình 1.2 Quá trình thực thi chương trình viết bằng Java trên các loại máy khác
nhau.
Hình 1.2. Dịch chương trình Java
Mơi trường phát triển của Java được chia làm hai phần: Trình biên dịch và trình
thơng dịch. Khơng như C hay C++, trình biên dịch của Java chuyển mã nguồn thành
dạng bytecode độc lập với phần cứng mà 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 bytecode, tại mỗi máy cần phải có
trình thơng dịch của Java hay cịn gọi là máy ảo Java. Máy ảo Java chuyển bytecode
thành mã lệnh mà CPU thực thi được.
d) Mạnh mẽ
Java là ngôn ngữ yêu cầu chặt chẽ về 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. 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ỏ một số loại lỗi lập trình nhất định.
3
Java khơng sử dụng con trỏ và các phép tố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 ngồi
giới hạn kích thước. Java kiểm tra sự chuyển đổi kiểu dữ liệu từ dạng này sang dạng
khác lúc 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
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 qn 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ớ. Q 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 nữa (garbage collection).Cơ chế bẫy lỗi của Java giúp đơn giản hóa q
trình xử lý lỗi và hồi phục sau lỗi.
e) Bảo mật
Viruses 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ó Java, các lập trình viên phải quétVirus các tệp trước khi tải về hay thực hiện chúng.
Thông thường việc này cũng khơng loại trừ hồn tồn Virus. Ngồi ra chương 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à người sử dụng không hề hay biết.
Java cung cấp một mơi trường quản lý thực thi chương trình. Nó cho rằng khơng
có một đoạn mã nào là an tồn cả. Vì vậy Java khơng chỉ là ngơn ngữ lập trình thuần
t mà cịn cung cấp nhiều mức để kiểm sốt tính an tồn khi thực thi chương trình.
Ở lớp đầu tiên, dữ liệu và các phương thức được đóng gói bên trong lớp. Chúng
chỉ được truy xuất thông qua các giao diện mà lớp cung cấp. Java 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 ngồi kích thước của mảng bằng kỹ thuật tràn và cũng cung cấp kỹ
thuật dọn rác trong bộ nhớ. Các đặc trưng này tạo cho Java an toàn tối đa và có khả
năng cơ động cao.
Trong lớp thứ hai, trình biên dịch kiểm sốt để đảm bảo mã là an toàn, và tuân
theo các nguyên tắc của Java.
Lớp thứ ba được đảm bảo bởi trình thơng dịch. Chúng kiểm tra xem bytecode có
đảm bảo các qui tắc an tồn trước khi thực thi.
Lớp thứ tư kiểm sốt việc nạp các lớp vào bộ nhớ để 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.
f) Phân tán
4
Java có thể dùng để xây dựng các ứng dụng có thể làm việc trên nhiều phần
cứng, hệ điều hành và giao diện đồ họa. Java được thiết kế hỗ trợ cho các ứng dụng
chạy trên mạng. Vì vậy chúng được sử dụng rộng rãi như là công cụ phát triển trên
Internet, nơi sử dụng nhiều nền tảng khác nhau.
g) Đa luồng
Chương trình Java đa luồng(Multithreading) để 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ồngnày
cho phép xây dựng các ứng dụng trên mạng chạy hiệu quả.
h) Động
Java được thiết kế như một ngôn ngữ động để đáp ứng cho những mơi trường
mở. Các chương trình Java chứa rất nhiều thông tin thực thi nhằm kiểm soát và truy
nhập đối tượng lúc chạy. Điều này cho phép khả năng liên kết động mã.
1.1.3. Các kiểu chƣơng trình Java
Chúng ta có thể xây dựng các loại chương trình Java như sau:
a) Applets
Applet là chương trình đượ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. Bạn có thể dùng Java để xây dựng Applet.
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.
b) Ứng dụng thực thi qua dịng lệnh
Các chương trình này chạy từ dấu nhắc lệnh và không sử dụng giao diện đồ họa.
Các thông tin nhập xuất được thể hiện tại dấu nhắc lệnh.
c) Ứng dụng đồ họa
Đây là các chương trình Java chạy độc lập cho phép người dùng tương tác qua
giao diện đồ họa.
d) Servlet
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 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 Servlet. Chúng cịn có thể được
5
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.
e) Ứ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.
1.1.4. Máy ảo Java
Máy ảo là một phần mềm mơ phỏng một máy tính thật. 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. 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 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 mà không phụ
thuộc vào phần cứng cụ thể. Trình thơng dịch trên mỗi máy sẽ chuyển tập lệnh này
thành chương 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:
Nạp các file .class
Quản lý bộ nhớ
Dọn “rác”
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 máy ảo Java(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 TimeJIT”. Các trình duyệt thơng dụng như Netscape hay IE đề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.
a) Quản lý bộ nhớ và dọn rác
Trong C, C++ hay Pascal người lập trình sử dụng phương pháp trực tiếp để cấp
phát và thu hồi bộ nhớ ở vùng “Heap”. Heap là vùng bộ nhớ lớn được phân chia cho
tất cả các luồng.
6
Để quản lý Heap, bộ nhớ được theo dõi qua các danh sách sau:
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ớ đầ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 heap.
“Coalescing” là kỹ thuật khác cũng giảm thiểu việc phân mảnh của heap bằng
cách gom lại các vùng nhớ chưa dùng liền nhau thành một khối lớn hơn. Còn kỹ thuật
sắp xếp lại các phần đã dùng để tạo vùng nhớ chưa sử dụng lớn hơn gọi là
“Compaction”.
Java sử dụng hai heap riêng biệt cho cấp phát vùng nhớ tĩnh và vùng nhớ động.
Một heap (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. Heap còn lại (heap động) đượ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 bên chứa con trỏ trỏ đến đối tượng đó.
“Handle” là cấu trúc bao gồm hai con trỏ. Một trỏ đến bảng phương thức của đối
tượng, con trỏ thứ hai trỏ đến chính đối tượng đó. Chú ý rằng khi “Compaction” cần
cập nhật lại giá trị con trỏ của cấu trúc “handle”.
Thuật tốn dọn rác có thể áp dụng cho các đối tượng đặt trong heap động. Khi có
yêu cầu về bộ nhớ, trình quản lý heap trước tiên kiểm tra danh sách bộ nhớ chưa cấp
phát. Nếu 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 đị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 finalize 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 ngồi như các file đang mở. Cơng việc
này khơng được trình dọn rác thực thi.
b) Quá trình kiểm tra file .class
Việc kiểm tra được áp dụng cho tất cả các file .class sắp được nạp lên bộ nhớ để
đảm bảo tính an tồn. Trình “Class Loader” sẽ kiểm tra tất cả các file .class không
thuộc hệ điề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
file .class có nguy cơ gây hư hỏng đến bộ nhớ, hệ thống file 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 một lớp.
File .class bao gồm ba phần logic là:
Bytecode
Thông tin về Class như phương thức, giao diện và các giá trị hằng số được
tập hợp trong quá trình biên dịch.
7
Các thuộc tính về lớp.
Các thơng tin của file .class được xem xét riêng rẽ trong các bảng sau:
Bảng Field chứa các thuộc tính
Bảng Method chứa các hàm của class
Bảng Interface và các hằng số.
Quá trình kiểm tra file .class đượ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 bảo tính cấu trúc và
tính tồn vẹn cú pháp của file .class được nạp.
Mức thứ hai sẽ xem xét file .class để đảm bảo các file này không vi phạm
các nguyên tắc về sự nhất quán ngữ nghĩa.
Mức thứ ba sẽ kiểm tra bytecode. Trong bước này sẽ kiểm tra số thông số
truyền vào phương thức, khả năng truy xuất sai chỉ số của mảng, chuỗi, biểu
thức.
Mức thứ tư sẽ kiểm tra trong thời gian thực thi để 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 thỏa mãn, lớp sẽ được khởi
tạo.
1.1.5. Bộ công cụ phát triển JDK
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). Từ khi phát triển phiên bản đầu tiên từ năm 1995 đến nay, bộ
công cụ Java đã được phát triển qua nhiều phiên bản và cũng có nhiều sự thay đổi, sau
đây là một số phiên bản đã được phát hành:
JDK 1.0
JDK 1.1 (19 tháng 2, 1997)
JDK 1.1.5 (Pumpkin) 03 tháng 12, 1997
JDK 1.1.6 (Abigail) 24 tháng 4, 1998
JDK 1.1.7 (Brutus) 28 tháng 9, 1998
JDK 1.1.8 (Chelsea) 08 tháng 4, 1999
J2SE 1.2 (Playground) 08 tháng 12, 1998
J2SE 1.2.1 (khơng có) 30 tháng 3, 1999
J2SE 1.2.2 (Cricket) 08 tháng 7, 1999
J2SE 1.3 (Kestrel) 08 tháng 5, 2000
8
J2SE 1.3.1 (Ladybird) 17 tháng 5, 2001
J2SE 1.4.0 (Merlin) 06 tháng 02, 2002
J2SE 1.4.1 (Hopper) 16 tháng 9, 2002
J2SE 1.4.2 (Mantis) 26 tháng 6, 2003
J2SE 5 (1.5.0) (Tiger) 30 tháng 9, 2004
Java SE 6(cịn gọi là Mustang), được cơng bố 11 tháng 12 năm 2006. Các bản
cập nhật 2 và 3 được đưa ra vào năm 2007, bản cập nhật 4 đưa ra tháng 1 năm 2008.
JDK 6.18, 2010
Java SE 7(còn gọi là Dolphin), được bắt đầu từ tháng 8 năm 2006 và công bố
ngày 28 tháng 7 năm 2011.
Hiện tại đang phát triển và thử nghiệm bản Java JDK 8.
JDK bao gồm Java Plug-In, chúng cho phép chạy trực tiếp Java Applet hay
JavaBean bằng cách dùng JRE thay cho sử dụng mơi trường thực thi mặc định của
trình duyệt.
JDK chứa các cơng cụ sau:
Trình biên dịch, 'javac'
Cú pháp:
javac [options] sourcecodename.java
Trình thơng dịch, 'java'
Cú pháp:
java [options] classname
Trình dịch ngƣợc, 'javap'
javap dịch ngược bytecode và in ra thông tin về các thuộc tính (các trường), các
phương thức của một lớp.
Cú pháp:
javap [options] classname
Cơng cụ sinh tài liệu, 'javadoc'
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:
9
javadoc [options] sourcecodename.java
Chƣơng trình tìm lỗi - Debug, „jdb‟
Cú pháp:
jdb [options] sourcecodename.java
hay
jdb -host -password [options] sourcecodename.java
Chƣơng trình xem Applet , „appletviewer‟
Cú pháp:
appletviewer [options] url
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 được:
java.lang
Chứa các lớp quan trọng nhất của ngôn ngữ Java. Chúng bao gồm các kiểu dữ
liệu cơ bản như ký tự, số nguyên,… Chúng cũng chứa các lớp làm nhiệm vụ xử lý lỗi
và các lớp vào ra chuẩn. Một vài lớp quan trọng khác như String hay StringBuffer.
java.applet
Đây là package nhỏ nhất chứa một mình lớp Applet. Các Applet nhúng trong
trang Web hay chạy trong appletviewer đều thừa kế từ lớp này.
java.awt
Package này được gọi là Abstract Window Toolkit (AWT). Chúng chứa các lớp
dùng để tạo giao diện đồ họa. Một số lớp bên trong là: Button, GridBagLayout,
Graphics.
java.io
Cung cấp thư viện vào ra chuẩn. Chúng cho phép tạo và quản lý dòng dữ liệu
theo nhiều cách.
java.util
Package này cung cấp một số cơng cụ hữu ích. Một vài lớp của package này là:
Date, Hashtable, Stack, Vector và StringTokenizer.
java.net
10
Cung cấp khả năng giao tiếp với máy từ xa. Cho phép tạo và kết nối tới Socket
hoặc URL.
java.awt.event
Chứa các lớp, giao diện dùng để xử lý các sự kiện trong chương trình như chuột,
bàn phím.
java.rmi
Cơng cụ để gọi hàm từ xa. Chúng cho phép tạo đối tượng trên máy khác và sử
dụng các đối tượng đó trên máy cục bộ.
java.security
Cung cấp các cơng cụ cần thiết để mã hóa và đảm bảo tính an tồn của dữ liệu
truyền giữa máy trạm và máy chủ.
java.sql
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,....
1.1.6. Cài đặt JDK
Để cài đặt bộ công cụ Java Development Kit (JDK) thực hiện theo 3 bước sau:
1) Tải bộ cơng cụ về máy tính cá nhân
Bộ công cụ JDK của Sun System là một bộ cơng cụ miễn phí, có thể download
trực tiếp từ hãng về qua địa chỉ website:
/>Tùy theo cấu hình của máy tính và phiên bản hệ điều hành mà có thể lựa chọn
gói phần mềm phù hợp, rồi download về máy tính.
Ví dụ 1.1: Máy tính chạy hệ điều hành Windows 7 bản 64 bit ta thực hiện như
sau:
Bước 1: Mở trình duyệt Web và truy nhậpvào địa chỉ sau:
/>
11
Hình 1.3. Trang web tải bộ cơng cụ Java
Bước 2: Kích chọn biểu tượng Java Download như hình sau:
Hình 1.4. Biểu tượng Java Download
Bước 3: Kích chọn AcceptLicense Agreement
Hình 1.5. Lựa chọn bản quyền
Bước 4: Lựa chọn góijdk-7u45-windows-x64.exe rồi tải về máy như hình sau:
Hình 1.6. Bộ JDK cho Windows bản 64 bit
2) Cài đặt JDK
Sau khi đã tải được file chương trình về máy tính, chạy file chương trình
đãdownload được và thực hiện theo các chỉ dẫn của chương trình cho đến khi hồn
thành thì sẽ được chương trình JDK cài trên máy tính.
Ví dụ 1.2: Hướng các bước cài đặt JDK cho Windows 7 64 bit
Bước 1: Chạy file jdk-7u45-windows-x64.exe đã tải về máy tính được màn hình
Setup như sau:
12
Hình 1.7. Màn hình cài đặt đầu tiên
Bước 2: Kích chuột vào Next để tiếp tục cài đặt, khi đó được màn hình custom
setup như hình sau:
Hình 1.8. Màn hình Custom Setup
Bước 3:Lựa chọn các thành phần cài đặt trong Feature và lựa chọn thư mục chứa
chương trình cài đặt trong mục Install to, sau đó chọn Next để tiếp tục cài đặt sẽ được
màn hình Description Folder
Hình 1.9. Màn hình Description Folder
13
Bước 4: Trong màn hình này có thể thay đổi thư mục cài đặt trong change của
mục Install to theo mặc định đường dẫn thư mục cài đặt sẽ là c:\Program Files\Java,
chọn Next để tiếp tục, khi đó được màn hình Progress
Hình 1.10. Màn hình Progress
Bước 5: Cho đến khi tiến trình cài đặt hồn thành và kích chọn Finish để hồn
thành.
3) Cấu hình JDK
Sau khi đã cài đặt thành cơng JDK, người lập trình nên cấu hình class path để
thiết lập biến mơi trường cho Java có thể chạy được trên bất kỳ thư mục chứa chương
trình nào. Tùy theo hệ điều hành được cài đặt trên máy tính mà có cách vào chế độ cấu
hình khác nhau.
Trong ví dụ 1.3 dưới đây sẽ hướng dẫn cách cài đặt và cấu JDK trên hệ điều hành
Windows 7 bản 64 bit.
Ví dụ1.3: Cấu hình JDK trên Windows 7 bản 64 bit.
Bước 1: Mở Explore trên Windows và copy tên đường dẫn đến thư mục chứa
chương trình cài đặt của Java như hình sau:
Hình 1.11. Đường dẫn của thư mục cài đặt Java
Bước 2: Kích chuột phải vào My Computer chọn Properties được màn hình sau:
14