JavaRush /Blog Java /Random-VI /10 câu hỏi hàng đầu về ngoại lệ trong Java
raynn
Mức độ
Нижний Новгород

10 câu hỏi hàng đầu về ngoại lệ trong Java

Xuất bản trong nhóm
Bài viết mô tả 10 câu hỏi thường gặp nhất về ngoại lệ trong Java. 10 câu hỏi hàng đầu về ngoại lệ trong Java - 1

1. Có thể kiểm chứng và không thể kiểm chứng

Nói tóm lại, các ngoại lệ được kiểm tra phải được bắt rõ ràng trong phần thân phương thức hoặc được khai báo trong phần ném của phương thức. Các trường hợp ngoại lệ không được kiểm tra là do các vấn đề không thể giải quyết được, chẳng hạn như chia cho 0, con trỏ null, v.v. Các trường hợp ngoại lệ được kiểm tra đặc biệt quan trọng vì bạn mong muốn các nhà phát triển khác sử dụng API của bạn biết cách xử lý các trường hợp ngoại lệ. Ví dụ: IOException là ngoại lệ được kiểm tra thường được sử dụng, trong khi RuntimeException là ngoại lệ không được kiểm tra. Trước khi đọc thêm, hãy xem Sơ đồ ngoại lệ phân cấp trong Java .

2. Cách tốt nhất để giải quyết các trường hợp ngoại lệ

Nếu ngoại lệ có thể được xử lý chính xác thì nó phải bị bắt, nếu không thì nó phải được chuyển tiếp.

3. Tại sao các biến được xác định trong try không thể được sử dụng trong Catch hoặc Last?

Trong đoạn mã sau, dòng s được khai báo trong khối thử không thể được sử dụng trong khối bắt. Mã này sẽ không biên dịch.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
Lý do là không biết chính xác vị trí nào trong khối try mà ngoại lệ có thể được ném ra. Có thể ngoại lệ đã được ném ra trước khi đối tượng được khai báo. Và điều này đúng với ví dụ này.

4. Tại sao Double.parseDouble(null) và Integer.parseInt(null) lại đưa ra các ngoại lệ khác nhau?

Đúng vậy, họ đưa ra những ngoại lệ khác nhau. Đây là một vấn đề JDK. Chúng được thiết kế đơn giản bởi những người khác nhau và bạn không nên lo lắng quá nhiều về điều đó.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Các ngoại lệ thời gian chạy cơ bản trong Java

Dưới đây là một vài trong số họ:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Chúng có thể được sử dụng trong câu lệnh if khi điều kiện không được đáp ứng, như ở đây:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. Có thể bắt nhiều ngoại lệ trong một khối bắt không?

Câu trả lời là CÓ. Miễn là các lớp của những ngoại lệ này có thể được truy tìm trong hệ thống phân cấp kế thừa lớp tới cùng một siêu lớp, thì chỉ có thể sử dụng siêu lớp đó.

7. Nhà xây dựng có thể đưa ra ngoại lệ không?

Câu trả lời là CÓ. Hàm tạo chỉ là một loại phương thức đặc biệt. Đây là một ví dụ mã.

8. Ném ngoại lệ vào khối cuối cùng

Về nguyên tắc, bạn hoàn toàn có thể làm điều này một cách hợp pháp:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
Nhưng để duy trì khả năng đọc mã, bạn cần khai báo khối lồng nhau try-catchlà một phương thức mới và chèn lệnh gọi phương thức này vào khối finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. Có thể sử dụng return trong khối cuối cùng không?

Vâng, bạn có thể.

10. Tại sao các nhà phát triển lại xử lý các trường hợp ngoại lệ một cách lặng lẽ?

Ví dụ, những đoạn mã như vậy thường xuất hiện. Nếu việc xử lý ngoại lệ thích hợp là rất quan trọng thì tại sao các nhà phát triển vẫn tiếp tục viết nó theo cách này?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
Dễ dàng nhất để bỏ qua. Nhưng ngay cả khi điều này thường được thực hiện, điều đó không có nghĩa là nó đúng. Liên kết:
  1. Các ngoại lệ không được kiểm tra trong Java
  2. Gốc của cây ngoại lệ phân cấp trong Java
  3. Câu hỏi về ngoại lệ trên stackoverflow
Bài báo gốc
Còn gì để đọc:

Các ngoại lệ trong Java

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION