异常
异常
异常:程序出现了不正常的情况。程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止。
注意:语法错误不算在异常体系中
graph TD; Throwable-->Error; Throwable-->Exception; Exception-->RuntimeException及其子类; Exception-->Checked异常及其子类;
运行时异常:(空指针异常,数组索引越界异常)
除RuntimeException之外所有的异常(checked异常):编译期必须处理的,否则程序不能编译通过。(日期格式化异常)
JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终JVM会做默认处理
- 把异常名称,原因及出现的位置等信息在控制台输出
- 程序停止执行
异常处理方式
两种方式:throws和try catch
throws 异常名称:
- 用在方法声明后,跟的是异常类名
如果是运行时异常可以省略不写。其他异常必须在方法后通过throws + 异常名称 显示声明。
throw new 异常对象名:
- 用在方法体内,跟的是异常对象名
意义
给方法的调用者一个反馈,而不是打印在控制台.
处理方式——try {} catch(){}
try{有可能出现异常的代码}catch(异常类 对象名){处理方式}
好处:可以让程序继续执行
try{}catch(){}catch(){}...出现多个异常。如果多个异常间存在子父类关系,那么父类一定要写在下面。
Throwable的成员方法:
- public String getMessage() 返回此throwable的详细消息字符串
- public String toString() 返回此可抛出的简短描述
- public void printStackTrace() 把异常的错误信息输出在控制台
自定义异常
- 定义异常类,见名知意
- 写继承关系
- 空参构造
- 带参构造