Exception trong Java
Exception là gì?
Ý nghĩa trong từ điển: Exception là một tình trạng bất thường. Trong Java, Exception là một sự kiện mà phá vỡ luồng chuẩn của chương trình. Nó là một đối tượng mà được ném tại Runtime. Một exception (ngoại lệ) trong Java là một vấn đề xảy ra trong quá trình thực hiện của chương trình. Một ngoại lệ có thể xảy ra với nhiều lý do khác nhau, như dưới đây:
Người dùng nhập dữ liệu không hợp lệ.
Một file cần được mở nhưng không thể tìm thấy.
Kết nối mạng bị ngắt trong quá trình thực hiện giao tiếp hoặc JVM hết bộ nhớ.
Để hiểu sâu hơn các khái niệm được trình bày trong chương này, mời bạn tham khảo loạt bài: Ví dụ về Exception trong Java.
Một vài những ngoại lệ xảy ra bởi lỗi của người dùng, một số khác bởi lỗi của lập trình viên và số khác nữa đến từ lỗi của nguồn dữ liệu vật lý.
Để hiểu về cách xử lý ngoại lệ trong Java, bạn cần phải hiểu những loại ngoại lệ như sau:
Checked Exception: Là ngoại lệ thường xảy ra do người dùng mà không thể lường trước được bởi lập trình viên. Ví dụ, một file được mở, nhưng file đó không thể tìm thấy và ngoại lệ xảy ra. Những ngoại lệ này không thể được bỏ qua trong quá trình biên dịch. Checked Exception là các lớp mà kế thừa lớp Throwable ngoại trừ RuntimeException và Error. Ví dụ như IOException, SQLException, … Checked Exception được kiểm tra tại thời gian biên dịch compile-time.
Unchecked Exception: Một ngoại lệ xảy ra ở runtime là ngoại lệ có thể tránh được bởi lập trình viên. Unchecked Exception là các lớp kế thừa RuntimeException, ví dụ ArithmaticException, NullPointerException, ArrayIndexOutOfBoundsException, … Unchecked Exception không được kiểm tra tại compile-time, thay vào đó chúng được kiểm tra tại runtime.
Error: Nó không giống các exception, nhưng vấn đề xảy ra vượt quá tầm kiểm soát của lập trình viên hay người dùng. Error được bỏ qua trong code của bạn vì bạn hiếm khi có thể làm gì đó khi chương trình bị error. Ví dụ như OutOfMemoryError, VirtualMachineError, AssertionError, … Nó được bỏ qua trong quá trình Java biên dịch.
Xử lý ngoại lệ (Exception Handling) là một kỹ thuật để xử lý các Runtime Error như ClassNotFound, IO, SQL, Remote, … Lợi thế chính của xử lý ngoại lệ là để duy trì luồng chuẩn của ứng dụng. Exception thường phá vỡ luồng chuẩn của ứng dụng, và đó là tại sao chúng ta sử dụng Exception Handling. Bạn theo dõi tình huống sau:
statement 1; statement 2; statement 3; statement 4; statement 5;//exception xuat hien statement 6; statement 7; statement 8; statement 9; statement 10;
Giả sử có 10 lệnh trong chương trình của bạn và xuất hiện một Exception tại lệnh 5, phần còn lại của code sẽ không được thực thi (từ lệnh 6 tới lệnh 10). Nếu chúng ta thực hiện Exception Handling, phần lệnh còn lại sẽ được thực thi. Đó là ý nghĩa của việc sử dụng Exception Handling trong Java.
Cấp bậc exception trong Java
Tất cả các lớp exception đều là lớp con của lớp java.lang.Exception . Lớp exception là lớp con của lớp Throwable. Một loại lớp exception khác là Error cũng là lớp con của lớp Throwable.
Erros không thường được đặt bẫy bởi các chương trình Java. Error thường được tạo ra để thể hiện lỗi trong môi trường runtime. Ví dụ: JVM hết bộ nhớ. Thông thường các chương trình không thể khôi phục từ các lỗi.
Lớp Exception có hai lớp con chính là : IOException và RuntimeException.
Đây là danh sách các checked và unchecked exception phổ biến: Exception có sẵn trong Java.
Các phương thức của lớp Exceptions trong Java
Dưới đây là danh sách các phương thức phố biến của lớp Throwable trong Java
STT | Phương thức và Miêu tả |
---|---|
1 | public String getMessage()
Trả về một message cụ thể về exception đã xảy ra. Message này được khởi tạo bởi phương thức contructor của Throwable |
2 | public Throwable getCause()
Trả về nguyên nhân xảy ra exception biểu diễn bởi đối tượng Throwable |
3 | public String toString()
Trả về tên của lớp và kết hợp với kết quả từ phương thức getMessage() |
4 | public void printStackTrace()
In ra kết quả của phương thức toString cùng với stack trace đến System.err |
5 | public StackTraceElement [] getStackTrace()
Trả về một mảng chứa mỗi phần tử trên stack trace. Phần tử tại chỉ mục 0 biểu diễn phần trên cùng của Call Stack, và phần tử cuối cùng trong mảng biểu diễn phương thức tại dưới cùng của Call Stack |
6 | public Throwable fillInStackTrace()
Fills the stack trace of this Throwable object with the current stack trace, adding to any previous information in the stack trace. |
Các tình huống phổ biến mà Exception có thể xảy ra
Dưới đây là một số tình huồng phổ biến mà Unchecked Exception có thể xảy ra:
Với ArithmaticException: xảy ra nếu bạn chia bất cứ số nào cho số 0.
int a=50/0;//ArithmeticException
Với NullPointerException: nếu bạn có giá trị null trong bất cứ biến nào, thì việc thực hiện bất cứ hoat động nào bởi biến này làm xuất hiện kiểu exception này.
String s=null; System.out.println(s.length());//NullPointerException
Với NumberFormatException: việc định dạng sai bất cứ giá trị nào, có thể gây ra loại ngoại lệ này. Giả sử bạn có một biến string mà có các ký tự, thì việc chuyển đổi biến thành này chữ số sẽ làm xuất hiện NumberFormatException.
String s="abc"; int i=Integer.parseInt(s);//NumberFormatException
Với ArrayIndexOutOfBoundsException: nếu bạn đang chèn bất cứ giá trị nào trong một chỉ mục sai sẽ làm xuất hiện kiểu exception này.
int a[]=new int[5]; a[10]=50; //ArrayIndexOutOfBoundsException
Các từ khóa để Xử lý ngoại lệ trong Java
Có 5 từ khóa được sử dụng để Xử lý ngoại lệ trong Java, đó là:
try
catch
finally
throw
throws
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập doanh nghiệp với Java. Khóa học có giá chỉ 400K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.
Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59
Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2024). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.
Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com
Bài học Java phổ biến tại vietjack.com: