Java 中常见的异常有哪几种?(附示例代码)

更新时间 2023-04-04 10:35:07

在 Java 中,异常是程序中出现的一些错误或异常情况。Java 异常类分为两种类型:受检查异常和非受检查异常。其中,非受检查异常又分为运行时异常(RuntimeException)和非运行时异常(Non-Runtime Exception)。

受检查异常是指在编译时必须处理的异常,如果不处理编译器会报错。这种异常通常表示程序无法正常处理某些操作,需要程序员对其进行特殊处理或抛出。

常见的受检查异常有:IOExceptionSQLExceptionClassNotFoundException 等。

非受检查异常是指在编译时不需要处理的异常,也就是说可以不对其进行 try-catch 处理或者 throws 抛出,但如果不处理会在程序运行时抛出异常。

非受检查异常分为运行时异常和非运行时异常。运行时异常通常表示程序中存在错误,需要程序员对代码进行修改。而非运行时异常通常是由于程序环境等外部因素引起的,通常不能通过代码修改解决。

常见的运行时异常有:NullPointerExceptionArrayIndexOutOfBoundsExceptionClassCastException 等。常见的非运行时异常有:IOExceptionSQLExceptionClassNotFoundException 等。

下面列举了一些常见的异常类及其示例代码:

NullPointerException

当一个对象为空(null)时,调用该对象的方法或属性将导致 NullPointerException 异常。

String str = null;
System.out.println(str.length());

ArrayIndexOutOfBoundsException

当尝试访问数组中不存在的元素时,将抛出 ArrayIndexOutOfBoundsException 异常。

int[] arr = {1, 2, 3};
System.out.println(arr[3]);

ClassCastException

当试图将一个对象强制转换成与其本身类型不兼容的类时,将抛出 ClassCastException 异常。

Object obj = new Integer(100);
String str = (String) obj;

IllegalArgumentException

当方法的参数传递非法的值时,将抛出 IllegalArgumentException 异常。

public void setAge(int age) {if (age < 0 || age > 150) {throw new IllegalArgumentException("非法年龄");
    }
    this.age = age;
}

NumberFormatException

当试图将一个非数字字符串转换为数字类型时,将抛出 NumberFormatException 异常。

String str = "abc";
int num = Integer.parseInt(str);

IOException

当发生输入 / 输出操作错误时,将抛出 IOException 异常。

File file = new File("test.txt");
FileReader reader = new FileReader(file);

InterruptedException

当一个线程处于等待、休眠或占用状态时,如果另一个线程中断它,将抛出 InterruptedException 异常。

Thread thread = new Thread(() -> {
    try {Thread.sleep(5000);
    } catch (InterruptedException e) {System.out.println("线程被中断");
    }
});
thread.start();
thread.interrupt();

FileNotFoundException

当试图访问不存在的文件时,将抛出 FileNotFoundException 异常。

File file = new File("test.txt");
FileReader reader = new FileReader(file);

NoSuchMethodException

当试图调用一个不存在的方法时,将抛出 NoSuchMethodException 异常。

class MyClass {public void method1() {System.out.println("方法 1");
    }
}
MyClass obj = new MyClass();
Method method = obj.getClass().getMethod("method2");

NoSuchFieldException

当试图访问一个不存在的字段时,将抛出 NoSuchFieldException 异常。

class MyClass {public int field1 = 10;}
MyClass obj = new MyClass();
Field field = obj.getClass().getField("field2");

总结

本文列举了 Java 中常见的异常类及其示例代码。在编写程序时,合理处理异常将有助于提高程序的健壮性和可靠性。