Java 异常
异常继承体系
Throwable
所有错误和异常的基类
错误Error :比如数组空间开辟过大,错误一般是严重性的问题,必须修改程序才能继续运行
异常Exception:可以通过程序处理
运行时异常RuntimeException: 凡是方法内部抛出的是运行异常,方法声明上不需要throws
异常产生原因
- 创建了异常对象
- 将异常对象进行抛出,抛给方法的调用者
异常一旦抛出,后面程序不再执行
- 如果最后没有接受异常,将抛给JVM,虚拟机将异常信息以红色字体打印,并停止程序运行
throw关键字
throw 写在方法内,后面跟的对象必须是可抛异常
throw new Exception("空指针异常");
throws 关键字
throws 写在方法声明上,用于告知外界内部有异常,并向上处理
当throws方法调用时,必须处理异常,如果处理不了,也可以继续向上抛出
public static int getArr() throws Exception {
throw new Exception("空指针异常");
}
try catch finally 关键字
try {
// 被检测的代码(可能出现异常的代码)
} catch (异常类名 变量) {
// 异常处理方式
} finally {
// 必须要执行的代码
}
有了catch代码块后,异常即可被捕获并处理掉,处理完毕后,可以继续执行
多catch 要注意异常直接有继承关系时,异常捕获是有顺序的
finally 通常可以用于释放资源
RuntimeException
运行时异常RuntimeException: 凡是方法内部抛出的是运行异常,方法声明上不需要throws
设计原因:运行时异常是本不应发生的,一旦发生最好修改源代码解决,而不是程序处理,因为一旦发生运行时异常,后面的代码将没有执行的意义
异常在重写上的细节
父子类的重写方法,父类抛出了异常,子类可抛可不抛,但是如果要抛出异常,异常级别不能大于父类,平级也不行
如果父类没有抛出异常,子类也不能抛(为了多态调用)即使有异常,也只能自己手动try catch处理掉
常见方法
String getMessage()
异常信息的详细描述
toString()
异常信息的简短描述
void printStackTrace()
将异常信息追踪到标准错误流,是最详细的
自定义异常
自定义异常类,一般是继承Exception类,或者RuntimeException
加上构造器来传递异常信息给父类