对于Error:表示系统级错误或者资源耗尽的状况,像OutOfMemoryError、StackOverflowError等。这类错误是程序无法处理的,通常也不应该尝试去处理。
对于Exception:表示程序可以处理的异常。它又能细分为:
受检查异常(Checked Exception):是Exception类及其子类(不包含RuntimeException)。这类异常在编译时就会被检查,必须通过try-catch捕获或者用throws声明抛出,否则程序无法通过编译,例如IOException、SQLException。
运行时异常(RuntimeException):是RuntimeException类及其子类,在编译时不会被强制要求处理,比如NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException。
常见的异常:数组越界异常
Java 数组的索引是从 0 开始的,其有效范围是0到length - 1。一旦访问的索引超出这个范围,就会触发ArrayIndexOutOfBoundsException。
例如:
索引为负数:比如array[-1]。
索引大于或等于数组长度:例如数组长度是 5,却访问array[5]。
空指针异常:
String str;
System.out.println(str.length());
在 Java 中,对象引用如果没有指向任何实例,就会被赋值为null。当我们试图对这个null引用进行操作时,NullPointerException便会抛出。
捕获异常:
public class Test3 {
public static void main(String[] args) throws IOException {
int[] arr={1,2,3,4,5,6,7};
System.out.println(arr[10]);
System.out.println("111");
try {
//可能出现异常的代码
System.out.println(arr[10]);//此处出现异常,程序就会在这创建一个ArrayIndexOutOfBoundsException对象
//new ArrayIndexOutOfBoundsException();
//拿着这个对象到catch的小括号中对比,看括号中的变量是否可以接收这个对象
//如果能接收,就表示该异常被捕获,执行catch里面对应的代码
//当catch里面所有的代码执行完毕,继续执行try...catch体系下面的其他代码
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("索引越界");
}
}
}
getMessage()
作用:返回异常的简短描述信息(即异常创建时传入的消息)。
返回值:String 类型,表示异常的详细消息。
try {
int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {
System.out.println(e.getMessage()); // 输出:/ by zero
}
toString()
作用:返回异常的类型和消息的组合字符串,格式为 异常类名: 异常消息。
返回值:String 类型,包含异常类名和消息。
try {
String str = null;
System.out.println(str.length()); // 抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println(e.toString()); // 输出:java.lang.NullPointerException
}
printStackTrace()
作用:打印异常的堆栈跟踪信息(包括异常类型、消息和完整的调用栈),输出到标准错误流(System.err)。
返回值:void,直接打印信息。
try {
methodA();
} catch (Exception e) {
e.printStackTrace(); // 打印完整堆栈信息
}
public static void methodA() {
methodB();
}
public static void methodB() {
throw new RuntimeException("自定义异常");
}