You are on page 1of 175

CHUYÊN ĐỀ JAVA

GV: Ths. Trịnh Thị Xuân


Khoa Công nghệ thông tin
Email: trinhxuan@gmail.com
Thời lượng: 30 tiết LT + 30 tiết TH

1
Tài liệu tham khảo:
 Lập trình Java – NXB Thống kê – VN GUIDE
 Lập trình hướng đối tượng bằng Java – Đoàn
Văn Ban
 96 bài toán và giải pháp gỡ rối Java -
Nguyễn Nam Thuận
 Java lập trình mạng – Nguyễn Phương Lan
 Hướng dẫn lập trình mạng bằng Java – Đậu
Quang Tuấn + Nguyễn Viết Linh
 Giáo trình Lập trình mạng bằng Java – Trung
tâm Trí Đức
 http://java.sun.com/

2
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Hình thức thi:
 Điểm lý thuyết: 50% - Thi viết
 Điểm thực hành: 50% - Bài tập lớn
 Bài tập lớn:
 Chia theo nhóm
 Mỗi nhóm 4 sinh viên

3
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Yêu cầu kiến thức cần có:
 Nắm vững kiến thức ngôn ngữ C++
 Lập trình hướng đối tượng

4
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG I:
GIỚI THIỆU
NGÔN NGỮ JAVA

5
I. Lịch sử phát triển
 Lược sử:
 1990: Sun giới thiệu Oak.
 1993: HotJava + Web Applets (các nguyên tắc
cho những ứng dụng nhỏ trong Web)
 1995: Công bố chính thức Java, một công cụ
mạnh mẽ cho việc phát triển các ứng dụng trên
Internet
 Từ 1995:
 JDK - Java Development Kit - bao gồm: trình biên dịch,
thông dịch, giúp đỡ soạn thảo tài liệu, thư viện chuẩn
 JavaMail

 Java TAPI – Java viễn thông

6
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Java là gì?
 Là một ngôn ngữ cho các ứng dụng thiết bị
và ngôn ngữ lập trình mạng

7
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Java là gì?
“WRITE ONCE, RUN ANYWHERE!”
“VIẾT MỘT LẦN, CHẠY NHIỀU NƠI KHÁC
NHAU!”
Program Java Java
in Java Compiler Bytecode

Java Virtual Machine Java Virtual Machine

8
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*Ưu nhược điểm của Java:
 Thời gian chạy chương trình thư viện được
cung cấp trên một nền tảng độc lập
 Cú pháp tương tự C++ làm cho chương trình
được tối ứu mà không dẫn đến sự bất hợp lý

9
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Tính chất của Java:
 Đơn giản
 Hướng đối tượng
 Phân tán
 Thông dịch
 Mạnh mẽ
 Bảo mật
 Cấu trúc độc lập
 Khả chuyển

10
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
1. Đơn giản:
 Được xây dựng thay thế C/C++ nhưng loại
bỏ đi những sự phức tạp của ngôn ngữ C/C+
+(con trỏ, cấp phát bộ nhớ,…)

11
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
2. Hướng đối tượng:
 Các ứng dụng của Java đều dựa vào đối
tượng và thực hiện thông qua các đối tượng.
 Trong Java các đối tượng không cho phép đa
kế thừa mà thông qua các giao tiếp
(interface)

12
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
3. Phân tán:
 Java được thiết kế hỗ trợ cho các ứng dụng
phân tán bằng các lớp mạng.
 Ví dụ: cho phép viết ứng dụng được truy cập
từ xa, từ máy tính khác

13
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
4. Thông dịch:
 Java là ngôn ngữ vừa biên dịch và vừa thông
dịch => các ứng dụng của Java có thể chạy
trên máy tính với các phần cứng khác nhau:
Macintosh, Intel, Sun Microsystem,…

14
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
5. Mạnh mẽ:
 Java không cho phép khai báo biến một cách tuỳ
tiện => Các biến phải tường minh
 Vì vậy các lỗi về cấp phát bộ nhớ, tràn bộ nhớ, lặp
bộ nhớ được giải quyết
 Java vừa là trình thông dịch vừa là trình biên dịch,
trình thông dịch kiểm tra tất cả các sự truy nhập hệ
thống thực hiện trong một chương trình do đó các
chương trình Java không thể phá hỏng hệ thống
 Khi chương trình Java có lỗi các chương trình tạo ra
sự loại bỏ, sự loại bỏ này có thể bị giữ lại và quản lý
bởi chương trình mà không có bất cứ một sự mạo
hiểm nào phá hỏng hệ thống

15
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
6. Bảo mật:
 Java được thiết kế để tạo hệ thống không
Virus, không bị phá rối dựa vào kỹ thuật xác
minh theo mã hoá công cộng
 Java có bộ thông dịch bytecode kiểm tra
chặt chẽ các mã byte không cho bất kỳ
những hành vi không được phép nào được
thực hiện
 Vì các con trỏ không được hỗ trợ trong ngôn
ngữ Java nên các chương trình không thể
truy cập vào các vùng của hệ thống khi
chúng không được phép

16
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
7. Cấu trúc độc lập:
 Java cho phép tạo ra các máy ảo (Virtual)
trên mỗi hệ thống => Ứng dụng Java chạy
không phụ thuộc vào bộ vi xử lý và hệ điều
hành nhờ vào trình thông dịch.
 Hệ máy Java ảo rất nhỏ nên có thể cài đặt
trong máy con mà không tốn tài nguyên

17
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
8. Khả chuyển:
 Các ứng dụng Java được viết chỉ cần chạy
được trên máy ảo
 Các kiểu dữ liệu của Java được định nghĩa
không phụ thuộc vào bộ xử lý hay hệ điều
hành
=> Ứng dụng chỉ cần viết một lần nhưng có
thể chạy được trên nhiều thiết bị, phần cứng
khác nhau

18
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Cài đặt Java:
 Chuẩn bị:
 Bộ cài JDK – Java Development Kit (bộ công cụ
phát triển Java)
 Cấu hình máy tương ứng với bộ cài JDK
 Cài đặt JDK ra máy và xác định thư mục đường
dẫn chứa kết quả cần cài đặt

19
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Cập nhật biến đường dẫn (PATH) trong hệ
điều hành
 Mở Control Panel
 Chọn System
 Chọn trang Advanced
 Nhấp chuột vào nút Environment Variables…
 Chọn biến PATH trong cửa sổ
 Chọn nút EDIT
 Gõ thêm đường dẫn kết quả cài đặt của JDK
 Chọn OK => OK

20
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Bộ công cụ phát triển - JDK
 Mọi bộ JDK thường chứa các công cụ cơ bản
sau
 Trình biên dịch – javac

Cú pháp: javac [options]


sourcename.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 phương thức lớp
Cú pháp: javap [option] classname
21
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Công cụ sinh tài liệu – javadoc
Cho phép tạo ra tệp HTML dựa trên các lời
giải thích mã chương trình
Cú pháp: javadoc [options]
sourcename.java
 Trình tìm lỗi – jdb

Cú pháp: jdb [options] sourcename.java


 ….

22
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG II:
CĂN BẢN LẬP TRÌNH JAVA

23
I. Mở đầu:
 Java là ngôn ngữ lập trình hướng đối tượng,
tất cả các lớp của Java đều dựa trong đối
tượng Object.
 Các lớp được tổ chức thành các gói
(Package) và các gói lại có thể chứa các gói
hay các giao diện khác.
 “Các chương trình mã nguồn (*.java) được
biên dịch thành các file bytecode (mã nhị
phân) (*.class) => Trình biên dịch java
chuyển đổi các bytecode thành mã máy theo
bộ xử lý cụ thể”

24
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Cấu trúc chương trình Java:

import package //chỉ định gói được dùng


….
class class_name //khai báo và định nghĩa lớp chính
{
Khai báo biến của lớp
Khai báo phương thức lớp

}

25
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ chương trình đầu tiên (hello.java)
import java.io.*;
class first
{
public static void main(string arg[])
{
system.out.println(“Hello, The First! ”);
}
}

Chú ý: tên tệp chương trình phải trùng với tên


lớp
26
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Giải thích:
 Phần đầu chương trình xác định môi trường
làm việc của chương trình => Xác định các
gói được sử dụng trong chương trình(là các
thư viện được định nghĩa sẵn). Các gói được
chỉ dẫn bằng từ khoá import
Ví dụ: import java.io.*
 Chương trình Java bao gồm một lớp chính
trong đó mô tả các biến và các hàm của
chương trình=> Lớp được mô tả sau lệnh
import

27
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các thành phần cơ bản trong Java:
 Định danh(identifier): thể hiện tên biến,
tên phương thức => Trình biên dịch xác định
tên này là duy nhất. Nguyên tắc khai báo
định danh:
 Định danh bắt đầu bằng chữ cái, ký tự gạch dưới
hay dấu $ => các ký tự tiếp là chữ cái, chữ số, $
hay ký tự gạch dưới
 Mỗi một định danh chỉ chứa một ký tự $ hoặc một
ký tự gạch dưới
 Định danh không chứa dấu cách

28
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Từ khoá(Keyword): là các định danh được
Java xác định trước và người lập trình không
được quyền sử dụng nó
 Ký tự phân cách: thông báo cho trình biên
dịch việc phân nhóm các phần tử của
chương trình, ký tự phân cách gồm: { } ; ,
 Nguyên dạng: là các giá trị không đổi trong
chương trình, có thể là số, chuỗi, ký tự hay
giá trị Boolean
 Các toán tử: là các phép toán thực hiện
trên DL hoặc các đối tượng

29
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Căn bản Java
 Chương trình Java là tập hợp các hành động
được sắp xếp theo một trật tự nhất định để
máy có thể thực hiện được => Chương trình
chứa các biến và các lệnh.
 Các khái niệm cơ bản của Java:
 Lớp và phương thức
 Kiểu dữ liệu
 Biến
 Toán tử
 Các cấu trúc điều khiển

30
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
a. Kiểu dữ liệu:
 Các ứng dụng đều xử lý trên dữ liệu đầu vào
và xuất dữ liệu ở đầu ra. Đầu vào, đầu ra, và
kết quả tính toán đều liên quan đến dữ liệu
được làm việc.
 Dữ liệu có một tính xác định và một kiểu thể
hiện riêng biệt
 Các loại kiểu dữ liệu:
 Nguyên thủy: byte, char, boolean, short, int, long,
float, double
 Tham chiếu: mảng, lớp, giao diện (do người dùng
tự định nghĩa)

31
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
b. Chuyển đổi kiểu:
 Cho phép ép một giá trị từ kiểu này sang
kiểu khác.
 Trong Java có hai hướng chuyển đổi kiểu:
 Chuyển kiểu hẹp (narrowing conversion): từ kiểu
lớn về kiểu nhỏ
 Chuyển kiểu rộng: từ kiểu nhỏ về kiểu lớn

 Chuyển kiểu trong Java được thực hiện như


C/C++
 Biến = (tên kiểu) giá-trị;

32
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Ví dụ:
 float a = (float) 12;
 float b = 15.682f;
 int c = (int)b;
 Chú ý: Các hằng thực có thể biểu diễn bẳng
dạng thập phân (5.1693) hay dạng mũ
(6.2e33). Để chỉ rõ hằng float thêm f hay F,
hằng double thêm d hay D

33
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
c. Khai báo biến:
 Biến được xác định bởi tên và phạm vi tác động
 Khai báo biến gồm ba thành phần: kiểu biến, tên và
giá trị khởi tạo ban đầu
 Cú pháp:

datatype namevar[=value],…;
 Trong đó:
 Datatype: kiểu dữ liệu của biến, là kiểu đã được
khai báo hay định nghĩa
 Namevar: tên của biến, tên được đặt tuân thủ
nguyên tắc
 Value: giá trị khởi tạo ban đầu
 Lưu ý: Trong Java khi đặt tên biến có phân biệt chữ
hoa và chữ thường.

34
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
d. Khai báo hằng:
 Hằng là đại lượng không thay đổi khi thực
hiện trong chương trình
 Để khai báo hằng dùng từ khóa final đặt
trước kiểu dữ liệu và tên biến
 Ví dụ:

final float PI = 3.14159;


 Chú ý:một biến hay hằng chỉ được sử dụng
trong phạm vi khối lệnh mà nó được khai báo
hoặc khối lệnh bên trong nó (Khối lệnh là
đoạn chương trình đặt trong cặp dấu {} )

35
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Khai báo mảng:
 Mảng là loại dữ liệu có các phần tử cùng kiểu
được lưu trữ ở các vị trí liên kề nhau trong bộ
nhớ.
 Kiểu dữ liệu của các phần tử mảng có thể là
kiểu dữ liệu cơ sở hoặc một đối tượng đã
định nghĩa.

36
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Khai báo mảng:
Cách khai Mô tả Cú pháp Ví dụ
báo
Chỉ đơn datatype identifier[ ]; char ch[];
thuần
khai báo
Khai báo Khai báo và datatype identifier[ ] = char ch[ ]=new
và tạo cấp phát bộ new datatype[size]; char[10];
mảng nhớ cho
phần tử
mảng

Khai báo, Khai báo và datatype identifier[ ] = Char ch[ ] = { ‘A’,


kiến tạo cấp phát bộ { value1, value2, …, ‘B’, ‘C’, ‘D’ };
và khởi nhớ, gán giá valuen};
tạo trị ban đầu
cho phần tử

37
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
V. Toán tử và biểu thức
 Toán tử là các ký hiệu toán học để thực hiện
các phép tính toán cơ bản
 Trong Java cung cấp các loại toán tử sau:
 Toán tử số học
 Toán tử bit
 Toán tử quan hệ
 Toán tử logic
 Toán tử điều kiện
 Toán tử gán

38
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
a.Các toán tử cơ bản:
 Toán tử số học: +, -, *, /, %, ++, --, +=,
-=, *=, /=, %=
 Toán tử quan hệ: ==, !=, >, <, >=, <=
 Toán tử logic: &(AND), |(OR), ^(XOR), !
(NOT)

39
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
b. Toán tử bit:
 Toán tử cho phép thực hiện thao tác trên
từng bit riêng biệt trong kiểu dữ liệu nguyên
thủy
 Toán tử bit dựa trên cơ sở đại số Boolean,
thực hiện trên hai bít có vị trí tương ứng của
hai toán hạng
 Các toán tử cơ bản:
~ : phủ định  trả về giá trị âm của một số
 &: toán tử AND
 |: OR
 ^: Loại trừ (XOR)

40
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 x>>n: dịch phải bit
 Chuyển toàn bộ các bit của một số x sang phải n
vị trí, giữ nguyên dấu của số âm
 Ví dụ: x = 31  00011111

x>>2  00000111
 x<<n: dịch trái bit
 Chuyển toàn bộ các bit của một số x sang trái n
vị trí, giữ nguyên dấu của số âm
 Ví dụ: x = 31  00011111

x<<2  01111100

41
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
c. Toán tử điều kiện:
 Cú pháp:
<biểu thức 1>?<biểu thức 2>:<biểu thức 3>
 Trong đó:
 <biểu thức 1>: là biểu thức logic, trả về giá trị
True hoặc False
 <biểu thức 2>: là giá trị trả về khi <biểu thức 1>
nhận giá trị đúng
 <biểu thức 3>: là giá trị trả về khi <biểu thức 1>
nhận giá trị sai
 Ví dụ:
kq = (a>b) ? a : b;

42
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VI. Cấu trúc điều khiển
 Là các câu lệnh kiểm tra và điều khiển quá
trình thực hiện các câu lệnh sao cho chương
trình thực hiện và đạt yêu cầu đặt ra
 Các cấu trúc điều khiển cơ bản
 if
 switch
 for
 while…do

43
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
a. Cấu trúc lựa chọn - IF

 Cú pháp:
if (condition)
{ khối lệnh 1; }
else
{ khối lệnh 2; }
 Trong đó:
 Condition: biểu thức điều kiện, nhận giá trị True
hoặc False
 Khối lệnh 1, khối lệnh 2: các dòng lệnh được
thực hiện tương ứng khi điều kiện True hoặc
False

44
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:

class CheckNumber
{
public static void main(String arg[])
{
int num = 10;
if (num%2==0)
System.out.println(num + “la so chan”);
else
System.out.println(num + “la so le”);
}
}
45
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Có thể dùng cấu trúc if lồng nhau
import java.io.*;
import java.util.Date;
class checkdate
{
public static void main(String arg[])
{
Date today=new Date();
if (today.getDay() ==0)
system.out.println(“Hom nay la chu nhat”);
else if (today.getDay() ==1)
system.out.println(“Hom nay la thu hai”);
else if (today.getDay() ==2)
system.out.println(“Hom nay la thu ba”);
}
}

46
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
b. Cấu trúc lựa chọn - SWITCH
 Cú pháp:
switch ( biểu thức )
{
case <giá trị 1>: <khối lệnh 1>; break;
case <giá trị 2>: <khối lệnh 2>; break;

case <giá trị n>: <khối lệnh n>; break;
default : <khối lệnh n+1>;
}

47
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Trong đó:
 Biểu thức: là biến hay biểu thức chứa giá trị
xác định
 <giá trị 1>, <giá trị 2>,…,<giá trị n>: là các
hằng số có thể nhận được giá trị của biểu
thức
 <khối lệnh 1>, <khối lệnh 2>,…, <khối lệnh
n>: là các hành động được thực hiện khi biểu
thức nhận giá trị tương ứng
 default: từ khóa tùy chọn được sử dụng để
chỉ rõ câu lệnh được thực hiện khi các giá trị
khác không thỏa mãn

48
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*Ví dụ:
import java.util.Date;
class checkday
{
public static void main( String arg[])
{
Date today = new Date();
int day;
day = today.getDay();
switch(day)
{
case 0: System.out.println(“ Chu nhat”); break;
case 1: System.out.println(“ Thu hai”); break;
case 2: System.out.println(“ Thu ba”); break;
case 3: System.out.println(“ Thu tu”); break;
case 4: System.out.println(“ Thu nam”); break;
case 5: System.out.println(“ Thu sau”); break;
case 6: System.out.println(“ Thu bay”); break;
default: System.out.println(“ Khong phai la ngay”);
}
}
}
49
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
c. Cấu trúc FOR
 Cú pháp:
for(<khởi tạo> ; <bt kiểm tra> ; <bước nhảy>)
<Khối lệnh>;
 Trong đó:
 <khởi tạo>: biểu thức khởi tạo giá trị ban đầu
cho biến lặp
 <bt kiểm tra>: biểu thức xác định điều kiện dừng
cuối cùng của vòng lặp, xđ cận trên
 <bước nhảy>: biểu thức để thay đổi giá trị biến
lặp sau mỗi bước lặp
 <khối lệnh>: là các thao tác thực hiện trong mỗi
vòng lặp
50
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
import …
class Sum
{
public static void main( String arg[])
{
int S = 0;
for( int i=0 ; i<100 ; i+=2 )
S += i;
System.out.println( “Ket qua:” + S );
}
}
51
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
d. Vòng lặp WHILE
 Cú pháp:
while ( bt điều kiện )
<khối lệnh>;
 Trong đó:
 Btđiều kiện: là biểu thức logic xác định điều kiện
đúng để thực hiện vòng lặp
 Khối lệnh: là các câu lệnh được thực hiện trong
mỗi vòng lặp
 Vòng lặp while được thực hiện với số bước
lặp là chưa được xác định trước

52
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
import ...
class whiledo
{
public static void main(String arg[])
{
int a=10, fact=1;
while (a>=1)
{
fact = fact * a;
a--;
}
System.out.println( “Ket qua:” + fact );
}
}
53
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
e. Lệnh Break và Continue
 Lệnh break dùng để thoát khỏi một cấu trúc
lặp hiện tại khi thoả mãn một điều kiện nào
đó
 Lệnh Continue cho phép chương trình nhảy
về đầu vòng lặp và bỏ qua các lệnh phía sau
đó

54
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG III:

LỚP VÀ ĐỐI TƯỢNG

55
I. Khái niệm
 Lớp là khuôn mẫu mô tả đối tượng, bao gồm
các thuộc tính và các phương thức của đối
tượng.

56
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Khai báo lớp
 Khi mô tả lớp phải xác định được: dữ liệu và
phương thức của lớp
 Dữ liệu: là các thành phần dữ liệu tạo thành lớp,
mô tả các thuộc tính của dữ liệu
 Phương thức: là các thao tác, hành động được
thực hiện trên đối tượng

57
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cú pháp khai báo lớp:
<modifier> class <class_name>
{
//Khai báo dữ liệu của lớp
//Khai báo phương thức của lớp
}
 Trong đó:
 <modifier>: xác định thuộc tính của lớp, có thể nhận các
giá trị: public, final, abstract
 <class_name>: tên của lớp cần định nghĩa
 Khai báo dữ liệu: liệt kê các thành phần dữ liệu của lớp,
được mô tả như khai báo biến
 Khai báo phương thức: liệt kê các phương thức của lớp,
được mô tả như khai báo hàm và khai báo phương thức

58
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
class HCN
{
public int a;
public int b;
public int dientich( )
{ return (a*b); }
public int chuvi( )
{ return (a+b)*2; }
public static void main( String arg[])
{

}
}
59
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Lưu ý:
 Các thành phần của một lớp được chia làm
ba nhóm cơ bản: private, protected, public
 Để phân loại từng thành phần vào các nhóm
chỉ việc khai báo tên các từ khoá đó phía
trước từng thành phần

60
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Định nghĩa hàm – Phương thức
 Khái niệm:
 Hàm trong Java là các khối lệnh thực hiện các
chức năng riêng biệt => Hàm luôn gắn liền vào các
lớp đối tượng nên hàm trong java được gọi là
phương thức
 Cú pháp:
<access_specifier> <modifier> <datatype> <name_function> (parameter)
{
…..//nội dung định nghĩa phương thức
}

61
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Trong đó:
 <access_specifier>: chỉ định cách thức
truy nhập vào phương thức  dùng để giới
hạn khả năng truy cập từ bên ngoài vào
phương thức được định nghĩa. Có thể nhận
các giá trị: private, protected, public
 private: riêng tư - chỉ có thể được truy nhập được
nhờ các phương thức public trong cùng lớp
 protected: cho phép các lớp mở rộng(kế thừa) có
thể truy nhập tới các phương thức này
 public: phương thức có thể truy xuất từ mọi nơi và
mọi lúc

62
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 <modifier>: xác định thuộc tính cho các phương
thức, có các giá trị sau:
 static: cho phép phương thức được gọi đến mà không cần
đối tượng, phương thức này chỉ được sử dụng từ các dữ liệu
và phương thức tĩnh khác
 abstract: ngụ ý phương thức không có mã trong đó, sẽ được
bổ sung ở các lớp sau
 final: phương thức được bảo vệ không cho các lớp dẫn xuất
khai báo và định nghĩa lại
 native: chỉ ra rằng phần thân hàm có thể được viết bằng
một ngôn ngữ khác java (C, C++,…), phương thức này chỉ
có tên và khối lệnh rỗng
 synchronized: đảm bảo dữ liệu không bị sau lạc khi dùng
cùng lúc hai phương thức truy cập một DL

63
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 <datatype>: xác định kiểu mà kết quả
phương thức trả lại( int, float,…), không có
giá trị trả về thì dùng kiểu void
 <name_function>: tên của phương thức
được định nghĩa
 <parameter>: xác định và chứa các đối số
của phương thức, đối số được mô tả như khai
báo biến. Các đối số phân cách nhau bằng
dấu phẩy

64
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
class callmethod
{
public static int S_Hinhvuong( int x)
{
return x*x;
}
public static void main(String arg[])
{
int canh=5, s;
s = S_Hinhvuong( canh );
System.out.println( “Dien tich:” + s );
}
}

65
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Phương thức khởi tạo lớp
 Là phương thức dùng để gán các giá trị ban
đầu và tạo ra đối tượng cụ thể => phương
thức sẽ được gọi đến khi chương trình tạo ra
một đối tượng mới thông qua toán tử new
 Đặc điểm phương thức khởi tạo:
 Phương thức khởi tạo trùng tên với tên của lớp
 Phương thức không có kiểu trả về
 Một lớp có thể có nhiều phương thức khởi tạo

66
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
•Ví dụ:
Xây dựng lớp HCN. AD tạo một HCN và in ra diện tích HCN

class HCN
{
private int a;
private int b;
HCN ( int aa, int bb)
{
a = aa; b = bb;
}
int dientich()
{ return a*b; }
static public void main()
{
HCN x = new HCN(4,5);
int dt;
dt = x.dientich();
system.out.println( “Dien tich HCN:” + dt );
}
}
67
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*Chú ý:
 Nếu một lớp không có cấu tử, Java sẽ gán
cho lớp một cấu tử mặc định  khởi tạo các
dữ liệu của lớp các giá trị mặc định tương
ứng với kiểu dữ liệu
 Một lớp luôn chứa một con trỏ this, con trỏ
này được sử dụng trong khi chạy và tham
khảo đến bản thân của lớp chứa chính con
trỏ đó

68
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Ví dụ:
class HCN
{
private int a;
private int b;
HCN ( int aa, int bb)
{
this.a = aa; this.b = bb;
}
int dientich( )
{
return a*b;
}

}
69
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
V. Sự kế thừa
 Kế thừa là cơ chế cho phép tạo ra lớp mới
dựa vào lớp đã biết => các vùng dữ liệu và
phương thức của lớp cũ sẽ trở thành thành
phần của lớp mới

70
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cú pháp định nghĩa lớp kế thừa
<modifier> class class_new extends class_old
{

//Định nghĩa các thành phần lớp mới
}

Trong đó:
modifier: xác định thuộc tính của lớp được kế
thừa, có các giá trị: public, final, abstract
class_new: là tên lớp mới được định nghĩa
class_old: là tên lớp được kế thừa, là lớp đã có
71
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Chú ý:
 Trong lớp dẫn xuất để sử dụng các thành
phần của lớp cơ sở sử dụng từ khóa super
 Trong Java bạn không cần phải giải thích
một phương thức là có tính chất ảo (virtual)
vì đây là một ngầm định. Nếu bạn không
muốn một chức năng là ảo thì bạn cần đưa
ra một lời kết (lời gọi) là final.

72
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
V. Lớp trừu tượng
 Là lớp được định nghĩa mà chưa xác định các
vùng dữ liệu và phương thức của nó => Các
thành phần dữ liệu và phương thức của lớp
cụ thể sẽ được khai báo ở lớp dẫn xuất
 Để khai báo lớp trừu tượng thêm từ khóa
abstract vào trước khai báo lớp
 Ví dụ:

abstract class X
{

}
73
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VI. Lớp String:
 Là lớp được định nghĩa sẵn của Java để cho
phép làm việc với các dữ liệu chuỗi
 Các phương thức của lớp String:
 charAt(i):trả về ký tự tại vị trí thứ i của chuỗi
 startWith(st): kiểm tra một chuỗi xem có bắt
đầu bằng một chuỗi xác định ko, kết quả trả lại
kiểu Boolean
 endWith(st): kiểm tra một chuỗi xem có kết
thúc bằng một chuỗi xác định không
 copyValueOf(name, start, num): trả về chuỗi
con trích từ chuỗi cho trước

74
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
toCharArray() : nhận một chuỗi, chuyển đổi và
trả về một mảng ký tự
indexOf(st) : trả về chỉ mục của một ký tự hoặc
một chuỗi ký tự con trong một chuỗi cho trước.
toUpperCase() : đổi chữ thường trong chuỗi
thành chữ hoa
toLowerCase() : đổi chữ hoa trong chuỗi thành
chữ thường
trim(st): cắt bỏ khoảng trắng trong đối tượng
chuỗi

75
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 replace(char oldchar, char newchar) : thay
thế tất cả các ký tự oldchar trong chuỗi thành
newchar
 equals(st) : so sánh nội dung hai đối tượng chuỗi
 concat() : nối hai chuỗi
 valueOf() : trả về một chuỗi số được đổi từ số
đưa làm đối số
 length(): trả về độ dài của chuỗi
 lastIndexOf(char ch (String str), int
fromIndex) : trả về vị trí (index) xuất hiện sau
cùng của một ký tự hay một chuỗi con

76
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG IV:

LẬP TRÌNH
JAVA APPLET

77
I. Khái niệm:
 Applet là một dạng chương trình của Java có
thể chạy trong trình duyệt Web.
 Tất cả các Applet được viết đều là lớp con
của lớp Applet => Để tạo Applet phải import
hai gói sau:
 java.applet
 java.awt

 Các Applet mới được định nghĩa đều phải kế


thừa từ lớp Applet đã có.

78
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Cấu trúc một Applet
 Một Applet khi cài đặt có thể trải qua bốn sự
kiện chính:
 Tự khởi tạo(init)
 Có thể tự khởi động(start)
 Có thể tự dừng(stop)
 Tự dọn dẹp trước khi thoát(destroy)

Tương ứng với một sự kiện sẽ có


một phương thức tương ứng được
gọi đến và thực hiện

79
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các phương thức của Applet
Phương Ý nghĩa
thức
Được gọi trong quá trình khởi tạo
Applet => tạo ra đối tượng cung
init() cấp cho Applet. Phương thức dùng
tải hình ảnh đồ họa, khởi tạo biến
và đối tượng.
Được gọi khi Applet bắt đầu thực
thi => Khi Applet khỏi tạo hoàn tất
start() thì Applet được khởi động. Phương
thức dùng để khởi tạo lại Applet
sau khi ngừng trước đó.
80
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Phương thức Ý nghĩa

Được gọi khi ngừng thực thi một


stop() Applet. Một Applet bị ngừng
trước khi nó bị hủy.
Được dùng để hủy một Appet =>
Khi Applet bị hủy thì bộ nhớ, thời
destroy() gian thực thi của vi xử lý, không
gian đĩa được trả về cho hộ
thống

Chú ý: Mỗi một Applet có thể có đầy đủ các sự kiện trên


hoặc có thể thiếu bất kỳ một sự kiện nào đó
81
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Chu trình sống một Applet

Destroy Stop

Creation Starting

Init

82
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Ngoài các phương thức trên còn có phương
thức paint()và repaint():
 paint(): là phương thức hiện thị cơ bản, thường
dùng paint() để biểu diễn các hoạt động cần thiết
trên trang web => hiển thị các đường thẳng, text,
hình ảnh trên nền trang web. Phương thức xảy ra
nhiều lần trong suốt quá trình Applet tồn tại (khỏi
tạo, di chuyển từ cửa sổ này sang cửa sổ khác,
thay đổi vị trí trên màn hình)
 repaint(): phương thức được dùng khi cần cập
nhất lại nội dung của trang web

83
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
import java.awt.*;
import java.applet.*;
public Myapplet extends Applet
{
int num;
public void init()
{ num=6; }
public void paint(Graphics g)
{
g.drawString(“Hello Appet. Chapter:”+num,70,80);
}
}
84
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Khác nhau giữa Application và Applet
 Để thực thi các Application thì dùng trình
thông dịch java, Applet có thể chạy được
trên trình duyệt(có hỗ trợ Java) hay sử dụng
công cụ AppletViewer
 Quá trình thực thi Application bắt đầu từ
phương thức main() còn applet thì không
thực hiện như vậy(không có hàm main)
 Các Application dùng System.out.print để
hiển thị kết quả ra màn hình, Applet sử dụng
drawString() để xuất ra màn hình
 Chú ý: một chương trình Java có thể vừa là
Application và vừa là Applet

85
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Lớp Graphics – Giao diện đồ họa:
 Một thành phần đồ họa(GUI- Graphic Unit
Interface) là một đối tượng hình ảnh mà
người dùng tương tác với nó qua chuột hoặc
bàn phím(đường thẳng, nút bấm, textbox,…)
 Để tạo các GUI sử dụng gói các lớp có sẵn
trong gói java.awt

86
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
1. Vẽ chuỗi, ký tự:
drawString(String str, int x, int y) =>
Vẽ chuỗi str lên màn hình tại tọa độ
(x,y)
 drawChars(char array[], int of, int length, int x, int y)
 Array: là mảng các ký tự được viết ra
 Of: vị trí bắt đầu, nơi ký tự bắt đầu được
vẽ ra
 Length: số các ký tự được vẽ ra màn
hình
 x và y: là tọa độ trên màn hình được vẽ
ra
87
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
2. Vẽ đường thẳng và hình Oval
 drawLine(int x1, int y1, int x2, int y2) =>
Vẽ đường thẳng lên màn hình
 x1, y1: tọa độ điểm đầu đoạn thẳng
 x2, y2: tọa độ điểm cuối đoạn thẳng
 drawOval(int x, int y, int width, int height)
=> vẽ hình Oval lên màn hình
 x, y: tâm của hình Oval
 Width: độ dài cạnh chiều rộng(ngang)
 Height: độ dài cạnh chiều cao(dọc)

88
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 setColor(Color c) => Đặt màu để bắt đầu
thực hiện vẽ hay tô màu
 C: màu được đặt để tô hoặc vẽ (Color.red,
Color.blue, Color.green,…)
 fillOval(int x, int y, int width, int height) =>
Tô màu hình ô val, màu được xác định bởi
hàm setColor
 x, y: tâm của hình Oval
 Width: độ dài cạnh chiều rộng(ngang)
 Height: độ dài cạnh chiều cao(dọc)

89
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
3. Vẽ hình chữ nhật và HCN bo góc
 drawRect( int x, int y, int width, int height)
=> Vẽ hình chữ nhật lên màn hình
 x,y: tọa độ đỉnh góc trên bên trái của HCN
 Width: độ dài chiều rộng HCN
 Height: độ dài chiều cao HCN

 fillRect( int x, int y, int width, int height)


=> tô màu hình chữ nhật
 drawRoundRect( int x, int y, int weight, int
height, int arcwidth, int archeight) => vẽ
hình chữ nhật với góc bo tròn
 arcwidth: độ rộng cung bo tròn
 archeight: chiều cao cung bo tròn
90
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
4. Điều khiển Font:
 Java cung cấp lớp Font trong gói java.awt
cho phép sử dụng các loại font khác nhau.
 Để thay đổi Font mặc định của hệ thống
thành font khác thì tạo ra đối tượng của lớp
font. Phương thức khởi tạo có 3 tham số:
 Tên của Font
 Kiểu của Font (Font.BOLD, Font.ITALIC,…)
 Kích thước Font

 Ví dụ:
Font f1=new Font(“SansSerif”, Font.ITALIC,16);
g.setFont(f1);
91
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
V. Các đối tượng đồ họa:
 Chú ý:
 Để hiển thị các đối tượng đồ họa trong AppletPhải
khai báo ở sự kiện init()
 Gói thư viện sử dụng: java.awt.*

92
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
1. Nhãn - Label:
 Được dùng để tạo nhãn để hiển thị một chuỗi văn
bản
 Khai báo:

Label label_name;
 Khỏi tạo:

Labelname = new Label(“Nhap ho ten:”);


 Hiện thị lên Applet:

Container.add(label_name);
 Các phương thức:
 getText()
 setText(String text)
 getAlignment()
 setAlignment(int alignment)
93
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
2. Ô văn bản – TextField:
 Dùng để tạo ô nhập một chuỗi văn bản
 Khai báo:

TextField Textfield_name;
 Khởi tạo:

TextField tf = new TextField(“ Tri Duc”);


 Hiển thị lên Applet:

add(Textfield_name);
 Phương thức:

String getText()
void setText(String st)

94
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
3. Vùng văn bản – TextArea:
 Dùng để tạo ra một vùng có thể hiện thị và xử lý
nhiều dòng văn bản
 Khai báo:

TextArea Textarea_name;
 Cấu tử: TextArea(), TextArea(int rows,int cols),…
 Khởi tạo:

TextArea ta = new TextArea(“ CN1K3”);


 Hiển thị lên Applet:

add(Textarea_name);
 Phương thức:

insertText(String text , int position)


appendText(String text , int start, int end)
95
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
4. Nút bấm – Button:
 Dùng để tạo ra một nút bấm để thực hiện một tương
tác nhất định
 Khai báo:

Button Button_name;
 Khởi tạo:

Button bt = new Button(“Close”);


 Hiển thị lên Applet:

add(Button_name);
 Phương thức:

String getLabel()
setLabel(String Label)
setEnable( boolean b)
setVisible( boolean b)
96
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
5. Hộp chọn lựa – CheckBox:
 Dùng để tạo ra một nút lựa chọn để thực hiện lựa chọn một
tính chất, một Checkbox luôn có dòng văn bản để chỉ định ý
nghĩa
 Khai báo:

Checkbox Checkbox_name;
 Khởi tạo:

Checkbox cb = new Checkbox(“Hidden”);


 Hiển thị lên Applet:

add(Checkbox_name);
 Phương thức:
 String getLabel()
 setLabel(String Label)
 boolean getState()
 void setState(boolean b)
97
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
6. Nhóm lựa chọn – CheckBoxGroup:
 Dùng để tạo ra một nhóm các nút lựa chọn có
liên quan đến nhau và đặt trong một nhóm
 Khai báo:

CheckboxGroup Checkboxgroup_name;
 Ví dụ :

CheckboxGroup cbg;
Checkbox ck1,ck2,ck3;
ck1.setCheckboxGroup(cbg);
ck2.setCheckboxGroup(cbg)
ck3.setCheckboxGroup(cbg);

98
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
7. Danh sách chọn lựa – List:
 Cho phép tạo ra tập các mục để lựa chọn. Có hai
loại LIST là: single selection và multi selection
 Khai báo:

List List_name=new List(count,boolean);


VD: List mylist = new List(3,true);
 Các phương thức:
 addItem(String item)
 add(String item, int index)
 replace(String item, int index)
 select(int index)
 String getItem(int index)
 remove(int index)

99
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
8. Hộp chọn lựa – Choice:
 Cung cấp một danh sách các mục từ đó người
dùng có thể lựa chọn một mục
 Khai báo:
Choice choice_name=new Choice();
VD: Choice ch = new Choice();
 Các phương thức:
 addItem(String item)
 add(String item,int index)
 String getItem(int index)
 int getItemCount()
 int getSelectIndex()
 String getSelectedItem()
 insert(String item, int index)
 remove(int index), remove(String item)
100
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
9. Thanh cuộn – ScrollBar:
 Tạo một thanh trượt để cuộn nội dung văn bản
 Khai báo:

Scrollbar scrollbar_name;
VD: Scrollbar sbar;
sbar=new ScrollBar(Scrollbar.VERTICAL);
 Các phương thức:
 setMaximum(int value)
 int getMaximum()
 setMinimum(int value)
 int getMinimum()
 setValue(int value)
 int getValue()
101
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VI.Quản lý bố cục
 Để sắp xếp các thành phần giao diện trong
Applet dùng trình quản lý bố cục => Các
thành phần được đặt trong một Container
và được sắp xếp tùy trình quản lý bố cục
được sử dụng.
 Các loại bố cục:
 Bố cục lưu chuyển – FlowLayout
 Bố cục viền – BorderLayout
 Bố cục thẻ - CardLayout
 Bố cục khung kẻ ô - GridLayout
 Bố cục túi lưới – GridBag
 Để thay đổi bố cục thông qua setLayout()
102
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VII. Lập trình xử lý sự kiện
 Là cho phép viết các đoạn chương trình để
xử lý các thao tác khi thực hiện bấm chuột
và bàn phím để thực hiện một thao tác tương
ứng nào đó.
 Sự kiện được chia làm hai loại:
 Sự kiện xử lý với chuột
 Sự kiện xử lý với bàn phím

103
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cơ chế xử lý sự kiện:
 Khi người dùng thực hiện một thao tác với
chuột và bàn phím thì tất cả các hành động
đó phát sinh một sự kiện tương ứng.
 Các sự kiện được phân chia thành các lớp sự
kiện khác nhau(MouseEvent, KeyEvent,…).
 Để nắm bắt được sự kiện thì chương trình
cần cài đặt một bộ lắng nghe sự kiện (Event
Handler) cho một đối tượng và nắm bắt sự
kiện xảy ra trên đó => Sau đó gọi đến bộ
quản lý sự kiện (Event Listeners) tương ứng
và bộ quản lý này cung cấp các phương thức
để điều khiển sự kiện
104
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các lớp sự kiện cơ bản
 ActionEvent: khi một nút được nhấn, một mục
danh sách được nhấp đúp hoặc lệnh được chọn
 AdjustmentEvent: khi thanh cuộn được dùng
 ComponentEvent: khi một thành phần được
chỉnh kích cỡ, dời, che, hiện
 FocusEvent: khi một thành phần mất hoặc lấy lại
forcus bàn phím
 WindowEvent: khi cửa sổ được kích hoạt, đóng,
mở hoặc thoát
 TextEvent: khi giá trị của một trường hay một
vùng văn bản bị thay đổi
 MouseAvent: khi chuột được gọi, nhắp, kéo, nhả
 KeyAvent: khi có các thao tác với bàn phím
105
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các tình huống xử lý với chuột:
Lớp biến cố MouseListener:
public void mouseEntered(MouseEvent event)
public void mouseExited(MouseEvent event)
public void mousePressed(MouseEvent event)
public void mouseReleased(MouseEvent event)
Lớp biến cố MouseMotionListener:
public void mouseDragged(MouseEvent event)
public void mouseMoved(MouseEvent event)

106
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các tình huống xử lý với bàn phím:
public void keyPressed(keyEvent event)
public void keyReleased(keyEvent event)
public void keyTyped(keyEvent event)

107
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
Tạo một Applet trong đó có:
Hai ô văn bản cho phép nhập độ dài hai cạnh của
HCN
Một ô cho phép hiển thị chu vi và diện tích HCN
tương ứng
Yêu cầu: nhập chiều dài và rộng HCN. Tính diện
tích và chu vi tương ứng

108
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
public class Hcn extends Applet implements ActionListener
{
TextField a,b;
TextArea kq;
Label nhan1,nhan2,nhan3;
public void init()
{
resize(250,200);
a = new TextField(“0”);
b = new TextField(“0”);
kq=new TextArea(5,30);
nhan1=new Label(“Chieu dai:");
nhan2=new Label(“Chieu rong:");
nhan3=new Label(“Ket qua:");
add(nhan1); add(a);
add(nhan2); add(b);
add(nhan3); add(kq);
a.addActionListener(this);
b.addActionListener(this);
}
109
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
public void paint (Graphics g)
{
String s1,s2;
int aa,bb;
double cv, dt;
s1 = a.getText(); aa = Integer.parseInt(s1);
s2 = b.getText(); bb = Integer.parseInt(s2);
cv = (aa+bb)*2;
dt = aa*bb;
s1 = String.valueOf(cv);
kq.setText("Chu vi la:"+s1);
s2 = String.valueOf(dt);
kq.append("Dien tich la:"+s2);
}
public void actionPerformed(ActionEvent event)
{
repaint();
}
} 110
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VIII.Giới hạn của Applet:
 Giới hạn về bảo mật:
 Một applet không được nạp các thư viện hay các
phương thức sử dụng mã nguồn
 Không được đọc và ghi lên các tập tin của máy
đang chạy chúng
 Không được thực hiện các kết nối mạng trừ kết
nối với máy đang chạy chúng
 Không được khởi động bất kỳ chương trình nào
trên máy đang chạy
 Không được đọc bất kỳ tính chất nào của hệ thống
 Cửa sổ mở ra của Applet sẽ khác với các cửa sổ do
các ứng dụng mở

111
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Khả năng của Applet:
 Applet có thể tạo âm thanh, hình ảnh,…
 Applet có thể tạo kết nối đến máy đang chạy nó
 Khi chạy một trình duyệt web, Applet dễ dàng
dùng các siêu văn bản để hiển thị
 Applet có thể gọi đến các phương thức toàn cục
của các applet khác trên cùng trang web
 Không nhất thiết là các applet sẽ ngừng lại khi ta
thoát khỏi các trang web chứa nó

112
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG VII:
SWING

113
I. Giới thiệu
 Swing là một bộ các lớp cung cấp các thành
phần mạnh và linh hoạt hơn AWT.
 Các thành phần trong Swing:
 Nút nhấn, hộp kiểm tra, nhãn,..
 Bảng thẻ, bảng cuộn, cây và bảng
 Các thành phần quen thuộc (nút nhấn, hộp
kiểm tra, nhãn,…) trong swing có nhiều khả
năng hơn và dễ sử dụng hơn

114
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Các lớp thành phần của swing
Lớp Diễn giải
JLabel Lớp quản lý nhãn của Swing
JRadioButton Lớp quản lý nút Radio
ImageIcon Lớp quản lý biểu tượng
JApplet Lớp làm việc Applet
Jbutton Lớp quản lý button
JCheckbox Lớp quản lý hộp kiểm tra
JCombobox Lớp quản lý hộp danh sách
JScrollPane Lớp tóm lược cửa sổ cuộn
JTree Lớp tóm lược điều khiển cây cơ sở
JTextField Lớp quản lý văn bản
JTabbedPane Lớp quản lý điều khiển bảng cơ sở
115
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG VII:
LẬP TRÌNH MẠNG

116
I. Giới thiệu
 Các máy tính chạy trên Internet giao tiếp
với nhau sử dụng giao thức TCP và UDP
 Lập trình mạng là Viết chương trình Java để
giao tiếp thông qua mạng
 Để thực hiện giao tiếp mạng trong Java cung
cấp lớp trong gói java.net => Lớp này cung
cấp các giao tiếp mạng độc lập
 Các máy tính chạy trên Internet giao tiếp
với nhau phải sử dụng giao thức xác định.
Các giao thức để gửi dữ liệu qua mạng:
 TCP - Transmission Control Protocol
 UDP - User Datagram Protocol

117
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. TCP
 Giao thức TCP cho phép gửi từng gói dữ liệu đi,
nơi nhận phải có trách nhiệm thông báo và kiểm
tra xem dữ liệu đã đến đủ hay chưa, có lỗi hay
không có lỗi.
 Trước khi chuyển dữ liệu bao giờ cũng có sự kết
nối giữa máy gửi và máy nhận => Do đó đảm
bảo dữ liệu được truyền chính xác và luôn duy
trì kết nối.
 TCP cung cấp một kênh điểm – điểm cho ứng
dụng giao tiếp tin cậy => TCP đảm bảo dữ liệu
đó gửi từ một người ở đầu kết nối đến được đầu
cuối kết nối theo đúng thứ tự được gửi, nếu
không gửi được thì lỗi sẽ thông báo
118
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Truyền dữ liệu theo TCP thường áp dụng cho
các dịch vụ như truyền tập tin, dịch vụ
truyền hình, các dịch vụ trên Internet đòi hỏi
độ chính xác cao,…

119
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. UDP
 Giao thức UDP cung cấp cho giao tiếp không
cần đảm bảo giữa hai ứng dụng trên mạng,
không có sự kết nối trước giữa nơi gửi và nơi
nhận, dữ liệu gửi đi mặc định rằng máy tính
ở đầu nhận luôn ở trạng thái sẵn sàng để
tiếp nhận từ đầu gửi.
 Nếu dữ liệu gửi đến bị lỗi trong quá trình
truyền hay không nhận được đầy đủ thì giao
thức UDP không có thông tin phản hồi báo lại
 UDP thường được dùng trong các ứng dụng
không đòi hỏi sự chính xác cao như: dịch vụ
thông báo giờ, tỷ giá hay các dịch vụ nhắn
tin,…
120
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Khái niệm cổng
 Máy tính có một kết nối vật lý vào mạng =>
Tất cả các dữ liệu đến máy tính cụ thể nào
đó đều thông qua kết nối đó.
 Dữ liệu có thể gửi đến cho nhiều ứng dụng
khác nhau chạy trên máy tính => Làm thế
nào để biết ứng dụng nào để gửi dữ liệu đi
=> Thông qua sử dụng cổng
 Cổng là một số nguyên dương có thể nhận
giá trị từ 1 đến 16283

121
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Máy chủ sẽ quy định cổng được sử dụng cho
mỗi loại dịch vụ, thông tin giữa máy khách
(client) và máy chủ(server) phải sử dụng
cổng tương ứng nhau thì mới trao đổi dữ liệu
được với nhau.
 Khi tự xây dựng một ứng dụng làm dịch vụ
trên máy chủ phải chọn một số cổng có giá
trị khác với giá trị cổng mà các dịch vụ nổi
tiếng đã sử dụng
 FTP 21 Telnet 23
 HTTP 80 Finger 79
 SMTP 25

122
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
V. Giao tiếp mô hình khách – chủ
 Các dịch vụ hỗ trợ trên Internet như e-mail, nhóm
tin, chuyển tập tin, đăng nhập từ xa,… đều được tổ
chức và kiến trúc theo mô hình khách/chủ (mô hình
Client/Server).
 Cơ chế thực hiện: Các chương trình ở máy
khách(client)(như trình duyệt hay chương trình gửi
nhận email …) sẽ tạo ra kết nối với một máy chủ ở
xa(server) sau đó gửi yêu cầu đến máy chủ =>
Sau đó các chương trình trên máy chủ(như Web
Server hay Mail Server …) sẽ xử lý các yêu cầu này
và gửi kết quả ngược trả về cho máy khách
 Thông thường một dịch vụ máy chủ phục vụ cho
nhiều máy khách

123
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VI. Lập trình thông qua Socket
 Trước khi yêu cầu một dịch vụ trên máy chủ
thực hiện điều gì đó thì máy khách (client)
phải có khả năng kết nối được với máy chủ,
quá trình kết nối này được máy thực hiện
thông qua cơ chế gọi là Socket( cơ chế ổ
cắm)  Kết nối giữa máy khách và chủ
tương tự như việc cắm phích điện vào ổ
cắm ( trong đó: máy khách được coi như
phích cắm điện và máy chủ được coi như ổ
cắm điện, một ổ cắm có thể được cắm vào
đó nhiều phích điện khác nhau tương đương
với một máy chủ có thể kết nối nhiều máy
khách)
124
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Việc kết nối theo cơ chế Socket cần biết hai
thông tin chủ yếu:
 Địa chỉ của máy cần kết nối
 Số hiệu cổng của chương trình dịch vụ
 Java cung cấp lớp Socket ( “phích cắm điện”
cho máy khách) và ServerSocket( “ổ cắm
điện” đặt trên máy chủ) để hỗ trợ cho lập
trình Client/Server. Hai lớp này được đặt
trong gói thư viện Java.net
 Lưu ý: Lớp Socket có thể dùng chung cho cả
máy khách và máy chủ nhưng thông thường
vẫn dùng lớp ServerSocket để thực hiện
quản lý kết nối riêng ở máy chủ lớn
125
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VII. Lớp InetAddress
 Là lớp được dành riêng cho việc quản lý địa
chỉ theo tên và theo số của một địa chỉ
Internet.
 Lớp InetAddress cung cấp các phương thức
thông dụng nhất để chuyển đổi và truy xuất
địa chỉ IP

126
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các phương thức cơ bản
 public InetAddress getLocalHost(): trả về đối
tượng InetAddress là địa chỉ của máy cục bộ (Local
Host)
 public InetAddress getByName(String host):
phương thức nhận địa chỉ của một máy bằng kiểu
chuỗi String và trả về đối tượng kiểu InetAddress
thay mặt cho địa chỉ máy
 public InetAddress[] getAllByName( String host):
phương thức nhận địa chỉ của một máy bằng kiểu
chuỗi và trả về tất cả các đối tượng InetAddress
thay mặt cho địa chỉ máy

127
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 public byte[] getAddress(): trả về địa chỉ IP của
đối tượng InetAddress dưới dạng một dãy các byte,
vị trí byte cao nhất nằm ở byte 0
 public String getHostAddress(): trả về địa chỉ IP
của đối tượng InetAddress dưới dạng một chuỗi
được định dạng phân làm 4 nhóm %d.%d.%d.%d
(Ví dụ: “172.16.11.12”)

128
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*Ví dụ: Viết CT lấy thông tin máy chủ
import java.net.*;
public class AddrLookupApp {
public static void main(String args[]) {
try {
if(args.length != 1) {
System.out.println("Usage: java AddrLookupApp <HostName>");
}
/* Lấy về đối tượng InetAddress chứa thông tin địa chỉ máy chủ */
InetAddress host=InetAddress.getByName(args[0]);
String hostName = host.getHostName();
/* Xuất các thông tin ra màn hình */
System.out.println(“Host name:” + hostName);
System.out.println(“IP address:” + host.getHostAddress());
}
catch(UnknownHostException e)
{ System.out.println(“Ko co dia chi"); }
}
}

129
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
VIII. Lớp Socket
 Lớp Socket dùng tạo kết nối từ phía máy
khách tới máy chủ

130
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*. Các phương thức lớp Socket:
 public Socket( String host, int port): tạo ra
một Socket kết nối máy có tên theo địa chỉ
host và số cổng port
 public Socket( InetAddress add, int port): tạo
ra một Socket kết nối từ địa chỉ là add và số
cổng port
 public Socket(String host,int port, boolean stream):
tạo ra một Socket kết nối theo địa chỉ host và
số cổng port, tham số stream để quy định kết
nối theo TCP( stream=true) hay
UDP( stream=false)

131
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 InputStream getInputStream(): lấy về luồng
nhập để máy khách có thể đọc dữ liệu trả về từ
phía máy chủ
 OutputStream getOutputStream(): lấy về
luồng xuất để máy khách có thể ghi dữ liệu gửi
đến máy chủ
 InetAddress getInetAddress(): lấy địa chỉ kết
nối socket của máy chủ
 int getPort(): lấy về số cổng dùng kết nối của
máy chủ
 synchoronized void close(): cắt đứt kết nối với
máy chủ
132
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IX. Lớp ServerSocket:
 Lớp ServerSocket dùng tạo kết nối từ phía
máy chủ với các máy khách.
 Đối tượng ServerSocket được tạo ra trên
máy chủ và lắng nghe những kết nối từ phía
máy khách gửi đến theo một số cổng định
trước

133
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*. Các phương thức cơ bản:
 public ServerSocket( int port): port là số
hiệu cổng mà đối tượng ServerSocket phải
lắng nghe để nhận biết những kết nối từ phía
máy khách gửi đến
 Socket accept(): phương thức dừng lại chờ
đợi cho đến khi nhận được thông tin kết nối
sẽ trả về đối tượng Socket của máy khách
nơi có yêu cầu nối vào máy chủ
 public void close(): phương thức để máy chủ
cắt đứt mọi kết nối với các máy khách

134
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
X. Lớp DatagramSocket
 Lớp này được dùng để chuyển đi một gói dữ
liệu( biểu diễn bằng đối tượng
DatagramPackage) theo giao thức UDP
 Dữ liệu được gửi đi không bảo đảm được
nhận đầy đủ và có thể bị lỗi trên đường
truyền( cơ chế dùng lớp DatagramSocket
không an toàn bằng lớp Socket)

135
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*. Các phương thức lớp DatagramSocket
 public DatagramSocket(): phương thức
khởi dựng để tạo kết nối UDP
 public DatagramSocket( int port): phương
thức khởi dựng để tạo kết nối UDP với số
hiệu cổng port
 public void synchronized
send( DatagramPackage p): phương thức
gửi gói dữ liệu p đi
 public void synchronized
receive( DatagramPackage p): phương thức
nhận gói dữ liệu p về
 public void synchronized close(): phương
thức đóng kết nối
136
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
XI. Lớp DatagramPackage
 Lớp này được dùng cho một gói dữ liệu gửi đi
trên mạng theo kết nối DatagramPackage.
 Mỗi gói có thể chứa các thông tin sau:
 Dữ liệu
 Chiều dài gói
 Các địa chỉ IP
 Số cổng gói dữ liệu được gửi đi

137
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*. Các phương thức lớp DatagramPackage
 public DatagramPackage( byte buf[], int
len): phương thức khởi dựng để tạo ra gói dữ
liệu chứa trong bộ đệm buf[] và chiều dài
gói dữ liệu được tạo ra là len
 public InetAddress getAddress(): trả về địa
chỉ chứa trong gói dữ liệu
 public byte[] getData(): trả về dữ liệu thật
sự chứa trong gói được gửi
 public int getLength(): trả về kích thước
hay chiều dài gói dữ liệu
 public int getPort(): trả về số hiệu cổng
chứa trong gói
138
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
X. Cách chạy ứng dụng Client/Server:
 Viết ứng dụng Client và thực hiện biên dịch
 Viết ứng dụng Server và thực hiện biên dịch
 Mở hai cửa sổ dòng lệnh DOS để chạy cho
hai ứng dụng:
 Chạy ứng dụng Server bằng lệnh sau:
java Server
 Chạy ứng dụng Client bằng lệnh sau:
java Client 127.0.0.1

139
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
XI. Xây dựng chương trình máy khách:
 Các chương trình ở máy khách thường thực
hiện các nhiệm vụ:
 Kết nối với máy chủ
 Nhận dữ liệu hay yêu cầu do người dùng nhập từ
bên ngoài
 Gửi dữ liệu hay yêu cầu đến máy chủ để xử lý
 Nhận kết quả trả lại từ máy chủ và trình bày kết
quả nhận được từ máy chủ cho người dùng xem

140
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
XII. Xây dựng chương trình máy chủ:
 Các chương trình ở máy chủ thường thực
hiện các nhiệm vụ:
 Lắng nghe các kết nối từ máy khách gửi đến
 Tiếp nhận những yêu cầu từ phía máy khách
 Xử lý các yêu cầu của phía máy khách
 Gửi kết quả lại cho máy khách

 => Chương trình ở máy chủ đóng vai trò như


một dịch vụ phục vụ cho máy khách làm việc

141
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
XI. Ví dụ áp dụng sử dụng giao thức TCP
 Viết ứng dụng Client và Server.
 Yêu cầu:
 Client gửi một chuỗi đến Server
 Server nhận chuỗi và đảo ngược chuỗi đó
 Server gửi lại Client chuỗi đã đảo ngược

142
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* ECHOCLIENT.JAVA

import java.net.*;
import java.io.*;
public class EchoClient
{
public static void main(String args[])
{
if (args.length !=1)
{
System.out.println("Usage: java EchoClient<serverAddr>");
return;
}
ClientConnect client = new ClientConnect(args[0],3456);
client.requestServer();
client.shutdown();
}
}

143
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
class ClientConnect
{
Socket connection;
DataOutputStream out;
BufferedReader in;
public ClientConnect(String destination,int port)
{
try
{
connection = new Socket(destination,port);
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
out= new DataOutputStream(connection.getOutputStream());
System.out.println("Ket noi toi Server tai cong 3456.");
}
catch (Exception e)
{
System.out.println(e);
}
}

144
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
public void requestServer()
{
BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));
boolean finished=false;
do
{
try
{
System.out.print("Gui(Send),Nhan(Receive) hoac Thoat(Quit) (S/R/Q):");
System.out.flush();
String line = keyboardInput.readLine();
if(line.length()>0)
{
line=line.toUpperCase();
switch (line.charAt(0))
{
case 'S':
String sendLine = keyboardInput.readLine();
out.writeBytes(sendLine);
out.write(13);
out.write(10);
out.flush();
break;
145
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
case 'R':
int inByte;
System.out.print(">>>>");
while ((inByte = in.read()) != '\n')
System.out.write(inByte);
System.out.println();
break;
case 'Q':
finished=true;
break;
default:
break;
} //Đóng của Switch
} //Đóng của If
} //Đóng của Try
catch (Exception e)
{
System.out.println(e);
}
} while(!finished);
}
146
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
public void shutdown()
{
try
{
connection.close();
}
catch (IOException ex)
{
System.out.println("Loi nhap xuat khi thuc hien dong cong");
}
}
} //Đóng của lớp ClientConnect

147
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* ECHOSERVER.JAVA

import java.net.*;
import java.io.*;
public class EchoServer
{
public static void main(String args[])
{
try
{
ServerSocket server = new ServerSocket(3456);
int localPort = server.getLocalPort();
System.out.println("Echo Server dang lang nghe tai cong "+localPort+".");
Socket client = server.accept();
String destName = client.getInetAddress().getHostName();
int destPort = client.getPort();
System.out.println(“Ket noi toi "+destName+" tai cong "+destPort+".");
BufferedReader inStream=new BufferedReader(new InputStreamReader(client.getInputStream()));
DataOutputStream outStream = new DataOutputStream(client.getOutputStream());
boolean finished = false;
148
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
do
{
String inLine = inStream.readLine();
System.out.println("Nhan duoc: "+inLine);
if(inLine.equalsIgnoreCase("quit")) finished=true;
String outLine=new EchoString(inLine.trim()).getString();
for(int i=0;i<outLine.length();++i)
outStream.write((byte)outLine.charAt(i));
outStream.write(13);
outStream.write(10);
outStream.flush();
System.out.println("Da gui: "+outLine);
} while(!finished);
inStream.close();
outStream.close();
client.close();
server.close();
} //Đóng của Try
catch (IOException e)
{
System.out.println(e);
}
} //Đóng của hàm main
} //Đóng của EchoServer
149
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
class EchoString
{
String s;
public EchoString(String in)
{
int len = in.length();
char outChars[] = new char[len];
for(int i=0;i<len;++i)
outChars[len-1-i]=in.charAt(i);
s = String.valueOf(outChars);
}
public String getString()
{
return s;
}
}

150
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
XII. Ví dụ áp dụng sử dụng giao thức UDP
 Viết ứng dụng Client và Server.
 Yêu cầu:
 Kết nối và trao đổi thông tin giữa máy chủ
và máy khách bằng giao thức UDP
 Chương trình ExchangeRateServer phía
máy chủ cung cấp tỷ giá chứng khoán của
ba thị trường Tokyo, NewYork, HongKong
 Chương trình ExchangeRateTable phía máy
khách sẽ cập nhật liên tục những thông tin
sau mỗi giây

151
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
ANY QUESTION?

152
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
Yêu cầu tóm tắt kiến thức C++:
 Gồm:
 Các kiểu dữ liệu cơ bản
 Cách khai báo biến, hằng, cấu trúc…
 Các cấu trúc điều khiển: if, for, switch, while,…
 Xây dựng hàm
 Xây dựng lớp, kế thừa, cấu tử,…

 Mỗi phần có: ý nghĩa, cú pháp, giải thích, ví


dụ
 Yêu cầu:
 Viết
bằng tay
 Đóng quyển cẩn thận

153
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG IV:
GÓI VÀ GIAO DIỆN

154
 Định nghĩa một giao diện
 Sử dụng giao diện
 Định nghĩa gói
 Tạo và sử dụng các gói
 Vai trò của các gói trong việc điều khiển truy
cập
 Những đặc trưng của gói java.lang
 Những đặc trưng của gói java.util

155
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
I. Gói
 Là đơn vị tổ chức liên kết các thành phần:
lớp, giao diện, gói con lại với nhau
 Gói là một lớp được đóng gói để cho có thể
sử dụng đến khi cần => Gói được coi như
thư viện tham khảo của chương trình
 Mỗi gói được tổ chức như một thư mục trong
máy và trong gói bao gồm nhiều lớp, nhiều
giao diện khác nhau

156
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Tạo gói
 Đặc điểm tạo gói:
 Đoạn mã bắt đầu với phát biểu “package” =>
xác định rằng lớp được định nghĩa trong tập tin là
phần của gói xác định
 Mã nguồn của gói phải nằm trong cùng thư mục
và thư mục đó là tên gói đang được định nghĩa
 Quy ước tên gói được bắt đầu bằng chữ thường
 Các thành phần xuất hiện sau khai báo gói gồm:
các câu lệnh nhập, các câu lệnh định nghĩa lớp
 Mỗi lớp trong gói khi tạo xong cần được biên dịch

157
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các bước tạo gói:
 Bước 1: khai báo gói bằng cách dùng cú pháp sau:
package <tên gói>;
 Bước 2: sử dụng lệnh import để nhập các gói chuẩn
cần sử dụng.
 Bước 3: khai báo và định nghĩa các lớp sẽ nằm trong
gói, tất cả các thành phần của gói đều phải khai báo
là public để có thể được truy cập từ bên ngoài khi
cần sử dụng đến.
 Bước 4: Gói được lưu với phân mở rộng .java và
biên dịch các lớp được định nghĩa trong gói bằng
lệnh javac nhưng với tham số -d để cho phép tạo
thư mục trùng với tên gói và đặt tập tin .class vào
thư mục xác định theo cú pháp:
javac -d <tên-thư-mục> tên-tệp.java

158
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
package mypackage;
public class calculate
{
public double Multi( double x, double y )
{ return (x*y); }
public double Add( double x, double y)
{ return (x+y); }
public double Devide( double x, double y)
{ return (x/y); }
}
159
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Lưu ý:
 Mã nguồn của các chương trình sử dụng gói
phải tồn tại trong cùng một thư mục với gói
được định nghĩa bởi người sử dụng
 Khi muốn sử dụng gói được định nghĩa dùng
từ khóa import ngay đầu chương trình

160
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Gói và điều khiển truy xuất:
 Gói chứa các lớp và các gói con. Java cung cấp
nhiều mức độ truy cập thông qua các lớp, các gói
và các chỉ định truy cập.
 Bảng tóm tắt quyền truy cập:

public protected No private


modifier
Cùng lớp Yes Yes Yes Yes

Cùng gói – lớp kế thừa Yes Yes Yes No

Cùng gói – không kế thừa Yes Yes Yes No

Khác gói – lớp kế thừa Yes Yes No No

Khác gói – không kế thừa Yes No No No


161
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Các gói Java cơ bản:
Gói Mô tả

java.lang Không cần phải khai báo, luôn mặc định

java.io Bao gồm các lớp để trợ giúp cho tất cả các
thao tác nhập và xuất
java.applet Bao gồm các lớp để thực thi applet

java.awt Để tạo các ứng dụng đồ họa

java.util Cung cấp các lớp, giao diện để tạo ứng


dụng, các applet, CTDL, lịch biểu,…
java.net Cung cấp các lớp, giao diện lập trình mạng
TCP/IP
162
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
III. Giao diện
 Trong java chỉ cho phép xây dựng lớp kế
thừa đơn mức => Để mô tả kế thừa đa mức
thì phải thông qua giao diện để mô tả cho
phép nhiều lớp khác nhau trao đổi với nhau
 Giao diện được sử dụng để thay thế một lớp
trừu tượng, tương tự như lớp trừu tượng

163
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
 Khai báo giao diện được khai báo gần giống
như khai báo lớp, gồm dữ liệu và phương
thức nhưng:
 Các vùng dữ liệu luôn luôn là hằng (final)
 Các phương thức là trừu tượng dù không được
khai báo với từ khóa abstract

164
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cú pháp khai báo giao diện:
[public] interface NameOfInterface [extends InterfaceOld]
{
//Khai báo và định nghĩa các thành phần của giao tiếp
}

Trong đó:
 interface: là từ khóa để khai báo
 NameOfInterface: tên của giao diện được định nghĩa
 InterfaceOld: tên của giao diện đã có được kế thừa
khi cần
 Chú ý: Giao diện được lưu trữ với phần mở rộng
là .java và tiến hành biên dịch thông thường
như một chương trình Java
165
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
*Các bước tạo giao diện
Viết đoạn mã chương trình tạo giao diện và
lưu lại với tên *.java
Biên dịch giao diện (javac)
Thực thi giao diện: tạo ra một lớp để thực thi
giao diện theo cú pháp
class <class-name> implements <interface-name>
{…}
Lưu ý:
Tất cả các phương thức trong giao diện có kiểu
public
Các phương thức sẽ được định nghĩa tại lớp thực thi
giao diện

166
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Ví dụ:
// Khai báo một giao diện
public interface Product
{
static final String MAKER = “My Corp”;
static final String PHONE = “08-8425678”;
public int getPrice(int id);
}
//======================================
// Khai báo một lớp mới có cài đặt giao tiếp đã được khai báo
public class Shoe implements Product
{
//Cài đặt lại phương thức của giao tiếp trong lớp
public int getPrice(int id)
{ if (id == 1) return(5);
else return(10)
}
public String getMaker()
{ return(MAKER);
}
}
167
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
IV. Phân luồng và đa luồng:
 Thread là một đơn vị hành động của hệ điều
hành, một chương trình có thể chia thành
nhiều thread.
 Các thread trong mỗi chương trình sẽ được
thực hiện tuần tự và gần như đồng thời,
chúng được giao tiếp với nhau qua các
interface hay được đồng bộ hóa
(synchronized).

168
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cách tạo Thread:
 Tạo lớp dẫn xuất từ lớp Thread của Java:
 Thực hiện khai báo: import java.lang.Thread
 Xây dựng lớp:

public class GreatClass extend Thread…


 Cài đặt giao tiếp Runable:
 Phải khai báo thêm phương thức run() trong lớp
đang xét, trong phương thức này thực hiện tất cả
các việc phải làm của từng thread
public class GreatClass extend
java.applet.Applet implements Runable
 Sau đó khai báo đối tượng Thread như là một
vùng dữ liệu của lớp
169
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
CHƯƠNG III:
XỬ LÝ NGOẠI LỆ

170
I. Giới thiệu
 Ngoại lệ (Exception) là một đối tượng đặc
biệt được tạo ra khi chương trình gặp lỗi
 Quá trình xử lý Exception được thực hiện
gồm hai giai đoạn:
 Việc trả về ngoại lệ được gọi là throwing
 Việc nắm bắt đối tượng trả về của chương trình
được gọi là catching

171
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
II. Mô hình xử lý ngoại lệ:
 Mô hình xử lý ngoại lệ của Java được gọi là
mô hình “catch and throw”
 Các bước thực hiện của mô hình:
 Khingoại lệ xảy ra => Ngoại lệ sẽ bị chặn
 Sau đó ngoại lệ sẽ được chuyển đến khối xử lý
tương ứng
 Chú ý: Ngoại lệ khi xảy ra phải được xử lý
hoặc thoát khỏi chương trình

172
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Cấu trúc ngoại lệ
try
{
//Đoạn mã có khả năng gây ra ngoại lệ
}
catch ( Exception_01 e1)
{
//Nếu lệnh trong khối try tạo ra ngoại lệ có loại e1 thì thực hiện xử
lý ngoại lệ, nếu không chuyển xuống khối catch tiếp theo
}

catch ( Exception_02 e2)
{
//Nếu lệnh trong khối try tạo ra ngoại lệ có loại e2 thì thực hiện xử
lý ngoại lệ, nếu không chuyển xuống khối catch tiếp theo
}
finally
{
//Khối lệnh được thực hiện cho dù ngoại lệ có xảy ra hay không
}
173
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Trong đó:
 Exception_01, Exception_02,…: là tên
các ngoại lệ có khả năng xảy ra
 e1, e2,…: là tên biến của các ngoại lệ

174
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java
* Các loại ngoại lệ cơ bản
 Tham khảo SGK – 57
 Các loại ngoại lệ:
 ArithmeticException
 IOException
 ArrayStoreException
 NullPointerException
 OutOfMemoryException
…

175
TT Tin học và Ngoại Ngữ Trí Đức - Chuyên đề Java

You might also like