异常
在 java 中,异常分为两大类:
- 可以通过代码恢复正常的异常,称之为运行时异常。 最大的父类为 RuntimeException。
- 不可以通过代码恢复正常的异常,称之为编译时异常。 最大的父类为 Exception。
常见的运行时异常
- NullPointerException 空指针异常,当访问了空对象的成员属性或成员方法时,就会出现该异常(静态属性和静态方法,不会出现异常)。
- ArithmeticException 算术异常,当除数为 0 时,就会出现该异常。
- ArrayIndexOutOfBoundsException 数组索引越界异常。当访问的索引超过了数组的最大索引时。
- StringIndexOutOfBoundsException 字符串索引越界异常。
- NumberFormatException 数值格式化异常。
- ClassCastException 类类型转换异常。
抛出异常
如果某个供他人调用的方法,可能出现问题,应手动抛出异常,以便明确地提前告知对方。
定义方法时抛出 throws Exception
自定义异常
// 自定义异常
class LoginException extends RuntimeException {
public LoginException(String msg) {
// 手动调用父类的构造函数
super(msg);
}
}
异常捕获
基本语法:try ... catch ... catch ... finally
- try 将可能会出现问题的代码进行包裹
- catch 捕获 JVM 抛出的异常,并进行相应地处理。多个 catch 捕获的异常的粒度应该是从小到大。
- finally 不管怎样,这里的代码最终都会执行。