Trình xử lý ngoại lệ trong Java là gì?

Trong Java, các ngoại lệ là một trong nhiều cấu trúc chi phối luồng điều khiển của chương trình. Cụ thể, chúng là tác dụng phụ ngoài ý muốn của việc thực hiện bình thường của chương trình. Khi viết mã có thể gặp ngoại lệ, lập trình viên phải xác định các hướng dẫn mới cho chương trình nếu nó gặp ngoại lệ, một quá trình được gọi là "xử lý ngoại lệ". Trình xử lý ngoại lệ được tạo thành từ ba khối riêng biệt: thử, bắt và cuối cùng.
Ngoại lệ Java
Khi một chương trình gọi một phương thức hành xử theo kiểu bất ngờ, nó được cho là đã gặp phải một "ngoại lệ". Chẳng hạn, nếu chương trình cố gắng chia một số cho 0 hoặc tải một tệp không tồn tại, chương trình có thể không hoạt động như mong đợi và sẽ đưa ra một ngoại lệ để báo hiệu lỗi này. Nếu một phương thức được định nghĩa để ném một ngoại lệ trong thân phương thức, bạn chỉ có thể gọi nó trong một trình xử lý ngoại lệ - hoặc truyền lỗi lên cây bằng cách tuyên bố rằng phương thức gọi nó cũng ném ngoại lệ tương tự.
Thử khối
Trong một trình xử lý ngoại lệ thành công, phương thức ném ngoại lệ phải được chứa trong một khối "thử", như trong "thử {ngoại lệThrowingMethod ();}" Sau khi khối thử được xác định, lập trình viên xác định các khối bắt các phương thức ngoại lệ chứa trong khối ném thử.
Bắt khối
Một khối thử duy nhất có thể có nhiều khối "bắt" để xác định các hành vi khác nhau khi gặp ngoại lệ. Nếu một chương trình gặp một ngoại lệ được xác định trong nhiều khối bắt, nó sẽ chạy khối bắt cao nhất trước tiên. Vì tất cả các ngoại lệ xuất phát từ lớp ngoại lệ, điều này có nghĩa là nếu khối bắt đầu tiên của bạn đọc "Catch (Exception e) {}", một chương trình sẽ luôn chạy khối đó khi gặp ngoại lệ và không bao giờ có bất kỳ ngoại lệ nào khác. Sắp xếp các khối bắt của bạn từ cụ thể nhất đến cụ thể nhất nếu bạn muốn kiểm soát chi tiết chương trình của mình.
Khối cuối cùng
Khối "cuối cùng" là một thành phần tùy chọn của trình xử lý ngoại lệ. Sử dụng nó để xác định hành vi sẽ luôn luôn thực thi ngay cả khi gặp phải ngoại lệ. Nó là cần thiết trong một số trường hợp bởi vì bạn không thể đảm bảo rằng phần cuối của khối thử sẽ thực thi. Nếu một ngoại lệ được ném và bắt, khối đó sẽ bị gián đoạn tại thời điểm đó. Chẳng hạn, việc đặt "InputStream.close ()" trong một khối cuối cùng đảm bảo rằng bất kể ngoại lệ nào được ném trước đó trong mã, các luồng của bạn sẽ được đóng an toàn.