常见的五种Java运行时异常及处理方法

Java Q&A Hub 使用 GPT-4o-mini 回答

问题:

请写出 5 种常见到的runtime exception。

回答:

在 Java 中,运行时异常(Runtime Exception)是指在程序运行过程中可能会发生的异常,这些异常通常是由于程序逻辑错误引起的。以下是五种常见的运行时异常及其简要说明:

  1. NullPointerException

    • 说明:当程序试图访问或修改一个为 null 的对象的属性或方法时,会抛出此异常。
    • 示例
      String str = null;
      int length = str.length(); // 这里会抛出 NullPointerException
      
  2. ArrayIndexOutOfBoundsException

    • 说明:当程序试图访问数组中不存在的索引时,会抛出此异常。
    • 示例
      int[] arr = new int[5];
      int value = arr[10]; // 这里会抛出 ArrayIndexOutOfBoundsException
      
  3. ClassCastException

    • 说明:当程序试图将一个对象强制转换为不兼容的类时,会抛出此异常。
    • 示例
      Object obj = new Integer(100);
      String str = (String) obj; // 这里会抛出 ClassCastException
      
  4. IllegalArgumentException

    • 说明:当方法接收到一个不合法或不适当的参数时,会抛出此异常。
    • 示例
      public void setAge(int age) {
          if (age < 0) {
              throw new IllegalArgumentException("年龄不能为负数");
          }
      }
      
  5. ArithmeticException

    • 说明:当发生算术运算错误时,例如除以零,会抛出此异常。
    • 示例
      int result = 10 / 0; // 这里会抛出 ArithmeticException
      

处理运行时异常

虽然运行时异常通常不需要强制捕获,但在某些情况下,您可能希望通过适当的异常处理来提高程序的健壮性。以下是一个简单的示例,展示如何捕获和处理这些异常:

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            // 示例 1: NullPointerException
            String str = null;
            System.out.println(str.length());

            // 示例 2: ArrayIndexOutOfBoundsException
            int[] arr = new int[5];
            System.out.println(arr[10]);

            // 示例 3: ClassCastException
            Object obj = new Integer(100);
            String str2 = (String) obj;

            // 示例 4: IllegalArgumentException
            setAge(-1);

            // 示例 5: ArithmeticException
            int result = 10 / 0;

        } catch (NullPointerException e) {
            System.out.println("捕获到 NullPointerException: " + e.getMessage());
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("捕获到 ArrayIndexOutOfBoundsException: " + e.getMessage());
        } catch (ClassCastException e) {
            System.out.println("捕获到 ClassCastException: " + e.getMessage());
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到 IllegalArgumentException: " + e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println("捕获到 ArithmeticException: " + e.getMessage());
        } catch (Exception e) {
            System.out.println("捕获到其他异常: " + e.getMessage());
        }
    }

    public static void setAge(int age) {
        if (age < 0) {
            throw new IllegalArgumentException("年龄不能为负数");
        }
    }
}

在这个示例中,我们使用 try-catch 块来捕获并处理不同类型的运行时异常。通过这种方式,程序可以在遇到异常时继续运行,而不是直接崩溃。