Java中常见的异常类

在Java中,异常(Exception)是指在程序执行过程中可能出现的错误或异常情况。Java通过异常类来表示这些异常情况,异常类是从java.lang.Exception类继承的。异常类可以分为两大类:Checked异常和Unchecked异常。

  1. Checked异常:检查异常
    Checked异常是在编译时被检查的异常,即在代码编译阶段就需要处理这些异常,否则无法通过编译。这些异常通常表示程序可能出现的外部影响,需要程序员进行预防或处理。

  2. Unchecked异常:运行时异常
    Unchecked异常是在运行时才会被检查的异常,编译器不要求必须处理这些异常。这些异常通常表示程序内部错误或逻辑问题,应该通过代码的合理编写来避免。

在Java中,异常类形成了一个继承层级结构,java.lang.Throwable是所有异常的基类,它有两个主要的子类:java.lang.Errorjava.lang.ExceptionError表示系统级别的错误,通常是不可恢复的,而Exception则是可处理的异常。

异常处理的方式包括:

  • 使用trycatchfinally块来捕获和处理异常。
  • 使用throws关键字声明方法可能抛出的异常,让调用者来处理。
  • 创建自定义异常类,继承自Exception,以便处理特定的异常情况。

以下是一个简单的Java异常处理示例:

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.err.println("Error: Division by zero");
        }
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

在这个示例中,divide方法可能抛出ArithmeticException,我们通过trycatch块捕获并处理这个异常。

以下是一些常见的异常类和它们的描述:

1. NullPointerException (运行时异常): 当尝试在一个对象引用上调用方法或访问属性,而该引用为null时抛出。

2. IllegalArgumentException (运行时异常): 当传递给方法的参数不合法或无效时抛出,例如传递了不允许的参数值。

3. IllegalStateException (运行时异常): 在对象的状态不适合于执行特定操作时抛出,例如在未初始化对象上调用方法。

4. ArrayIndexOutOfBoundsException (运行时异常): 当尝试访问数组中不存在的索引时抛出。

5. ArithmeticException (运行时异常): 在数学运算中出现错误时抛出,例如除以零。

6. ClassCastException (运行时异常): 当试图将一个对象转换为不兼容的类类型时抛出,例如将不是子类的对象转换为某个类的实例。

7. FileNotFoundException (检查异常): 在尝试打开一个不存在的文件时抛出。

8. IOException (检查异常): 处理输入输出操作可能出现的异常,例如读写文件、网络通信等。

9. SQLException (检查异常): 处理数据库访问异常。

10. InterruptedException (检查异常): 在多线程编程中,当一个线程在等待另一个线程执行某个操作时被中断时抛出。

11. NoSuchElementException (运行时异常): 当访问集合(如List、Set)中不存在的元素时抛出。

12. OutOfMemoryError (错误): 在程序尝试分配更多内存而可用内存不足时抛出,通常表示程序内存泄漏或者分配不当。

13. StackOverflowError (错误): 当递归调用层次过深,导致栈空间耗尽时抛出。

14. NumberFormatException (运行时异常): 当字符串不能转换为数字时抛出,例如使用Integer.parseInt()方法时传递的字符串格式不正确。

简单代码示例

以下是一些Java中常见异常类的简单代码示例:

1. NullPointerException:

String str = null;
try {
    int length = str.length(); // This will throw NullPointerException
} catch (NullPointerException e) {
    System.out.println("NullPointerException caught: " + e.getMessage());
}

2. IllegalArgumentException:

int value = -5;
if (value < 0) {
    throw new IllegalArgumentException("Value must be non-negative");
}

3. ArrayIndexOutOfBoundsException:

int[] numbers = {1, 2, 3};
try {
    int value = numbers[5]; // This will throw ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("ArrayIndexOutOfBoundsException caught: " + e.getMessage());
}

4. FileNotFoundException:

try {
    FileReader fileReader = new FileReader("myfile.txt"); // This will throw FileNotFoundException
} catch (FileNotFoundException e) {
    System.out.println("FileNotFoundException caught: " + e.getMessage());
}

5. IOException:

try {
    FileInputStream inputStream = new FileInputStream("file.txt");
    // Perform I/O operations
    inputStream.close();
} catch (IOException e) {
    System.out.println("IOException caught: " + e.getMessage());
}

6. SQLException:

try {
    // Code that interacts with a database
} catch (SQLException e) {
    System.out.println("SQLException caught: " + e.getMessage());
}

7. InterruptedException:

try {
    Thread.sleep(1000); // This will throw InterruptedException if the thread is interrupted while sleeping
} catch (InterruptedException e) {
    System.out.println("InterruptedException caught: " + e.getMessage());
}

8. NumberFormatException:

String strNumber = "abc";
try {
    int number = Integer.parseInt(strNumber); // This will throw NumberFormatException
} catch (NumberFormatException e) {
    System.out.println("NumberFormatException caught: " + e.getMessage());
}

你可能感兴趣的:(Java,Java)