什么是异常
开发过程中发生的不正常的情况称为"异常"。逻辑、语法错误不算异常
异常可以分为两大类
- Error:JVM无法解决的问题,如StackOverflow、Out of memory。Error是严重错误,程序会崩溃
- Exception:其他编程错误或偶然的外在错误导致的一般性问题,可以用针对性的代码进行处理。Exception分运行时异常和编译时异常。
异常体系图
常见的运行时异常
运行时异常可以不处理,有默认处理方式
常见的编译异常
编译异常指在编译期间,就必须处理的异常,不处理则无法通过编译
异常处理
try-catch-finally
try{
// 可能会发生异常的代码
} catch (Expection e){
// 若捕获到异常,会执行这里的代码;若无异常则不执行此处的代码
// JVM将捕获到的异常封装到一个Exception类的对象e中
} finally {
// 无论代码中是否有异常都会执行此处的代码,必须执行
// 通常用于释放资源
}
idea中ctrl+alt+t可以快速生成try-catch
可以有多个catch语句,父类异常在后,子类异常在前。只会执行一个catch中的语句(多个catch的关系如同if 和else if)
也可以使用,没有捕获异常,但是会执行finally中的内容
try{
}
finally{
}
throws
语法:
public void method1() throws Exception {}
注意事项:
在重写方法时,该方法中子类抛出异常的范围不能小于父类
自定义异常
步骤:
- 定义类,继承Exception或者RuntimeException
- 继承Exception,是编译异常
- 继承RuntimeException,是运行时异常(通常情况下是继承运行时异常,可以使用默认的异常处理机制)
- 设置构造器
public class A {
public static void main(String[] args) {
if(true) {
// 手动抛出异常
throw new CustomException("自定义异常输出信息");
}
}
}
// 继承RuntimeException
class CustomException extends RuntimeException{
public CustomException(String message) {
super(message);
}
}