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

Anonim

Ngoại lệ đã kiểm tra và Thời gian chạy ngoại lệ

Ngoại lệ là loại sự kiện đặc biệt, có thể làm phiền dòng chương trình bình thường. Trường hợp ngoại lệ xuất phát từ "sự kiện đặc biệt". Vứt bỏ một ngoại lệ là quá trình tạo ra một đối tượng ngoại lệ và đưa nó đến 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 đi qua nó theo thứ tự ngược lại (trong đó các phương pháp đã đượ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 một bộ xử lý thích hợp, nó sẽ vượt qua đối tượng ngoại lệ để xử lý. Đây được gọi là catching the exception. Tuy nhiên, nếu ngoại lệ không thể xử lý, chương trình sẽ chấm dứt. Trong Java, ngoại lệ thừa hưởng 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 sẽ được thi hành. Thời gian chạy ngoại lệ là một loại ngoại lệ, không được kiểm tra bởi trình biên dịch.

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. ngoại lệ hoặc các lớp con của nó (ngoại trừ java.look.ExceptionException và các lớp con của nó). Các ngoại lệ được kiểm tra được "kiểm tra" tại thời gian 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, hoặc nếu 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 ngoại lệ được kiểm tra rất nổi tiếng với các lập trình viên. Ví dụ, IOException và các lớp phụ của nó được kiểm tra ngoại lệ, và bất cứ khi nào các lập trình viên đang xử lý việc truy cập hoặc sửa đổi một tập tin, kiểm tra trình biên dịch để đảm bảo rằng tất cả các IOExceptions có thể có được chăm sóc bởi các lập trình viên.

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

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

Sự khác nhau giữa Checked Exception và Runtime Exception là gì?

Mặc dù cả hai trường hợp ngoại lệ được kiểm tra và các trường hợp ngoại lệ trong thời gian chạy là sự xuất hiện không mong muốn trong quá trình thực hiện chương trình nhưng chúng đều có sự khác biệt. Kiểm tra xử lý ngoại lệ được thi hành bởi trình biên dịch, nhưng ngoại lệ thời gian chạy không.Do đó, ngoại lệ được kiểm tra phải được ném ra hoặc xử lý theo thứ tự để mã biên dịch, nhưng không có yêu cầu nào đối với các trường hợp ngoại lệ trong thời gian chạy. Do đó, các ngoại lệ trong thời gian chạy thuộc về loại ngoại lệ không kiểm soát cùng với lỗi.

Bất lợi với ngoại lệ 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 bao gồm 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, do đó các lập trình viên có thể viết ít mã số. Mặt khác, vì ngoại lệ được kiểm tra phải được đánh bắt, không có gì ngạc nhiên cho các lập trình viên. Cô ấy sẽ luôn biết ngoại lệ nào đã được kiểm tra có thể bị ném theo một phương pháp nào đó. Ngược lại với điều này, các trường hợp thời gian chạy khác nhau có thể được ném mà không có kiến ​​thức về lập trình viên.