Ngoại lệ (EXCEPTION) Java Ngoại lệ (EXCEPTION) Java Bởi: unknown Ngoại lệ (EXCEPTION) Trong chương trình, có số "thao tác không chắn", ví dụ thao tác vào/ra: đĩa mềm chưa sẵn sàng, máy in có lỗi, nối kết mạng không thực được, dẫn đến lỗi thực thi chương trình Java hạn chế lỗi sinh từ "thao tác không chắn" chế Ngoại lệ (Exception) Ngoại lệ tức kiện xảy dự tính chương trình không xử lý làm cho chương trình chuyển sang trạng thái không kiểm soát Ví dụ điều xảy chương trình truy xuất đến phần tử thứ 11 mảng 10 phần tử ? Một số ngôn ngữ C, C++ không báo lỗi cả, chương trình tiếp tục vận hành kết xác định Để hạn chế lỗi thế, Java bắt buộc lệnh dẫn đến ngoại lệ phải có đoạn mã xử lý phòng hờ ngoại lệ xảy theo cú pháp sau: try { Các thao tác vào sinh ngoại lệ }catch (KiểuNgoạiLệ_01 biến) { ứng xử ngoại lệ KiểuNgoaiLệ_01 sinh } catch (KiểuNgoạiLệ_02 biến) { ứng xử ngoại lệ KiểuNgoaiLệ_02 sinh }finally { Công việc luôn thực } Trong chế này, lệnh tạo ngoại lệ đưa vào khối bao bọc từ khóa try {} Tiếp theo loạt khối catch{} Một lệnh sinh nhiều loại ngoại lệ Ứng với loại ngoại lệ có khối catch{} để xử lý cho loại ngoại lệ Tham số catch loại ngoại lệ mà có trách nhiệm xử lý Khi thực thi chương trình, lệnh nằm khối try{} tạo ngoại lệ, điều khiển chuyển sang lệnh nằm khối catch{} tương ứng với loại ngoại lệ Các lệnh phía sau lệnh tạo ngoại lệ khối try{} bị bỏ qua Các 1/2 Ngoại lệ (EXCEPTION) Java lệnh nằm khối finally{} luôn thực cho dù có xảy ngoại lệ không Khối lệnh finally{} tùy chọn không cần Ngoại lệ có loại bắt buộc phải xử lý, tức phải có try{}, có catch{} sử dụng lệnh Ví dụ lệnh đọc từ bàn phím Trình biên dịch java báo lỗi không xử lý chúng Ngược lại, có loại ngoại lệ không bắt buộc phải xử lý, ví dụ truy xuất đến phần tử bên số mảng Tra cứu tài liệu đặc tả API java để biết ngoại lệ tạo từ phương thức Ví dụ: Lưu chương trình sau vào tập tin ExceptionDemo.java : public class ExceptionDemo { public static void main(String[] args) { try { System.out.println("Hello " + args[0]); } catch (ArrayIndexOutOfBoundsException e){ System.out.println("Hello Whoever you are."); } finally { System.out.println("How are you?"); } }} Biên dịch thực thi có kết sau: Kết biên dịch chương trình ExceptionDemo.java Trong chương trình dự định chào người đưa vào từ đối số thứ chương tình (được chứa phần tử args[0]) Tuy nhiên người dùng thực thi chương trình quên đưa vào đối số, tức phần tử args[0] không tồn Ngoại lệ báo hiệu truy xuất đến phần tử nằm mảng (ArrayIndexOutOfBoundsException) quẳng (throw) Khi đoạn mã lệnh khối catch có tham số loại ngoại lệ ArrayIndexOutOfBoundsException đưọc thực 2/2 .. .Ngoại lệ (EXCEPTION) Java lệnh nằm khối finally{} luôn thực cho dù có xảy ngoại lệ không Khối lệnh finally{} tùy chọn không cần Ngoại lệ có loại bắt buộc phải xử lý,... xử lý, tức phải có try{}, có catch{} sử dụng lệnh Ví dụ lệnh đọc từ bàn phím Trình biên dịch java báo lỗi không xử lý chúng Ngược lại, có loại ngoại lệ không bắt buộc phải xử lý, ví dụ truy xuất... phần tử args[0] không tồn Ngoại lệ báo hiệu truy xuất đến phần tử nằm mảng (ArrayIndexOutOfBoundsException) quẳng (throw) Khi đoạn mã lệnh khối catch có tham số loại ngoại lệ ArrayIndexOutOfBoundsException