Java - Throws và Throw: Hiểu Rõ Về Xử Lý Ngoại Lệ

Xin chào các bạn, những nhà lập trình Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới xử lý ngoại lệ trong Java. Cụ thể, chúng ta sẽ tập trung vào các từ khóa throwsthrow. Đừng lo nếu bạn mới bắt đầu học lập trình; tôi sẽ hướng dẫn bạn từng bước, như những năm qua tôi đã làm cho nhiều học viên khác. Hãy bắt đầu nào!

Java - throw Exception

Ngoại lệ Là Gì?

Trước khi nhảy vào throwsthrow, hãy nhanh chóng nhớ lại ngoại lệ là gì. Hãy tưởng tượng bạn đang nấu ăn theo công thức. Mọi thứ đều diễn ra suôn sẻ cho đến khi - oops! - bạn nhận ra mình hết nguyên liệu quan trọng. Đó tương tự như ngoại lệ trong lập trình: một sự kiện bất ngờ phá hủy luồng chạy bình thường của chương trình của bạn.

Hiểu Rõ throwsthrow

Từ Khóa throws

Từ khóa throws được sử dụng trong phát định phương thức để chỉ ra rằng phương thức này có thể ném ra một hoặc nhiều loại ngoại lệ. Đó như đặt biển cảnh báo "Cẩn thận: Sàn mок" - bạn đang cảnh báo bất kỳ ai sử dụng phương thức này cần phải chuẩn bị cho các ngoại lệ tiềm ẩn.

Từ Khóa throw

Mặt khác, throw được sử dụng để thực sự tạo ra và ném ra một ngoại lệ. Đó như thực sự để lọt nước lên sàn - bạn đang tạo ra tình huống ngoại lệ.

Cú Pháp

Hãy xem cú pháp cho cả hai:

// Sử dụng throws trong phát định phương thức
public void myMethod() throws ExceptionType {
// Thân phương thức
}

// Sử dụng throw để tạo một ngoại lệ
throw new ExceptionType("Thông báo lỗi");

Ví Dụ Java Throws và Throw

Hãy bắt đầu với một ví dụ đơn giản để minh họa cả throwsthrow:

public class DivisionExample {
public static double divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("Không thể chia cho không!");
}
return (double) a / b;
}

public static void main(String[] args) {
try {
System.out.println(divide(10, 2));  // Điều này hoạt động tốt
System.out.println(divide(10, 0));  // Điều này sẽ ném ra ngoại lệ
} catch (ArithmeticException e) {
System.out.println("Xảy ra lỗi: " + e.getMessage());
}
}
}

Hãy phân tích điều này:

  1. Chúng ta khai báo phương thức dividethrows ArithmeticException.
  2. Trong phương thức, chúng ta throw một ArithmeticException mới nếu b là không.
  3. Trong phương thức main, chúng ta sử dụng khối try-catch để xử lý các ngoại lệ tiềm ẩn.

Khi bạn chạy điều này, bạn sẽ thấy:

5.0
Xảy ra lỗi: Không thể chia cho không!

Thêm Ví Dụ

Ví Dụ 1: Ngoại Lệ Tùy Chỉnh

Hãy tạo một ngoại lệ tùy chỉnh và sử dụng nó:

class AgeException extends Exception {
public AgeException(String message) {
super(message);
}
}

public class VotingSystem {
public static void checkEligibility(int age) throws AgeException {
if (age < 18) {
throw new AgeException("Bạn phải có 18 tuổi hoặc clder để bầu cử.");
} else {
System.out.println("Bạn có quyền bầu cử!");
}
}

public static void main(String[] args) {
try {
checkEligibility(20);  // Điều này tốt
checkEligibility(15);  // Điều này sẽ ném ra ngoại lệ
} catch (AgeException e) {
System.out.println("Lỗi: " + e.getMessage());
}
}
}

Ví dụ này minh họa cách tạo và sử dụng ngoại lệ tùy chỉnh của bạn.

Ví Dụ 2: Nhiều Ngoại Lệ

Hãy xem cách xử lý nhiều ngoại lệ:

import java.io.*;

public class FileReadExample {
public static void readFile(String filename) throws FileNotFoundException, IOException {
FileReader file = new FileReader(filename);
BufferedReader reader = new BufferedReader(file);

String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}

reader.close();
}

public static void main(String[] args) {
try {
readFile("example.txt");
} catch (FileNotFoundException e) {
System.out.println("Lỗi: Tệp không tìm thấy.");
} catch (IOException e) {
System.out.println("Lỗi: Gặp vấn đề khi đọc tệp.");
}
}
}

Ví dụ này minh họa cách xử lý nhiều loại ngoại lệ mà phương thức có thể ném ra.

Các Quy Tắc Tốt Nhất

  1. Chính Xác: Chỉ ném ra các ngoại lệ phù hợp với tình huống lỗi.
  2. Tài Liệu Hóa Tốt: Luôn tài liệu các ngoại lệ mà phương thức của bạn có thể ném ra trong Javadoc của phương thức.
  3. Xử Lý Hoặc Đề Xuất: Hoặc xử lý ngoại lệ với khối try-catch hoặc đề xuất nó với throws.
  4. Không Sử Dụng Thừa: Đừng sử dụng ngoại lệ cho luồng điều khiển bình thường. Chúng chỉ cho các tình huống bất ngờ.

Kết Luận

Hiểu rõ throwsthrow là rất quan trọng cho việc xử lý ngoại lệ đúng cách trong Java. Nó cho phép bạn viết mã có khả năng chống lỗi và chống ngoại lệ cao hơn. Nhớ rằng, ngoại lệ là bạn bè của bạn - chúng giúp bạn suy nghĩ và xử lý các vấn đề một cách thanh thản.

Khi bạn tiếp tục hành trình của mình với Java, bạn sẽ gặp nhiều tình huống nơi việc xử lý ngoại lệ trở thành rất quý giá. Hãy tiếp tục tập luyện, và sớm nữa nó sẽ trở thành thói quen tự nhiên!

Chúc các bạn lập trình vui vẻ, những nhà lập trình Java tương lai!

Credits: Image by storyset