Cách thức hoạt động của multi-catch - 1

"Thêm một vài bài học thú vị. Ôi, tôi thích dạy học làm sao!"

"Tôi muốn nói với bạn về cách thức hoạt động của nhiều khối bắt . Rất đơn giản: khi các ngoại lệ xảy ra trong một khối thử , quá trình thực thi sẽ chuyển sang khối bắt đầu tiên ."

"Nếu một loại được chỉ định trong dấu ngoặc đơn của khối bắt khớp với loại ngoại lệ được ném ra, thì quá trình thực thi sẽ bắt đầu bên trong khối đó. Nếu không, chúng tôi sẽ chuyển sang khối bắt tiếp theo , nơi thực hiện kiểm tra tương tự."

"Nếu chúng tôi hết khối bắt và ngoại lệ chưa được bắt, nó sẽ được tính lại và phương thức hiện tại sẽ chấm dứt bất thường."

"Tôi hiểu rồi. Khối bắt trùng khớp với loại ngoại lệ sẽ là khối được thực thi."

"Vâng, đúng vậy. Tuy nhiên, trong thực tế nó phức tạp hơn một chút. Các lớp có thể kế thừa các lớp khác. Nếu một lớp Cow kế thừa một lớp Animal, đối tượng Cow có thể được tham chiếu không chỉ bởi một biến Cow mà còn bởi một biến Animal. "

"Và?"

"Bởi vì tất cả các ngoại lệ kế thừa Exception hoặc RuntimeException (cũng kế thừa Exception ), chúng vẫn có thể bị bắt bằng cách sử dụng 'catch ( Exception e)' hoặc ' catch (RuntimeException e) '."

"Và?"

"Chúng tôi có thể đưa ra hai kết luận. Đầu tiên, bạn có thể sử dụng 'bắt (Ngoại lệ e)' để bắt bất kỳ ngoại lệ nào. Thứ hai, thứ tự của các khối bắt rất quan trọng. "

"Đây là một số ví dụ:"

" ArithmeticExceptionĐiều xảy ra sau khi chúng ta chia cho 0 sẽ bị bắt trong khối bắt thứ hai."

Mã số
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"Trong ví dụ bên dưới, cái ArithmeticExceptionsẽ bị bắt trong khối bắt đầu tiên, bởi vì tất cả các ngoại lệ đều kế thừa Ngoại lệ, tức là Exceptionbao gồm tất cả các ngoại lệ. "

Mã số
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"Trong ví dụ bên dưới, ArithmeticExceptionsẽ không bị bắt. Nó sẽ được chuyển thành phương thức gọi."

Mã số
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Điều đó làm sáng tỏ mọi thứ một chút. Những ngoại lệ này không phải là chủ đề dễ dàng nhất."

"Có vẻ như vậy thôi. Chúng thực sự là một trong những thứ đơn giản nhất trong Java."

“Tôi không biết nên vui hay buồn về điều đó…”