chapter 3 exception lập trình java

89 0 0
chapter 3 exception lập trình java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Xử lý ngoại lệ● Ngoại lệ unchecked không cần kiểm tra■ Là các ngoại lệ không bắt buộc phải được kiểm tra.■ Gồm RuntimeException, Error và các lớp con của chúng.● Ngoại lệ checked phải ki

Trang 1

Chương 3

NGOẠI LỆ

IS216 - LẬP TRÌNH JAVA

Trang 3

LAMBDA EXPRESSIONS VÀ INNERCLASS

Trang 5

Lambda Expressions

● Ứng dụng:

● Sử dụng với các API Stream:

● filter(), map(), forEach()

● Viết code ngắn gọn hơn:

● Thay thế cho các anonymous inner class

● Tăng khả năng đọc code:

● Code dễ hiểu và dễ bảo trì hơn

Trang 6

List<String> languages = Arrays.asList("Java", "C#", "C++", "PHP", "Javascript");Collections.sort(languages, (String o1, String o2) -> {

Trang 7

Lambda Expressions

● Một biểu thức Lambda (Lambda expression) trong Java gồm các phần chính sau:

● No name: không có tên phương thức, nó là một phương thức ẩn danh (anonymous method).

● Parameter list: danh sách các tham số.

● Body: biểu thức, câu lệnh xử lý.

● No return type: không có kiểu trả về tường minh, trình biên dịch có thể tự suy luận ra kiểu dữ liệu trả về dựa vào code thực thi.

Trang 8

● Là class được định nghĩa bên trong một class khác (hoặc 1 interface khác).

● Có hai loại:

● Static inner class:

○ Được định nghĩa bằng static keyword

○ Có thể truy cập các biến static của outer class

● Non-static inner class:

○ Không được định nghĩa bằng static keyword

○ Có thể truy cập tất cả các biến của outer class

Trang 9

● Ứng dụng:

● Tạo các class nhỏ gọn để sử dụng trong một class khác

● Tạo các class ẩn danh để sử dụng với các API như

Trang 10

public static void main(String[] args) {

OuterClass outerClass = new OuterClass();

OuterClass.InnerClass innerClass = outerClass.new InnerClass();innerClass.print();

}}

Trang 11

NGOẠI LỆ

Trang 12

Ngoại lệ

Ngoại lệ (Exception): là một sự kiện xảy ra trong tiến trình thực thi của một chương trình, nó làm ngưng tiến trình bình thường của chương trình.

Trang 13

Ngoại lệ

● Khi xảy ngoại lệ, nếu không xử lý chương trình sẽ kết thúc ngay.

mạng bị ngắt trong quá trình thực hiện giao tác, JVM hết bộ nhớ, Truy cập vượt ngoài chỉ số của mảng …

Trang 14

Ngoại lệ

● Dựa vào tính chất các vấn đề, người ta chia ngoại lệ thành ba loại:

○ Ngoại lệ được kiểm tra (Checked Exceptions).

○ Ngoại lệ không được kiểm tra (Unchecked Exceptions).

○ Lỗi (Error).

Trang 15

Ngoại lệ

Trang 16

Ngoại lệ

Error: là những lỗi nghiêm trọng xảy ra đối khi chương trình hoạt

động mà lập trình viên không thể kiểm soát Ví dụ như lỗi phần cứng, tràn bộ nhớ, hay lỗi của JVM.

viết code, vì nó được kiểm tra bởi trình biên dịch Javac Ví dụ: ClassNotFoundException, NoSuchFieldException

trình chạy, nghĩa là trình biên dịch Javac không "phát hiện" ra khi biên dịch, do vậy programmer không thể xử lý khi viết code Ví dụ: NullPointerException, ArrayIndexOutOfBoundsException,

DivideByZeroException

Trang 17

XỬ LÝ NGOẠI LỆ

Trang 19

Xử lý ngoại lệ

Sử dụng các mệnh đề điều kiện kết hợp với các giá trị cờ.

Mục đích: thông qua tham số, giá trị trả lại hoặc giá trị cờ để

viết mã xử lý tại nơi phát sinh lỗi.

■ Làm chương trình thêm rối, gây khó hiểu.

■ Dễ nhầm lẫn

Trang 20

Xử lý ngoại lệ

public class Inventory{

public final int MIN = 0; publicfinal int MAX = 100;publicfinal int CRITICAL = 10;

publicboolean addToInventory (int amount)

int temp;

temp = stockLevel + amount; if (temp > MAX){

System.out.print("Adding " + amount + " item will cause stock ");

System.out.println("to become greater than " + MAX + " units (overstock)");

Trang 22

store.addToInventory (int amt){if (temp > MAX) return

false;}

Trang 24

chủ có thể không biết cách xử lý khi lỗi xảy ra

Trang 26

■ Ngoại lệ không cần kiểm tra (unchecked)

■ Ngoại lệ phải kiểm tra (checked)

Trang 27

Xử lý ngoại lệ

● Checked vs Unchecked

Trang 28

Xử lý ngoại lệ

● Ngoại lệ unchecked (không cần kiểm tra)

■ Là các ngoại lệ không bắt buộc phải được kiểm tra.

■ Gồm RuntimeException, Error và các lớp con của chúng.

● Ngoại lệ checked (phải kiểm tra)

■ Là các ngoại lệ bắt buộc phải được kiểm tra.

■ Gồm các ngoại lệ còn lại.

Trang 29

Xử lý ngoại lệ

● Trình biên dịch không yêu cầu phải bắt các ngoại lệ khi nó xảy ra.

● Các ngoại lệ này có thể xảy ra bất cứ thời điểm nào khi thi hành chương trình.

● Thông thường là những lỗi nghiêm trọng mà chương trình không thể kiểm soát

● Sử dụng các mệnh đề điều kiện để xử lý sẽ tốt hơn.

Gồm các lớp RuntimeException, Error và các lớp con của

chúng

Trang 30

Xử lý ngoại lệ

RuntimeException: chỉ các ngoại lệ xảy ra khi JVM thực thi

chương trình

oNullPointerException: con trỏ null

oOutOfMemoryException: hết bộ nhớ

oArrayIndexOutOfBoundsException: vượt quá chỉ số mảng

oArithmeticException: lỗi toán học

oClassCastException: lỗi ép kiểu

oChỉ những lỗi nghiêm trọng và không dự đoán trước được: ThreadDead, LinkageError, VirtualMachineError…

Trang 31

Xử lý ngoại lệ

int [] arr = null;

Trang 32

Xử lý ngoại lệ

int [] arr = null;

Trang 33

Xử lý ngoại lệ

int [] arr = null;

Trang 34

Xử lý ngoại lệ

● Là ngoại lệ bắt buộc kiểm tra.

● Phải xử lý khi ngoại lệ có khả năng xảy ra:

● Ví dụ: IOException, NumberFormatException

Trang 35

Xử lý ngoại lệ

● try{…}: khối lệnh có khả năng gây ra ngoại lệ.

● catch{…}: nơi bắt và xử lý ngoại lệ.

Trang 37

typed in " + s); num = Integer.parseInt (s);

System.out.println("Converted to an integer " + num);

Trang 38

Xử lý ngoại lệ

System.out.print("Type an integer: "); s = stringInput.readLine();

System.out.println("You typed in " + s); num = Integer.parseInt (s);System.out.println("Converted to an integer " + num);

}

Trang 39

Xử lý ngoại lệ

● Kết quả của phương thức readLine()try

Trang 40

public BufferedReader (Reader in);

public BufferedReader (Reader in, int sz);

public String readLine () throws IOException;

}

Trang 41

Xử lý ngoại lệ

● Kết quả của phương thức parseInt ()

Trang 42

public Integer (int value);

public Integer (String s) throws NumberFormatException;

public static int parseInt (String s) throws NumberFormatException;

}

Trang 53

// Do nothing here but set up the try-catch block to bypass the// annoying compiler error

NO!

Trang 54

Xử lý ngoại lệ

Khối finally: Là 1 khối không bắt buộc trong khối try-catch-finally.

hay không VD:

oĐóng file, đóng socket, connection

oGiải phóng tài nguyên (nếu cần)

catch block

No exception

exception

Trang 61

Xử lý ngoại lệ

● Từ khóa throws được sử dụng để khai báo một ngoại lệ Nó thể hiện thông tin cho lập trình viên rằng có thể xảy ra một ngoại lệ

● Giả sử có method1 và method2 Method1 gọi method2 và method2 làphương thức có khả năng xảy ra ngoại lệ:

Trang 62

● Cách 2: Khai báo throws

public static voidmain(String[ ] args) throws IOException

Strings = buff.readLine();

62

Trang 65

Xử lý ngoại lệ

class Driver{

public static void main (String [] args) { TCExample eg = new TCExample (); boolean inputOkay = true;

Trang 67

Xử lý ngoại lệ

● Từ khoá throw được sử dụng để ném ra một ngoại lệ cụ thể, chủ yếu được sử dụng để ném ngoại lệ tùy chỉnh (ngoại lệ do người dùng tự định nghĩa).

Trang 68

Xử lý ngoại lệ

Sử dụng throw anExceptionObject trong thân

phương thức để tung ra ngoại lệ khi cần

Nếu phương thức có chứa câu lệnh throw ngoại lệ thì phần khai báo phương thức phải khai báo throws

ngoại lệ đó hoặc lớp cha của ngoại lệ đó.

Trang 69

Xử lý ngoại lệ

Đối với RuntimeException phương thức không cần

phải khai báo throws RuntimeException vì ngoại lệ này mặc định được ủy nhiệm cho JVM

Trang 70

public static void main(String[] args) {int num = cal(6,0);

} Lỗi ngoại lệ:

Exception in thread "main" java.lang.ArithmeticException: Khong the chia cho 0

Trang 71

Exception in thread "main" java.lang.RuntimeException:

Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown

at exceptionex.ExceptionEx.main(ExceptionEx.java:58)

Trang 72

public static void main(String[] args) throws Exception{ int num = cal(6,0);

Thêm: throws Exception

Trang 73

Sau throw là một instance.Sau throws là một hoặc nhiều class.

Throwđược sử dụng trong phương thức có thể quăng ra Exception ở bất kỳ dòng nào trong phương thức (sau đó dùng try-catch để bắt hoặc throws cho phương thức khác xử lý)

Throwsđược khai báo ngay sau dấu đóng ngoặc đơn của phương thức Khi một phương thức có throwbên trong mà không bắt lại (try – catch) thì phải ném đi (throws) cho phương thức khác xử lý.Không thể throw nhiều exceptions.

Cóthể khai báo nhiều exceptions, Ví dụ:public void method() throws IOException, SQLException { }

Trang 74

Xử lý ngoại lệ

➢Một phương thức có thể throw nhiều hơn 1 ngoại lệ:

public voidmethod(int tuoi, String ten)throwsArithmeticException,

➢Lan truyền ngoại lệ:

Trang 75

Xử lý ngoại lệ

oNếu C() gặp lỗi và throw ra ngoại lệ nhưng trong C() lại không xử lý ngoạilệ này, thì nơi gọi C() là phương thức B() là nơi có thể xử lý ngoại lệ.

oNếu trong B() cũng không xử lý thì phải xử lý ngoại lệ này trong A()… Quátrình này gọi là lan truyền ngoại lệ.

oNếu đến main() cũng không xử lý ngoại lệ được throw từ C() thì chương

Trang 76

Xử lý ngoại lệ

● Trong khối catch, ta có thể không xử lý trực tiếp ngoại lệ mà lại ném lạingoại lệ đó cho nơi khác xử lý.

● Chú ý: Trong trường hợp trên, phương thức chứa catch phải bắt ngoại lệhoặc khai báo throws cho ngoại lệ

catch (IOExceptione) {

throwe;}

Trang 77

Xử lý ngoại lệ

Kế thừa ngoại lệ:

oKhi override một phương thức của lớp cha, phương thức ở lớp con khôngđược phép tung ra các ngoại lệ mới.

oPhương thức ghi đè trong lớp con chỉ được phép tung ra các ngoại lệ giốnghoặc là lớp con hoặc là tập con của các ngoại lệ được tung ra ở lớp cha.

Trang 78

Xử lý ngoại lệ

classDisk {

public voidreadFile()throwsEOFException {}}

classFloppyDiskextendsDisk {

public voidreadFile()throwsIOException {}// ERROR!

class FloppyDisk extends Disk {

public void readFile() throws EOFException {}}

Trang 79

Xử lý ngoại lệ

➢ Ưu điểm của throws/throw ➢ Dễ sử dụng

oDễ dàng chuyển điều khiển đến nơi có khả năng xử lý ngoại lệ

oCó thể throw nhiều loại ngoại lệ

➢ Tách xử lý ngoại lệ khỏi đoạn mã thông thường

➢ Không bỏ sót ngoại lệ (throws)

➢ Gom nhóm và phân loại các ngoại lệ

Trang 80

Tạo ra kiểu ngoại lệ mới

Trang 82

Tạo ngoại lệ mới

➢Mục đích: tạo ra ngoại lệ do người dùng định nghĩa để kiểm soát các lỗi

oKế thừa lớp Exception hoặc lớp con của nó

oCó tất cả phương thức của lớp Throwable

Trang 83

Tạo ngoại lệ tự định nghĩa

Trang 84

Sử dụng ngoại lệ tự định nghĩa

● Sử dụng ngoại lệ

public class Example {

public void kiemTra(String fName1,String fName2) throws

Trang 85

Sử dụng ngoại lệ tự định nghĩa

public class Test {

public static void main(String[] args) {Example ex= new Example();

Trang 86

Cây thừa kế của lớp IOExceptions

Trang 87

Vấn đề bắt ngoại lệ

➢Khi xử lý một chuỗi các ngoại lệ cần phải đảm bảo rằng các ngoại lệ lớp conđược xử lý trước các ngoại lệ của lớp cha.

➢Xử lý các trường hợp cụ thể trước khi xử lý các trường hợp tổng quát

Trang 89

Q & A

Giảng viên: Tạ Việt PhươngE-mail: phuongtv@uit.edu.vn

Ngày đăng: 27/04/2024, 10:57

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan