Java 中常见的异常有哪几种?(附示例代码)
在 Java 中,异常是程序中出现的一些错误或异常情况。Java 异常类分为两种类型:受检查异常和非受检查异常。其中,非受检查异常又分为运行时异常(RuntimeException)和非运行时异常(Non-Runtime Exception)。
受检查异常是指在编译时必须处理的异常,如果不处理编译器会报错。这种异常通常表示程序无法正常处理某些操作,需要程序员对其进行特殊处理或抛出。
常见的受检查异常有:IOException
、SQLException
、ClassNotFoundException
等。
非受检查异常是指在编译时不需要处理的异常,也就是说可以不对其进行 try-catch
处理或者 throws
抛出,但如果不处理会在程序运行时抛出异常。
非受检查异常分为运行时异常和非运行时异常。运行时异常通常表示程序中存在错误,需要程序员对代码进行修改。而非运行时异常通常是由于程序环境等外部因素引起的,通常不能通过代码修改解决。
常见的运行时异常有:NullPointerException
、ArrayIndexOutOfBoundsException
、ClassCastException
等。常见的非运行时异常有:IOException
、SQLException
、ClassNotFoundException
等。
下面列举了一些常见的异常类及其示例代码:
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 中常见的异常类及其示例代码。在编写程序时,合理处理异常将有助于提高程序的健壮性和可靠性。