Sự khác biệt giữa ngoại lệ được kiểm tra và ngoại lệ thời gian chạy

Đã kiểm tra Ngoại lệ và 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 đến từ sự kiện đặc biệt của hồi giáo. Ném một ngoại lệ là quá trình tạo một đối tượng ngoại lệ và chuyển 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 qua 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 với một 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 trên. 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 ngoại lệ không thể được xử 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 trường hợp ngoại lệ được kiểm tra là các ngoại lệ về việc xử lý được thực thi bởi trình biên dịch. 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ì?

Các ngoại lệ được kiểm tra 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.R nbException và các lớp con của nó). Các trường hợp ngoại lệ được kiểm tra là những người đượ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 thì trình biên dịch sẽ phàn nàn (gây ra lỗi trình biên dịch). Vì lý do này, nhiều trường hợp 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 chăm sóc.

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

Thời gian chạy ngoại lệ bao gồm java.lang.R.78Exception 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ệ được kiểm tra và có thể được ném hoặc xử lý như ngoại lệ được kiểm tra, nhưng việc xử lý chúng không được thực thi bởi trình biên dịch. Do đó, ngoại lệ Runtime thuộc về gia đình của các ngoại lệ không được kiểm soát. NullPulumException, NumberFormatEception, ClassCastException và ArrayIndexOutOfBoundException là các 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ệ được 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 khác biệt. Xử lý ngoại lệ được kiểm tra được thực thi bởi trình biên dịch, nhưng ngoại lệ thời gian chạy thì không. Do đó, các ngoại lệ được kiểm tra phải được ném hoặc xử lý để mã được biên dịch, nhưng không có yêu cầu nào liên quan đến ngoại lệ thời gian chạy. Do đó, các ngoại lệ thời gian chạy thuộc về loại 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 ngoại lệ được kiểm tra 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 gói bản gốc, dấu vết ngăn xếp thuộc về ngoại lệ ban đầu sẽ bị mất. Đây là nơi 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 số lượng mã ít hơn. Mặt khác, vì các ngoại lệ được kiểm tra phải được bắt, không có bất ngờ cho lập trình viên. Cô ấy sẽ luôn biết ngoại lệ nào được kiểm tra có thể được ném bằng một phương pháp nhất định. Trái với điều này, các ngoại lệ thời gian chạy khác nhau có thể được ném mà không có kiến ​​thức của lập trình viên.