Computer >> Máy Tính >  >> Lập trình >> Java

Đặt lại các ngoại lệ trong Java có nghĩa là gì?

Khi một ngoại lệ được lưu vào bộ nhớ đệm trong một khối catch, bạn có thể ném lại nó bằng từ khóa throw (được sử dụng để ném các đối tượng ngoại lệ).

Trong khi ném lại các ngoại lệ, bạn có thể ném lại các ngoại lệ giống như nó mà không cần điều chỉnh nó như -

try {
   int result = (arr[a])/(arr[b]);
   System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);
}
catch(ArithmeticException e) {
   throw e;
}

Hoặc, bọc nó trong một ngoại lệ mới và ném nó đi. Khi bạn bọc một ngoại lệ đã lưu trong bộ nhớ cache bên trong một ngoại lệ khác và ném nó đi, nó được gọi là chuỗi ngoại lệ hoặc gói ngoại lệ, bằng cách làm này, bạn có thể điều chỉnh ngoại lệ của mình, đưa ra mức ngoại lệ cao hơn để duy trì sự trừu tượng.

try {
   int result = (arr[a])/(arr[b]);
   System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);
}
catch(ArrayIndexOutOfBoundsException e) {
   throw new IndexOutOfBoundsException();
}

Ví dụ

Trong ví dụ Java sau, mã của chúng ta trong demoMethod () có thể ném ArrayIndexOutOfBoundsException một ArithmeticException. Chúng tôi đang bắt hai ngoại lệ này trong hai khối bắt khác nhau.

Trong các khối bắt, chúng tôi đang ném lại cả hai ngoại lệ một bằng cách gói trực tiếp trong các ngoại lệ cao hơn và ngoại lệ còn lại.

import java.util.Arrays;
import java.util.Scanner;
public class RethrowExample {
   public void demoMethod() {
      Scanner sc = new Scanner(System.in);
      int[] arr = {10, 20, 30, 2, 0, 8};
      System.out.println("Array: "+Arrays.toString(arr));
      System.out.println("Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)");
      int a = sc.nextInt();
      int b = sc.nextInt();
      try {
         int result = (arr[a])/(arr[b]);
         System.out.println("Result of "+arr[a]+"/"+arr[b]+": "+result);
      }
      catch(ArrayIndexOutOfBoundsException e) {
         throw new IndexOutOfBoundsException();
      }
      catch(ArithmeticException e) {
         throw e;
      }
   }
   public static void main(String [] args) {
      new RethrowExample().demoMethod();
   }
}

Đầu ra1

Array: [10, 20, 30, 2, 0, 8]
Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)
0
4
Exception in thread "main" java.lang.ArithmeticException: / by zero
   at myPackage.RethrowExample.demoMethod(RethrowExample.java:16)
   at myPackage.RethrowExample.main(RethrowExample.java:25)

Đầu ra2

Array: [10, 20, 30, 2, 0, 8]
Choose numerator and denominator(not 0) from this array (enter positions 0 to 5)
124
5
Exception in thread "main" java.lang.IndexOutOfBoundsException
   at myPackage.RethrowExample.demoMethod(RethrowExample.java:17)
   at myPackage.RethrowExample.main(RethrowExample.java:23)