Sự khác biệt giữa Ngoại lệ đã Kiểm tra và Ngoại lệ Thời gian chạy

Sự khác biệt giữa Ngoại lệ đã Kiểm tra và Ngoại lệ Thời gian chạy
Sự khác biệt giữa Ngoại lệ đã Kiểm tra và Ngoại lệ Thời gian chạy

Video: Sự khác biệt giữa Ngoại lệ đã Kiểm tra và Ngoại lệ Thời gian chạy

Video: Sự khác biệt giữa Ngoại lệ đã Kiểm tra và Ngoại lệ Thời gian chạy
Video: TÍNH TƯƠNG ĐỐI CỦA CHUYỂN ĐỘNG. CÔNG THỨC CỘNG VẬN TỐC - Thầy Phạm Quốc Toản 2024, Tháng mười một
Anonim

Ngoại lệ được Kiểm tra so với Ngoại lệ Thời gian chạy

Ngoại lệ là loại sự kiện đặc biệt, có thể làm xáo trộn luồng chương trình bình thường. Ngoại lệ tên bắt nguồn từ "sự kiện đặc biệt". Ném một ngoại lệ là quá trình tạo một đối tượng ngoại lệ và chuyển giao nó cho hệ thống thời gian chạy. Khi hệ thống thời gian chạy nhận được đối tượng ngoại lệ, nó sẽ cố gắng tìm ai đó để xử lý nó trong ngăn xếp cuộc gọi bằng cách duyệt nó theo thứ tự ngược lại (trong đó các phương thức được gọi). Hệ thống thời gian chạy thành công nếu nó tìm thấy một phương thức có trình xử lý ngoại lệ. Trình xử lý ngoại lệ là một khối mã có thể chính thức xử lý ngoại lệ đã nói. Nếu hệ thống thời gian chạy tìm thấy một trình xử lý thích hợp, nó sẽ chuyển đối tượng ngoại lệ cho trình xử lý. Điều này được gọi là bắt ngoại lệ. Tuy nhiên, nếu không thể xử lý ngoại lệ, chương trình sẽ chấm dứt. Trong Java, các ngoại lệ kế thừa từ lớp Throwable. Các ngoại lệ được kiểm tra là các ngoại lệ mà trình biên dịch thực thi việc xử lý. Các ngoại lệ thời gian chạy là một loại ngoại lệ, không được trình biên dịch kiểm tra.

Ngoại lệ được Kiểm tra là gì?

Checked Exceptions là các đối tượng của lớp java.lang.exception hoặc các lớp con của nó (ngoại trừ java.lang. RuntimeException và các lớp con của nó). Các ngoại lệ đã kiểm tra được “kiểm tra” tại thời điểm biên dịch. Điều đó có nghĩa là lập trình viên phải bắt hoặc ném các ngoại lệ này, nếu không trình biên dịch sẽ khiếu nại (gây ra lỗi trình biên dịch). Bởi vì lý do này, nhiều ngoại lệ được kiểm tra rất nổi tiếng đối với các lập trình viên. Ví dụ: IOException và các lớp con của nó được kiểm tra ngoại lệ và bất cứ khi nào lập trình viên xử lý việc truy cập hoặc sửa đổi tệp, trình biên dịch sẽ kiểm tra để đảm bảo rằng tất cả các IOExceptions có thể được lập trình viên xử lý.

Ngoại lệ Thời gian chạy là gì?

Ngoại lệ thời gian chạy bao gồm java.lang. RuntimeException và tất cả các lớp con của nó. Về mặt lý thuyết, chúng phục vụ cùng một mục đích như các ngoại lệ đã kiểm tra và có thể được ném hoặc xử lý như ngoại lệ đã kiểm tra, nhưng việc xử lý chúng không được trình biên dịch thực thi. Do đó, các ngoại lệ Runtime thuộc về họ các ngoại lệ không được kiểm tra. NullPointerException, NumberFormatEception, ClassCastException và ArrayIndexOutOfBoundsException là những ngoại lệ thời gian chạy phổ biến trong Java.

Sự khác biệt giữa Ngoại lệ được Kiểm tra và Ngoại lệ Thời gian chạy là gì?

Mặc dù, cả ngoại lệ đã kiểm tra và ngoại lệ thời gian chạy đều xảy ra không mong muốn trong quá trình thực thi chương trình, chúng có những điểm khác biệt. Việc xử lý ngoại lệ đã kiểm tra được thực thi bởi trình biên dịch, nhưng các ngoại lệ thời gian chạy thì không. Do đó, các ngoại lệ đã kiểm tra phải được ném hoặc xử lý để mã biên dịch, nhưng không có yêu cầu như vậy về các ngoại lệ thời gian chạy. Do đó, các ngoại lệ thời gian chạy thuộc danh mục ngoại lệ không được kiểm tra cùng với các lỗi.

Bất lợi với các trường hợp ngoại lệ đã chọn là lập trình viên phải xử lý nó ngay cả khi cô ấy không biết làm thế nào. Vì vậy, nếu lập trình viên chỉ ném một ngoại lệ mới mà không bao bọc bản gốc, dấu vết ngăn xếp thuộc ngoại lệ ban đầu sẽ bị mất. Đây là nơi các ngoại lệ thời gian chạy có ích. Bởi vì tất cả các ngoại lệ thời gian chạy có thể được xử lý ở một nơi duy nhất, do đó các lập trình viên có thể viết ít mã hơn. Mặt khác, vì các ngoại lệ đã kiểm tra phải được bắt nên không có gì ngạc nhiên đối với lập trình viên. Cô ấy sẽ luôn biết ngoại lệ đã kiểm tra nào có thể được ném theo một phương pháp nhất định. Trái ngược với điều này, nhiều ngoại lệ thời gian chạy khác nhau có thể được ném ra mà lập trình viên không biết.

Đề xuất: