1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn học phần công nghệ java xử lý ngoại lệ

12 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Công Nghệ Java Xử Lý Ngoại Lệ
Tác giả Vũ Hoài Nam, Đinh Việt Tài, Nguyễn Văn Tâm, Nguyễn Minh Đức, Nguyễn Minh Đạt, Lê Văn An
Người hướng dẫn Vũ Văn Đốc
Trường học Trường Đại Học Kinh Tế - Kỹ Thuật Công Nghiệp
Chuyên ngành Công Nghệ Thông Tin
Thể loại bài tập lớn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 12
Dung lượng 637,13 KB

Nội dung

1.Mở đầuXử lý ngoại lệ Exception Handling trong Java là một cơ chế mạnh mẽ, được thiết kế để giúp lập trình viên phát hiện, xử lý và khôi phục từ các tình huống lỗi một cách an toàn và h

Trang 1

TRƯỜNG ĐẠI HỌC KINH TẾ - KỸ THUẬT CÔNG NGHIỆP

KHOA CÔNG NGHỆ THÔNG TIN

-o0o -BÀI TẬP LỚN

HỌC PHẦN: CÔNG NGHỆ JAVA

XỬ LÝ NGOẠI LỆ

Giảng viên hướng dẫn: Vũ Văn Đốc Nhóm thực hiện: Nhóm 8

Thành viên nhóm: Vũ Hoài Nam -22103100

Đinh Việt Tài - 22103100315 Nguyễn Văn Tâm - 22103100 Nguyễn Minh Đức - 22103100 Nguyễn Minh Đạt - 22103100

Lê Văn An - 22103100

Hà Nội,ngày 5 tháng 12 năm 2024

Trang 2

Mục Lục

1.Mở đầu 3

2.Xử lí ngoại lệ 3

2.1 Ngoại lệ là gì? 3

2.2 Mô hình phân cấp 4

2.3 Checked và Unchecked Exception 5

2.4 Mô hình xử lí ngoại lệ 6

2.4.1 Khối try/catch 6

2.4.2 Bắt nhiều ngoại lệ(Khối có nhiều catch) 7

2.4.3 Khối Finally 8

2.5 Ném ngoại lệ 9

2.5.1 throw 9

2.5.2 sử dụng throws 10

3 Ngoại lệ do người dùng tự tạo 11

Trang 3

1.Mở đầu

Xử lý ngoại lệ (Exception Handling) trong Java là một cơ chế mạnh mẽ, được thiết kế để giúp lập trình viên phát hiện, xử lý và khôi phục từ các tình huống lỗi một cách an toàn và hiệu quả Thay vì để chương trình dừng đột ngột khi gặp lỗi, Java cung cấp các công cụ và cấu trúc giúp kiểm soát luồng thực thi, đảm bảo chương trình hoạt động ổn định ngay cả khi xảy ra ngoại lệ

Trong quá trình phát triển phần mềm, các lập trình viên thường phải đối mặt với những tình huống bất thường hoặc lỗi xảy ra khi chương trình đang chạy Những lỗi này, nếu không được xử lý đúng cách, có thể dẫn đến sự cố nghiêm trọng, làm gián đoạn hoạt động của phần mềm và gây mất dữ liệu hoặc trải nghiệm không tốt cho người dùng

Báo cáo này sẽ giới thiệu các khái niệm cơ bản, phân loại ngoại lệ, các từ khóa quan trọng như try, catch, finally, và cách áp dụng chúng vào thực tế thông qua các ví dụ cụ thể Hy vọng rằng tài liệu sẽ giúp bạn hiểu rõ hơn về cách xử lý ngoại lệ và áp dụng một cách hiệu quả trong các dự án phần mềm

Trang 4

2.Xử lí ngoại lệ

2.1 Ngoại lệ là gì?

Định nghĩa ngoại lệ: Ngoại lệ là các sự kiện không mong muốn hoặc lỗi

xảy ra trong quá trình thực thi chương trình Những lỗi này có thể bao gồm lỗi cú pháp, lỗi logic, hoặc các vấn đề ngoài ý muốn như chia cho số 0, truy cập vào mảng vượt quá giới hạn, hay thiếu tài nguyên hệ thống

VD: Ví dụ chương trình chia 2 số Nếu ta cho mẫu số = 0 thì phát sinh lỗi và đó được coi là 1 ngoại lệ

public static void main(String[] args) {

int a = 10;

int b = 0;

int result;

result = a/b;

System.out.println("a/b = " + result);

}

Sau khi chạy chương trình trên ta được kết quả:

2.2 Mô hình phân cấp

Trang 5

 Object là lớp lớn nhất và cơ bản nhất, tất cả các lớp con trong java đều

kế thừa từ lớp cơ bản nhất là Object

 Throwable là lớp cơ sở (superclass) cho tất cả các lỗi (errors) và ngoại

lệ (exceptions)

- 1 số phương thức cơ bản:

 Throwable(String s) : Constructor này tạo 1 ngoại lệ với thông báo là s

 getMessage() : Trả về thông báo chi tiết được cung cấp khi tạo đối tượng ngoại lệ

 Lớp Exception

- Có nhiều ngoại lệ thuộc lớp con của Exception

- Có thể tạo ra các ngoại lệ kế thừa từ Exception

- Các lớp con:

 IOException: Các lỗi liên quan đến nhập xuất, ví dụ đọc

hoặc ghi file

 ClassNotFoundException:Xảy ra khi không tìm thấy lớp

cần thiết

 RuntimeException là 1 nhánh con của Exception chứa

các UncheckException

-ArithmeticException: Lỗi toán học , ví dụ chia cho 0 NullPointerException: Lỗi truy cập đối tượng khi tham

-chiếu là Null

-IndexOutOfBoundsException:Lỗi truy cập phần tử vượt

ngoài giới hạn mảng

- IllegalArgumentException:Lỗi khi một phương thức

nhận tham số không hợp lệ

 Lớp Error

- Chỉ những vấn đề nghiêm trọng và không dự đoán trước được như: LinkageError,VirtualMachineError…

- Các ngoại lệ kiểu Error ít được xử lí

Trang 6

2.3 Checked và Unchecked Exception

 Checked Exception

- Là những ngoại lệ được kiểm tra tại thời điểm biên dịch và cần được xử lí ngay()

- Nếu không được xử lí hay khai báo bằng từ khóa throw sẽ không biên dịch được

VD: Cố gắng đọc 1 tệp tin không tồn tại

public static void main(String[] args) {

File file = new File("nonexistentfile.txt");

//tệp tin không tồn tại

FileReader fr = new FileReader(file);

}

Ta sẽ nhận được thông báo lỗi :

Unchecked Exception

- Là những ngoại lệ không được kiểm tra tại thời điểm biên dịch mà xảy ra tại thời điểm chạy

- Gồm RuntimeException và các lớp con của nó

VD: Truy cập phương thức trên đối tượng null

public static void main(String[] args) { String str = null;

System.out.println("do dai chuoi = " + str.length()); }

Kết quả nhận được kết quả sau khi chạy chương trình:

2.4 Mô hình xử lí ngoại lệ

Trang 7

2.4.1 Khối try/catch

- Khi xảy ra lỗi trong chương trình, hệ thống Java Runtime mặc định sẽ

xử lý ngoại lệ bằng cách dừng chương trình và in ra một "stack trace" (danh sách các lời gọi hàm dẫn đến lỗi)

- Chương trình sẽ bị dừng đột ngột và đây là điều mà cả user và developer đều không muốn

- Để xử lý ta có thể dùng try…catch để bắt và xử lí lỗi

Cấu trúc:

Try{

//Khối lệnh phát sinh ngoại lệ }catch(Exception e){

//Xử lí khi chương trình gặp ngoại lệ }

Ví dụ: Chương trình thực hiện phép chia

public static void main(String[] args) {

int tuso, mauso;

int result;

Scanner sc = new Scanner(System.in);

try{

System.out.print("tu so = "); tuso = sc.nextInt();

System.out.print("mau so = "); mauso = sc.nextInt();

result = tuso/mauso;

System.out.println("ket qua = " + result);

}catch(Exception e){

System.out.println("Mau so phai != 0");

}

}

Kết quả ta thu được sau khi thử với tuso = 10 và mauso = 0;

Trang 8

Ở ví dụ trên Exception mà ta catch được là ArithmeticException Trong trường hợp đã đoán được Exception có thể xảy ra ta có thể viết:

catch(“tên Exception” e) // ở vd này là catch(ArithmeticException e).

2.4.2 Bắt nhiều ngoại lệ(Khối có nhiều catch)

- Thực tế có thể xảy nhiều Exception khác nhau và để xử lí ta có thể dùng nhiều khối catch, mỗi khối để xử lí 1 ngoại lệ

try {

// Mã có thể ném ra ngoại lệ

} catch (ExceptionType1 e1) {

// Xử lý ngoại lệ loại ExceptionType1

} catch (ExceptionType2 e2) {

// Xử lý ngoại lệ loại ExceptionType2

} catch (Exception e) {

// Xử lý ngoại lệ chung (nếu không thuộc các loại trên)

}

Lưu ý: khối catch dành cho lớp ngoại lệ tổng quát hơn bao giờ cũng phải đặt sau khối catch dành cho lớp ngoại lệ chuyên biệt hơn Trình biên dịch

sẽ báo lỗi nếu ta không tuân theo quy tắc này

- VD:Chương trình thực hiện phép chia

public static void main(String[] args) {

int tuso, mauso, result;

Scanner sc = new Scanner(System.in);

Trang 9

try{

System.out.print("tu so = ");tuso = sc.nextInt();

System.out.print("mau so = "); mauso = sc.nextInt();

result = tuso/mauso;

System.out.println("ket qua = " + result);

}catch(ArithmeticException e){

System.out.println("Mau so phai != 0");

}catch(InputMismatchException e){

System.out.println("Khong nhap ki tu hoac mot chuoi cho tu so va mau so");

}

}

Ở đây ta thấy có 2 Exception có thể xảy ra đó là ArithmeticException và InputMismatchException và cách xử lí ở đây là ta sử dụng nhiều khối catch cho từng Exception riêng biệt

2.4.3 Khối Finally

- Khối mã luôn được thực thi bất kể ngoại lệ có xảy ra hay không

- Finally thường được sử dụng để dọn dẹp tài nguyên:

 Đóng file

 Giải phóng bộ nhớ

 Ngắt kết nối cơ sở dữ liệu

 Hoặc bất kỳ tài nguyên nào khác cần được giải phóng

VD:

public static void main(String[] args) {

try {

System.out.println("running try ");

System.out.println("10/0 = " + 10/0); // Lỗi chia cho 0

Trang 10

} catch (ArithmeticException e) {

System.out.println("run error ");

} finally {

System.out.println("running finally");

}

Ta có thể thấy khối finally sẽ luôn chạy kể cả khi có ngoại lệ hay không có ngoại lệ

2.5 Ném ngoại lệ

2.5.1 Throw

- Sử dụng khi muốn ném lỗi trực tiếp(không dùng try/catch)

- Ví dụ:

public static void truyCapPtuMang(int a[],int index){

if(index >= a.length){

throw new ArrayIndexOutOfBoundsException("Ptu nam ngoai pvi mang!");

}

else{

System.out.println("ptu tai vi tri "+index+" = "+a[index]); }

}

public static void main(String[] args) {

int arr[] = {1,2,3};

truyCapPtuMang(arr,arr.length);

}

Kết quả sau khi chạy chương trình:

Trang 11

2.5.2 Sử dụng throws

- Ngoài việc xử lí ngoại lệ trực tiếp try/catch, chúng ta có thể dùng Throws để ném ra ngoại lệ

=> Có tác dụng rất nhiều khi viết function/class tổng quát(để re-use) vì chúng

ta không biết nên làm gì với try/catch

VD:

public static void docFile (String tenFile) throws FileNotFoundException{ FileReader reader = new FileReader(tenFile);

}

Ở VD trên ta có thể thấy từ khóa throws đã được sử dụng Và khi đã sử dụng throws để khai báo phương thức docFile sẽ gây ra FileNotFoundException thì trình biên dịch sẽ không bắt ta phải xử lí checked Exception này ngay tại thời điểm đó nữa, việc xử lí sẽ bắt buộc khi ta sử dụng phương thức này

3 Ngoại lệ do người dùng tự tạo

- Ngoại lệ do người dùng tự tạo (custom exceptions) là các ngoại lệ được định nghĩa bởi lập trình viên để xử lý các tình huống cụ thể trong ứng dụng mà các ngoại lệ chuẩn không thể bao quát hết Việc tạo ra các ngoại lệ tùy chỉnh giúp mã nguồn trở nên rõ ràng và dễ bảo trì hơn

- Để tự tạo 1 ngoại lệ bạn cần:

// Tạo lớp ngoại lệ tùy chỉnh bằng cách kế thừa từ Exception

public class MyCustomException extends Exception {

// Constructor để truyền thông báo ngoại lệ

public MyCustomException(String message) {

super(message); // Gọi constructor của lớp cha (Exception) }

}

- VD:

class InvalidAgeException extends Exception{

public InvalidAgeException(String message){

Trang 12

super(message);

}

}

public class EnterAge {

public static void checkAge(int age) throws InvalidAgeException{ if(age <= 0){

throw new InvalidAgeException("Tuoi phai > 0");

}

else{

System.out.println("age = " + age);

}

}

public static void main(String[] args) {

int age;

Scanner sc = new Scanner(System.in);

try{

age = sc.nextInt();

checkAge(age);

}catch(InvalidAgeException e){

System.out.println(e.getMessage());

}

}

}

- Ở VD trên ta có 1 Exception tự tạo đó là InvalidAgeException

Ngày đăng: 09/01/2025, 16:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN