So sánh try catch và throw năm 2024

Trong quá trình học tập, nghiên cứu hoặc trong một bài phỏng vấn về ngôn ngữ Java. Xử lý ngoại lệ là một vấn đề quan trọng giúp chúng ta có thể hoàn thiện, tối ưu một chương trình Java. Sau đây mình sẽ đề xuất 05 điều bạn cần biết về ngoại lệ và xử lý ngoại lệ trong Java.

1. Ngoại lệ trong Java là gì?

Một ngoại lệ [Exception] trong Java là một vấn đề phát sinh trong quá trình thực thi chương trình. Khi xảy ra ngoại lệ, luồng xử lý [flow] bị gián đoạn, chương trình/ứng dụng dừng bất thường. Nó là một đối tượng được ném ra tại Runtime.

Ngoại lệ trong Java có thể xảy ra vì nhiều lý do khác nhau:

  • Nhập dữ liệu không hợp lệ.
  • Không tìm thấy file cần mở.
  • Kết nối mạng bị ngắt trong quá trình thực hiện giao tác.
  • JVM hết bộ nhớ.
  • Truy cập vượt ngoài chỉ số của mảng, v…v…

Ngoại lệ xảy ra có thể do người dùng, lập trình viên hoặc số khác do tài nguyên bị lỗi. Java Exeption được triển khai bằng cách sử dụng các lớp như Throwable, Exception, RuntimeException và các từ khóa như throw, throws, try, catch và finally.

Dựa vào tính chất các vấn đề, người ta chia ngoại lệ thành ba loại:

  • Ngoại lệ được kiểm tra [Checked Exceptions].
  • Ngoại lệ không được kiểm tra [Unchecked Exceptions].
  • Lỗi [Error].

2. Sự khác nhau giữa "Checked Exceptions" và "Unchecked Exceptions" trong Java?

Checked Exceptions: Là một ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên dịch, chúng cũng có thể được gọi là ngoại lệ thời gian biên dịch [Compile-time Exceptions]. Và lập trình viên không thể lường trước.

Ví dụ: Bạn muốn mở một file để đọc nhưng tệp được chỉ định lại không tồn tại. Thì FileNotFoundExeption sẻ xảy ra và trình biên dịch sẽ thông báo tới lập trình viên nhằm xử lý ngoại lệ đó.

Unchecked Exceptions: Là một ngoại lệ không được kiểm tra trong quá trình biên dịch. Chúng cũng được gọi là ngoại lệ thời gian chạy [Runtime Exceptions]. Là ngoại lệ có thể tránh được bởi lập trình viên. Unchecked Exceptions kế thừa từ Runtime Exception.

Ví dụ: ArithmaticException, ArrayIndexOutOfBoundsException, NullPointerException,…chúng được kiểm tra tại Runtime.

3. Sự khác nhau giữa hai từ khóa "

Welcome!

Exception in thread "main" java.lang.ArithmeticException: Age not valid!
  at testexception.TestException.ageValid[TestException.java:11]
  at testexception.TestException.main[TestException.java:7]
C:\Users\nmdit\AppData\Local\NetBeans\Cache\8.2rc\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED [total time: 0 seconds]

0" và "

Welcome!

Exception in thread "main" java.lang.ArithmeticException: Age not valid!
  at testexception.TestException.ageValid[TestException.java:11]
  at testexception.TestException.main[TestException.java:7]
C:\Users\nmdit\AppData\Local\NetBeans\Cache\8.2rc\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED [total time: 0 seconds]

1" trong Java?

Mặc dù trông giống nhau và đều được sử dụng trong xử lý ngoại lệ nhưng

Welcome!

Exception in thread "main" java.lang.ArithmeticException: Age not valid!
  at testexception.TestException.ageValid[TestException.java:11]
  at testexception.TestException.main[TestException.java:7]
C:\Users\nmdit\AppData\Local\NetBeans\Cache\8.2rc\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED [total time: 0 seconds]

0 và

Welcome!

Exception in thread "main" java.lang.ArithmeticException: Age not valid!
  at testexception.TestException.ageValid[TestException.java:11]
  at testexception.TestException.main[TestException.java:7]
C:\Users\nmdit\AppData\Local\NetBeans\Cache\8.2rc\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED [total time: 0 seconds]

1 khác nhau về cách thức sử dụng và nơi chúng được sử dụng trong code.

Về throw, nó được sử dụng để ném ra một ngoại lệ cụ thể. Chúng ta có thể ném một trong hai ngoại lệ checked hoặc unchecked trong java bằng từ khóa này. Từ khóa throw chủ yếu được sử dụng để ném ngoại lệ do người dùng tự định nghĩa.

Ví dụ:

public class TestException {
    public static void main[String[] args] {
        ageValid[19];
        System.out.println["------"];
        ageValid[17];
    }
    public static void ageValid[int age]{
        if[age

Chủ Đề