Tải bản đầy đủ (.pdf) (170 trang)

Đề cương lập trình nâng cao với java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 170 trang )

LẬP TRÌNH NÂNG CAO VỚI JAVA
(Advanced Java programming)

Bộ môn Công nghệ Phần mềm
Đại học SPKT Hưng Yên


Bài 1. Kế thừa và đa hình trong Java............................................................................................................. 9
1.1.

Đối tượng trong Java..................................................................................................................... 9

1.2

Lớp trong Java ............................................................................................................................... 9

1.3

Phương thức trong Java .............................................................................................................. 11

1.4

Tạo một đối tượng trong Java .................................................................................................... 11

1.5

Truy cập các biến instance và các phương thức trong Java........................................................ 12

1.6

Đối tượng vô danh (annonymous) trong Java ............................................................................ 16



Bài 3: Xử lý ngoại lệ ..................................................................................................................................... 19
3.1 Exception là gì? ................................................................................................................................. 19
Cấp bậc exception trong Java ............................................................................................................. 20
Các phương thức của lớp Exceptions trong Java ................................................................................ 21
Các tình huống phổ biến mà Exception có thể xảy ra ......................................................................... 22
Các từ khóa để Xử lý ngoại lệ trong Java ............................................................................................ 23
3.2 Khối try trong Java ............................................................................................................................ 23
Cú pháp của khối try-catch trong Java ................................................................................................ 23
Cú pháp của khối try-finally trong Java ............................................................................................... 23
Khối catch trong Java .......................................................................................................................... 23
Vấn đề khi không có Exception Handling ............................................................................................ 23
Xử lý vấn đề trên bởi Exception Handling trong Java ......................................................................... 24
Chế độ làm việc nội tại của khối try-catch trong Java......................................................................... 24
Nhiều khối catch trong Java ................................................................................................................ 25
Lồng khối try trong Java ...................................................................................................................... 26
Tại sao sử dụng các khối try lồng nhau trong Java ............................................................................. 26
Ví dụ về các khối try lồng nhau trong Java.......................................................................................... 27
3.3 Sự sử dụng khối finally trong Java .................................................................................................... 28
Tình huống 1: ở đây exeption không xuất hiện .................................................................................. 28
Tình huống 2: exception xuất hiện và không được xử lý. ................................................................... 28
Tình huống 3: exception xảy ra và được xử lý. ................................................................................... 29
3.6 Phân biệt final, finally, và finalize trong Java .................................................................................... 29
Ví dụ final trong Java ........................................................................................................................... 30
Ví dụ finally trong Java ........................................................................................................................ 30
Ví dụ finalize trong Java ...................................................................................................................... 30


3.4 Từ khóa throw trong Java ................................................................................................................ 31
Ví dụ từ khóa throw trong Java........................................................................................................... 31

Quá trình lan truyền Exception trong Java ......................................................................................... 31
3.5 Từ khóa throws trong Java................................................................................................................ 32
Cú pháp của từ khóa throws trong Java ............................................................................................. 33
Ví dụ về throws trong Java .................................................................................................................. 33
Trường hợp 1: Bạn xử lý exception..................................................................................................... 34
Trường hợp 2: Bạn khai báo exception............................................................................................... 35
A. Chương trình ví dụ nếu exception không xuất hiện ....................................................................... 35
B. Chương trình ví dụ nếu exception xuất hiện .................................................................................. 35
Phân biệt throw và throws trong Java ................................................................................................ 36
Ví dụ về throw trong Java ................................................................................................................... 37
Ví dụ về throws trong Java .................................................................................................................. 37
Ví dụ về throw và throws trong Java................................................................................................... 37
3.6 ExceptionHandling và Ghi đè phương thức trong Java.................................................................... 37
3.7. Custom Exception trong Java ........................................................................................................... 41
Bài 5. String ................................................................................................................................................. 43
5.1 String trong Java................................................................................................................................ 43
Chuỗi trong Java là gì ......................................................................................................................... 43
Cách tạo đối tượng String trong Java .................................................................................................. 43
Sử dụng từ khóa new .......................................................................................................................... 44
Tạo các String được định dạng trong Java .......................................................................................... 45
5.2 Immutable String trong Java ............................................................................................................. 46
Tại sao đối tượng String là Immutable trong Java? ............................................................................ 47
5.3. So sánh chuỗi trong Java .................................................................................................................. 47
So sánh chuỗi bởi phương thức equals() trong Java ........................................................................... 47
So sánh chuỗi với toán tử == trong Java ............................................................................................. 48
So sánh chuỗi bởi phương thức compareTo() trong Java ................................................................... 49
5.4 Nối chuỗi trong Java.......................................................................................................................... 49
Nối chuỗi bởi toán tử + trong Java...................................................................................................... 49
Nối chuỗi bởi phương thức concat() trong Java.................................................................................. 50
5.5 Chuỗi con trong Java ......................................................................................................................... 51



Ví dụ về chuỗi con trong Java ............................................................................................................. 51
5.6 Phương thức của lớp String trong Java............................................................................................. 52
Phương thức toUpperCase() và toLowerCase() của lớp String trong Java ......................................... 52
Phương thức trim() của lớp String trong Java ..................................................................................... 53
Phương thức startWith() và endsWith() của lớp String trong Java ..................................................... 53
Phương thức charAt() của lớp String trong Java................................................................................. 53
Phương thức length() của lớp String trong Java ................................................................................. 53
Phương thức intern của lớp String trong Java ..................................................................................... 53
Phương thức valueOf() của lớp String trong Java............................................................................... 54
Phương thức replace() của lớp String trong Java ................................................................................ 54
5.7 Lớp StringBuffer trong Java............................................................................................................... 54
Các Constructor quan trọng của lớp StringBuffer trong Java ............................................................. 54
Các phương thức quan trọng của lớp StringBuffer trong Java ........................................................... 55
Chuỗi dạng mutable là gì? .................................................................................................................. 55
Phương thức append() của lớp StringBuffer trong Java ..................................................................... 55
Phương thức insert() của lớp StringBuffer trong Java ........................................................................ 56
Phương thức replace() của lớp StringBuffer trong Java ..................................................................... 56
Phương thức delete() của lớp StringBuffer trong Java ....................................................................... 57
Phương thức reverse() của lớp StringBuffer trong Java ..................................................................... 57
Phương thức capacity() của lớp StringBuffer trong Java .................................................................... 57
Phương thức ensureCapacity() của lớp StringBuffer trong Java ........................................................ 58
5.8 StringBuilder trong Java .................................................................................................................... 59
Các Constructor quan trọng của lớp StringBuilder trong Java ........................................................... 59
Các phương thức quan trọng của lớp StringBuffer trong Java ........................................................... 59
Phương thức append() của lớp StringBuffer trong Java ..................................................................... 60
Phương thức insert() của lớp StringBuffer trong Java ........................................................................ 61
Phương thức replace() của lớp StringBuffer trong Java ..................................................................... 61
Phương thức delete() của lớp StringBuffer trong Java ....................................................................... 61

Phương thức reverse() của lớp StringBuffer trong Java ..................................................................... 62
Phương thức capacity() của lớp StringBuffer trong Java .................................................................... 62
Phương thức ensureCapacity() của lớp StringBuffer trong Java ........................................................ 63
5.9 So sánh lớp String và StringBuffer trong Java ................................................................................... 64


Kiểm tra hiệu suất của lớp String và StringBuffer trong Java ............................................................ 64
Kiểm tra HashCode của lớp String và StringBuffer trong Java .......................................................... 66
5.10 So sánh lớp StringBuffer và StringBuilder trong Java ..................................................................... 67
Ví dụ về lớp StringBuffer trong Java .................................................................................................. 67
Ví dụ về lớp StringBuilder trong Java ................................................................................................ 67
Kiểm tra hiệu suất của lớp StringBuffer và StringBuilder trong Java ................................................ 68
Bài 7. Bài tập và thảo luận về Case study ATM (1)...................................................................................... 70
7.1. Các yêu cầu của ATM ....................................................................................................................... 70
7.2. Cách xây dựng lớp và đối tượng ...................................................................................................... 71
1. Các thành phần trong bản vẽ Class ................................................................................................. 71
2. Relationship (Quan hệ) ................................................................................................................... 72
3. Cách xây dựng bản vẽ Class ........................................................................................................... 75
7.2. Phân tích theo mô hình hướng đối tượng ....................................................................................... 77
1. Đặc tả Class..................................................................................................................................... 77
2. Sử dụng bản vẽ Class ...................................................................................................................... 78
3. Kết luận ........................................................................................................................................... 78
Bài 8. Thao tác tệp ...................................................................................................................................... 79
8.1 File và I/O trong Java......................................................................................................................... 79
Byte Stream trong Java ....................................................................................................................... 79
Character Stream trong Java ............................................................................................................... 80
Standard Stream trong Java ................................................................................................................ 81
Đọc và Ghi File trong Java ................................................................................................................... 83
FileInputStream trong Java: ................................................................................................................ 83
FileOutputStream trong Java .............................................................................................................. 84

Ví dụ: ................................................................................................................................................... 85
Điều hướng file và I/O trong Java ....................................................................................................... 86
Thư mục trong Java ............................................................................................................................. 86
Tạo thư mục trong Java ...................................................................................................................... 87
Liệt kê thư mục trong Java .................................................................................................................. 87
8.2 Lớp File trong Java ............................................................................................................................ 88
Ví dụ .................................................................................................................................................... 92
8.3 Lớp FileReader trong Java ................................................................................................................. 94


8.4 Lớp FileWriter trong Java .................................................................................................................. 95
Ví dụ .................................................................................................................................................... 96
Bài 10. Kiểu Collections ............................................................................................................................... 98
10.1 Collection trong Java .................................................................................................................... 98
Collection Interface trong Java ........................................................................................................... 98
Các lớp Collection trong Java .............................................................................................................. 99
Các thuật toán Collection trong Java ................................................................................................ 102
Cách sử dụng một Iterator trong Java .............................................................................................. 102
Cách sử dụng một Comparator trong Java ....................................................................................... 102
Tổng kết ............................................................................................................................................ 103
10.2 Collection Interface trong Java .................................................................................................. 103
Ví dụ .................................................................................................................................................. 105
10.3 List Interface trong Java ............................................................................................................. 106
Ví dụ .................................................................................................................................................. 108
10.4 Lớp LinkedList trong Java ........................................................................................................... 109
Ví dụ .................................................................................................................................................. 112
Ví dụ .................................................................................................................................................. 116
10.5 Lớp Hashtable trong Java .............................................................................................................. 117
Ví dụ .................................................................................................................................................. 119
10.6 Map Interface trong Java .............................................................................................................. 120

Ví dụ .................................................................................................................................................. 122
10.7 Lớp HashMap trong Java............................................................................................................... 123
Ví dụ .................................................................................................................................................. 125
Bài 12 Generic trong Java.......................................................................................................................... 127
12.1 Generic trong Java ........................................................................................................................ 127
12.2 Các phương thức generic trong Java ............................................................................................ 127
Ví dụ: ................................................................................................................................................. 128
12.3 Các tham số kiểu giới hạn (bounded type) trong Java .................................................................. 129
Ví dụ: ................................................................................................................................................. 129
12.4 Các lớp Generic trong Java............................................................................................................ 131
Ví dụ: ................................................................................................................................................. 131
Bài 14: Thread ........................................................................................................................................... 133


14.1 Thread trong Java.......................................................................................................................... 133
14.2 Vòng đời của một Thread trong Java ............................................................................................ 133
14.3 Quyền ưu tiên của thread trong Java ........................................................................................... 134
14.4 Tạo thread bởi triển khai Runnable Interface trong Java ............................................................. 134
Ví dụ: ................................................................................................................................................. 135
14.5 Tạo Thread bởi kế thừa lớp Thread trong Java............................................................................. 137
Ví dụ: ................................................................................................................................................. 137
14.6 Các phương thức của lớp Thread trong Java ................................................................................ 139
Bài 17. Lập trình với JDBC ...................................................................................................................... 145
17.1 JDBC là gì? ................................................................................................................................... 145
Tại sao sử dụng JDBC? ..................................................................................................................... 145
API là gì? .......................................................................................................................................... 145
Các thành phần của JDBC ................................................................................................................ 145
17.2. Cài đặt JDBC ............................................................................................................................... 146
17.3 Giới thiệu JDBC Driver ............................................................................................................... 146
JDBC Driver là gì?............................................................................................................................ 146

Giới thiệu JDBC-ODBC bridge driver ............................................................................................. 147
Giới thiệu Native-API driver ............................................................................................................ 147
Giới thiệu Network Protocol driver .................................................................................................. 147
Giới thiệu Thin driver ....................................................................................................................... 147
Sự sử dụng của các kiểu driver ......................................................................................................... 147
17.4 Kiểu dữ liệu trong JDBC .............................................................................................................. 148
Kiểu dữ liệu Date và Time trong JDBC ............................................................................................ 151
Xử lý giá trị NULL trong JDBC ....................................................................................................... 153
17.5 Kết nối JDBC với cơ sở dữ liệu .................................................................................................... 154
Sử dụng phương thức Class.forName() ............................................................................................ 155
Sử dụng DriverManager.registerDriver().......................................................................................... 155
Đóng kết nối JDBC ........................................................................................................................... 158
Bài 18. Bài tập và thảo luận về Case study ATM (3).................................................................................. 159
18.1. Cài đặt các chức năng và giao diện .............................................................................................. 159
18.2. Chạy và kiểm tra lỗi ...................................................................................................................... 159
Bài 20. Bài tập và thảo luận tổng kết môn học ......................................................................................... 160


20.1. Những ưu điểm của lập trình hướng đối tượng ............................................................................ 160
20.2. Phân tích bài toán theo mô hình hướng đối tượng ..................................................................... 160
Đối tượng trong Java......................................................................................................................... 160
Lớp trong Java ................................................................................................................................... 161
Cú pháp để khai báo một lớp ............................................................................................................ 161
Ví dụ đơn giản về Lớp và Đối tượng trong Java ................................................................................ 161
Phương thức trong Java .................................................................................................................... 162
Constructor trong Java: ..................................................................................................................... 162
Tạo một đối tượng trong Java: ......................................................................................................... 163
Truy cập các biến instance và các phương thức trong Java.............................................................. 164
Ví dụ: ................................................................................................................................................. 164
Ví dụ đối tượng và lớp mà duy trì bản ghi các sinh viên ................................................................... 165

Ví dụ khác về lớp và đối tượng trong Java ........................................................................................ 166
Các cách khác nhau để tạo đối tượng trong Java? ........................................................................... 167
Đối tượng vô danh (annonymous) trong Java .................................................................................. 168
Tạo nhiều đối tượng bởi chỉ một kiểu .............................................................................................. 168
20.3. Trao đổi: ....................................................................................................................................... 169


Bài 1. Kế thừa và đa hình trong Java
1.1. Đối tượng trong Java
Đó là một thực thể có trạng thái và hành vi, ví dụ như bàn, ghế, xe con, mèo, … Nó có
thể mang tính vật lý hoặc logic. Ví dụ về logic đó là Banking system.
Một đối tượng có ba đặc trưng sau:
Trạng thái: biểu diễn dữ liệu (giá trị) của một đối tượng.
Hành vi: biểu diễn hành vi (tính năng) của một đối tượng như gửi tiền vào, rút tiền ra, …
Nhận diện: việc nhận diện đối tượng được triển khai thông qua một ID duy nhất. Giá trị
của ID là không thể nhìn thấy với người dùng bên ngoài. Nhưng nó được sử dụng nội tại
bởi JVM để nhận diện mỗi đối tượng một cách duy nhất.
Ví dụ: Bút là một đối tượng. Nó có tên là Thiên Long, có màu trắng, … được xem như là
trạng thái của nó. Nó được sử dụng để viết, do đó viết là hành vi của nó.
Đối tượng là sự thể hiện (Instance) của một lớp. Lớp là một Template hoặc bản thiết kế
từ đó đối tượng được tạo. Vì thế đối tượng là Instance (kết quả) của một lớp.

1.2

Lớp trong Java

Một lớp là một nhóm các đối tượng mà có các thuộc tính chung. Lớp là một Template
hoặc bản thiết kế từ đó đối tượng được tạo. Một lớp trong Java có thể bao gồm:
Thành viên dữ liệu
Phương thức

Constructor
Block
Lớp và Interface


Cú pháp để khai báo một lớp
class ten_lop{
thanh_vien_du_lieu;
phuong_thuc;
}
Ví dụ đơn giản về Lớp và Đối tượng trong Java

Trong ví dụ này, chúng ta tạo một lớp Student có hai thành viên dữ liệu là id và name.
Chúng ta đang tạo đối tượng của lớp Student bởi từ khóa new và in giá trị đối tượng.
class Student1{
int id; //thanh vien du lieu (cung la bien instance)
String name; //thanh vien du lieu (cung la bien instance)

public static void main(String args[]){
Student1 s1=new Student1(); //tao mot doi tuong Student
System.out.println(s1.id);
System.out.println(s1.name);
}
}

Một lớp có thể chứa bất kỳ loại biến sau:
Biến Local: Các biến được định nghĩa bên trong các phương thức, constructor hoặc
block code được gọi là biến Local. Biến này sẽ được khai báo và khởi tạo bên trong
phương thức và biến này sẽ bị hủy khi phương thức đã hoàn thành.
Biến Instance: Các biến instance là các biến trong một lớp nhưng ở bên ngoài bất kỳ

phương thức nào. Những biến này được khởi tạo khi lớp này được tải. Các biến instance
có thể được truy cập từ bên trong bất kỳ phương thức, constructor hoặc khối nào của lớp
cụ thể đó.
Biến Class: Các biến class là các biến được khai báo với một lớp, bên ngoài bất kỳ
phương thức nào, với từ khóa static.


1.3

Phương thức trong Java

Trong Java, một phương thức là khá giống hàm, được sử dụng để trưng bày hành vi của một đối tượng.
Phương thức giúp code tăng tính tái sử dụng và tối ưu hóa code.
Từ khóa new được sử dụng để cấp phát bộ nhớ tại runtime.

Constructor trong Java:
Khi bàn luận về các lớp, một trong những chủ đề quan trọng là các constructor. Mỗi lớp có một constructor.
Nếu chúng ta không viết một constructor một cách rõ ràng cho một lớp thì bộ biên dịch Java xây dựng một
constructor mặc định cho lớp đó.

Mỗi khi một đối tượng mới được tạo ra, ít nhất một constructor sẽ được gọi. Quy tắc
chính của các constructor là chúng có cùng tên như lớp đó. Một lớp có thể có nhiều hơn
một constructor.
Sau đây là ví dụ về một constructor:
public class Xecon{
public Xecon(){
}

public Xecon(String ten){
// Contructor nay co mot tham so la ten.

}
}

Java cũng hỗ trợ Lớp Singleton trong Java, ở đây bạn sẽ có thể tạo chỉ một instance của
một lớp.

1.4

Tạo một đối tượng trong Java

Như đã đề cập trước đó, một lớp cung cấp bản thiết kế cho các đối tượng. Vì thế, về cơ
bản, một đối tượng được tạo từ một lớp. Trong Java, từ khóa new được sử dụng để tạo
một đối tượng mới.


Có ba bước khi tạo một đối tượng từ một lớp:
Khai báo: Một khai báo biến với một tên biến với một loại đối tượng.
Cài đặt: Từ khóa new được sử dụng để tạo đối tượng
Khởi tạo: Từ khóa new được theo sau bởi một lời gọi một constructor. Gọi hàm này khởi
tạo đối tượng mới.
Dưới đây là ví dụ về tạo một đối tượng:
public class Xecon{

public Xecon(String ten){
// Contructor nay co mot tham so la ten.
System.out.println("Ten xe la :" + ten );
}
public static void main(String []args){
// Lenh sau se tao mot doi tuong la Xecuatoi
Xecon Xecuatoi = new Xecon( "Toyota" );

}
}

Nếu chúng ta biên dịch và chạy chương trình, nó sẽ cho kết quả sau:
Ten xe la :Toyota

1.5

Truy cập các biến instance và các phương thức trong Java

Các biến instance và các phương thức được truy cập thông qua các đối tượng được tạo.
Để truy cập một biến instance, path sẽ là như sau:
/* Dau tien, ban tao mot doi tuong */
Doituongthamchieu = new Constructor();


/* Sau do ban goi mot bien nhu sau */
Doituongthamchieu.TenBien;

/* Bay gio ban co the goi mot phuong thuc lop nhu sau */
Doituongthamchieu.TenPhuongThuc();

Ví dụ:
Ví dụ này giải thích cách để truy cập các biến instance và các phương thức của một lớp:
public class Xecon{

int Giaxe;

public Xecon(String ten){
// Contructor nay co mot tham so la ten.

System.out.println("Ten xe la :" + ten );
}
public void setGia( int gia ){
Giaxe = gia;
}

public int getGia( ){
System.out.println("Gia mua xe la :" + Giaxe );
return Giaxe;
}
public static void main(String []args){
/* Tao doi tuong */
Xecon Xecuatoi = new Xecon( "Toyota" );


/* Goi mot phuong thuc lop de thiet lap gia xe */
Xecuatoi.setGia( 1000000000 );

/* Goi mot phuong thuc lop khac de lay gia xe */
Xecuatoi.getGia( );

/* Ban cung co the truy cap bien instance nhu sau */
System.out.println("Gia tri bien :" + Xecuatoi.Giaxe );
}
}

Biên dịch và thực thi chương trình sẽ cho kết quả sau:
Ten xe la :Toyota
Gia mua xe la :1000000000
Gia tri bien :1000000000


Ví dụ đối tượng và lớp mà duy trì bản ghi các sinh viên
Trong ví dụ này, chúng ta tạo hai đối tượng của lớp Student và khởi tạo giá trị của các đối
tượng này bằng việc triệu hồi phương thức insertRecord trên nó. Ở đây, chúng ta đang
hiển thị trạng thái (dữ liệu) của các đối tượng bằng việc triệu hồi phương thức
displayInformation.
class Student2{
int rollno;
String name;

void insertRecord(int r, String n){ //phuong thuc
rollno=r;
name=n;


}

void displayInformation(){System.out.println(rollno+" "+name);} //phuong thuc

public static void main(String args[]){
Student2 s1=new Student2();
Student2 s2=new Student2();

s1.insertRecord(111,"HoangThanh");
s2.insertRecord(222,"ThanhHuong");

s1.displayInformation();
s2.displayInformation();

}

}

Ví dụ khác về lớp và đối tượng trong Java
Ví dụ khác duy trì các bản ghi của lớp Rectangle. Phần giải thích tương tự như trên:
class Rectangle{
int length;
int width;

void insert(int l,int w){
length=l;
width=w;
}


void calculateArea(){System.out.println(length*width);}

public static void main(String args[]){
Rectangle r1=new Rectangle();
Rectangle r2=new Rectangle();

r1.insert(11,5);
r2.insert(3,15);

r1.calculateArea();
r2.calculateArea();
}
}

Các cách khác nhau để tạo đối tượng trong Java?
Có nhiều cách để tạo một đối tượng trong Java. Đó là:

Bằng từ khóa new
Bằng phương thức newInstance()
Bằng phương thức clone(), ….
Bằng phương thức factory, ...

1.6

Đối tượng vô danh (annonymous) trong Java

Vô danh hiểu đơn giản là không có tên. Một đối tượng mà không có tham chiếu thì được
xem như là đối tượng vô danh. Nếu bạn phải sử dụng một đối tượng chỉ một lần, thì đối
tượng vô danh là một hướng tiếp cận tốt.
class Calculation{


void fact(int n){
int fact=1;
for(int i=1;i<=n;i++){
fact=fact*i;
}
System.out.println("factorial is "+fact);
}

public static void main(String args[]){
new Calculation().fact(5); //Goi phuong thuc voi doi tuong vo danh (annonymous)
}
}

Tạo nhiều đối tượng bởi chỉ một kiểu
Chúng ta có thể tạo nhiều đối tượng bởi chỉ một kiểu như khi chúng ta thực hiện trong

các kiểu gốc. Ví dụ:
Rectangle r1=new Rectangle(),r2=new Rectangle(); //Tao hai doi tuong

Ví dụ:
class Rectangle{
int length;
int width;

void insert(int l,int w){
length=l;
width=w;
}


void calculateArea(){System.out.println(length*width);}

public static void main(String args[]){
Rectangle r1=new Rectangle(),r2=new Rectangle(); //Tao hai doi tuong

r1.insert(11,5);
r2.insert(3,15);

r1.calculateArea();
r2.calculateArea();
}
}

Kết quả là:
Output:55
45



Bài 3: Xử lý ngoại lệ
3.1 Exception là gì?
Ý nghĩa trong từ điển: Exception là một tình trạng bất thường. Trong Java, Exception là
một sự kiện mà phá vỡ luồng chuẩn của chương trình. Nó là một đối tượng mà được ném
tại Runtime. Một exception (ngoại lệ) trong Java là một vấn đề xảy ra trong quá trình
thực hiện của chương trình. Một ngoại lệ có thể xảy ra với nhiều lý do khác nhau, như
dưới đây:
Người dùng nhập dữ liệu không hợp lệ.
Một file cần được mở nhưng không thể tìm thấy.
Kết nối mạng bị ngắt trong quá trình thực hiện giao tiếp hoặc JVM hết bộ nhớ.
Để hiểu sâu hơn các khái niệm được trình bày trong chương này, mời bạn tham khảo loạt
bài: Ví dụ về Exception trong Java.
Một vài những ngoại lệ xảy ra bởi lỗi của người dùng, một số khác bởi lỗi của lập trình
viên và số khác nữa đến từ lỗi của nguồn dữ liệu vật lý.
Để hiểu về cách xử lý ngoại lệ trong Java, bạn cần phải hiểu những loại ngoại lệ như sau:
Checked Exception: Là ngoại lệ thường xảy ra do người dùng mà không thể lường trước
được bởi lập trình viên. Ví dụ, một file được mở, nhưng file đó không thể tìm thấy và
ngoại lệ xảy ra. Những ngoại lệ này không thể được bỏ qua trong quá trình biên dịch.
Checked Exception là các lớp mà kế thừa lớp Throwable ngoại trừ RuntimeException và
Error. Ví dụ như IOException, SQLException, … Checked Exception được kiểm tra tại
thời gian biên dịch compile-time.
Unchecked Exception: Một ngoại lệ xảy ra ở runtime là ngoại lệ có thể tránh được bởi
lập trình viên. Unchecked Exception là các lớp kế thừa RuntimeException, ví dụ
ArithmaticException, NullPointerException, ArrayIndexOutOfBoundsException, …
Unchecked Exception không được kiểm tra tại compile-time, thay vào đó chúng được
kiểm tra tại runtime.
Error: Nó không giống các exception, nhưng vấn đề xảy ra vượt quá tầm kiểm soát của
lập trình viên hay người dùng. Error được bỏ qua trong code của bạn vì bạn hiếm khi có

thể làm gì đó khi chương trình bị error. Ví dụ như OutOfMemoryError,
VirtualMachineError, AssertionError, … Nó được bỏ qua trong quá trình Java biên dịch.


Xử lý ngoại lệ (Exception Handling) là một kỹ thuật để xử lý các Runtime Error như
ClassNotFound, IO, SQL, Remote, … Lợi thế chính của xử lý ngoại lệ là để duy trì luồng
chuẩn của ứng dụng. Exception thường phá vỡ luồng chuẩn của ứng dụng, và đó là tại
sao chúng ta sử dụng Exception Handling. Bạn theo dõi tình huống sau:
statement 1;
statement 2;
statement 3;
statement 4;
statement 5;//exception xuat hien
statement 6;
statement 7;
statement 8;
statement 9;
statement 10;

Giả sử có 10 lệnh trong chương trình của bạn và xuất hiện một Exception tại lệnh 5, phần
còn lại của code sẽ không được thực thi (từ lệnh 6 tới lệnh 10). Nếu chúng ta thực hiện
Exception Handling, phần lệnh còn lại sẽ được thực thi. Đó là ý nghĩa của việc sử dụng
Exception Handling trong Java.
Cấp bậc exception trong Java

Tất cả các lớp exception đều là lớp con của lớp java.lang.Exception . Lớp exception là
lớp con của lớp Throwable. Một loại lớp exception khác là Error cũng là lớp con của lớp
Throwable.
Erros không thường được đặt bẫy bởi các chương trình Java. Error thường được tạo ra để
thể hiện lỗi trong môi trường runtime. Ví dụ: JVM hết bộ nhớ. Thông thường các chương

trình không thể khôi phục từ các lỗi.
Lớp Exception có hai lớp con chính là : IOException và RuntimeException.


Đây là danh sách các checked và unchecked exception phổ biến: Exception
Java.

có sẵn trong

Các phương thức của lớp Exceptions trong Java
Dưới đây là danh sách các phương thức phố biến của lớp Throwable trong Java
STT Phương thức và Miêu tả
1

public String getMessage()
Trả về một message cụ thể về exception đã xảy ra. Message này được
khởi tạo bởi phương thức contructor của Throwable

2

public Throwable getCause()
Trả về nguyên nhân xảy ra exception biểu diễn bởi đối tượng
Throwable

3

public String toString()
Trả về tên của lớp và kết hợp với kết quả từ phương thức
getMessage()


4

public void printStackTrace()


In ra kết quả của phương thức toString cùng với stack trace đến
System.err
5

public StackTraceElement [] getStackTrace()
Trả về một mảng chứa mỗi phần tử trên stack trace. Phần tử tại chỉ
mục 0 biểu diễn phần trên cùng của Call Stack, và phần tử cuối cùng
trong mảng biểu diễn phương thức tại dưới cùng của Call Stack

6

public Throwable fillInStackTrace()
Fills the stack trace of this Throwable object with the current stack
trace, adding to any previous information in the stack trace.

Các tình huống phổ biến mà Exception có thể xảy ra
Dưới đây là một số tình huồng phổ biến mà Unchecked Exception có thể xảy ra:
Với ArithmaticException: xảy ra nếu bạn chia bất cứ số nào cho số 0.
int a=50/0;//ArithmeticException

Với NullPointerException: nếu bạn có giá trị null trong bất cứ biến nào, thì việc thực
hiện bất cứ hoat động nào bởi biến này làm xuất hiện kiểu exception này.
String s=null;
System.out.println(s.length());//NullPointerException


Với NumberFormatException: việc định dạng sai bất cứ giá trị nào, có thể gây ra loại
ngoại lệ này. Giả sử bạn có một biến string mà có các ký tự, thì việc chuyển đổi biến
thành này chữ số sẽ làm xuất hiện NumberFormatException.
String s="abc";
int i=Integer.parseInt(s);//NumberFormatException

Với ArrayIndexOutOfBoundsException: nếu bạn đang chèn bất cứ giá trị nào trong
một chỉ mục sai sẽ làm xuất hiện kiểu exception này.
int a[]=new int[5];


a[10]=50; //ArrayIndexOutOfBoundsException

Các từ khóa để Xử lý ngoại lệ trong Java
Có 5 từ khóa được sử dụng để Xử lý ngoại lệ trong Java, đó là:
try
catch
finally
throw
throws

3.2 Khối try trong Java
Khối try trong Java được sử dụng để bao quanh code mà có thể ném một Exception. Nó
phải được sử dụng bên trong phương thức. Khối try phải được theo sau bởi hoặc khối
catch hoặc khối finally.
Cú pháp của khối try-catch trong Java
try{
//code ma co the nem exception
}catch(Exception_class_Name ref){}


Cú pháp của khối try-finally trong Java
try{
//code ma co the nem exception
}finally{}

Khối catch trong Java
Khối catch trong Java được sử dụng để xử lý các Exception. Nó phải được sử dụng chỉ
sau khối try. Bạn có thể sử dụng nhiều khối catch với một khối try đơn.
Vấn đề khi không có Exception Handling
Chúng ta cùng tìm hiểu vấn đề nếu không sử dụng khối try-catch.
public class Testtrycatch1{
public static void main(String args[]){
int data=50/0;//co the nem exception


System.out.println("Phan code con lai...");
}
}

Chương trình sẽ cho kết quả sau:
Exception in thread "main" java.lang.ArithmeticException: / by zero

Như trong ví dụ trên, phần còn lại của code không được thực thi (trong ví dụ này là lệnh
in Phan code con lai… không được in). Giả sử nếu có khoảng 100 dòng code sau
exception, thì tất cả các dòng code này sẽ không được thực thi.
Xử lý vấn đề trên bởi Exception Handling trong Java
Bây giờ, cùng ví dụ trên, chúng ta sử dụng khối try-catch để xử lý vấn đề trên.
public class Testtrycatch2{
public static void main(String args[]){
try{

int data=50/0;
}catch(ArithmeticException e){System.out.println(e);}
System.out.println("Phan code con lai...");
}
}

Chương trình sẽ cho kết quả sau:
java.lang.ArithmeticException: / by zero
Phan code con lai...

Lúc này, phần còn lại của code đã được thực thi.
Chế độ làm việc nội tại của khối try-catch trong Java
Đầu tiên, JVM kiểm tra xem exception đã được xử lý hay chưa. Nếu exception chưa được
xử lý, JVM cung cấp một Exception Handler mặc định, để thực hiện các tác vụ sau:
In ra miêu tả của exception đó.
In ra stack trace (cấu trúc thứ bậc của phương thức nơi mà exception xuất hiện).
Làm cho chương trình ngừng lại.


Nhưng nếu exception đã được xử lý bởi Lập trình viên, thì luồng chuẩn của ứng dụng
được duy trì (hay là phần còn lại của code được thực thi).
Nhiều khối catch trong Java
Nếu bạn phải thực hiện các tác vụ khác nhau mà có thể xảy ra các exception khác nhau,
bạn sử dụng nhiều khối catch trong Java. Bạn theo dõi ví dụ đơn giản sau:
public class TestMultiCatchBlock{
public static void main(String args[]){
try{
int a[]=new int[5];
a[5]=30/0;
}

catch(ArithmeticException e){System.out.println("Task1 duoc hoan thanh");}
catch(ArrayIndexOutOfBoundsException e){System.out.println("Task2 duoc hoan thanh");}
catch(Exception e){System.out.println("Task chung duoc hoan thanh");}

System.out.println("Phan code con lai...");
}
}

Chương trình sẽ cho kết quả sau:
Task1 duoc hoan thanh
Phan code con lai...

Qui tắc 1: Tại một thời điểm, chỉ một exception được xuất hiện và tại một thời điểm chỉ
có một khối catch được thực thi.
Qui tắc 2: Tất cả khối catch phải được sắp xếp từ cụ thể nhất tới chung nhất, ví dụ: việc
bắt ArithimeticExption phải ở trước việc bắt Exception.
class TestMultipleCatchBlock1{
public static void main(String args[]){
try{
int a[]=new int[5];
a[5]=30/0;
}


×