异常
概述
就是程序出现了不正常的情况。
异常体系结构
异常分类
1.编译时异常
就是编译时出现的异常,必须显示处理,否则程序就会发生错误,无法通过编译
2.运行时异常
就是在程序运行时出现的异常,无需显示处理,也可以和编译时异常一样处理
3.二者区别
编译时异常 | 运行时异常 |
---|---|
都是Exception类及其子类 | 都是RuntimeException类及其子类 |
必须处理异常,否则无法通过编译 | 异常可以处理也可以不处理,对程序没有影响 |
JVM默认处理异常的方式
如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
- 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
- 程序停止执行
处理异常的方式
1.throws方式处理异常
①定义格式
public void 方法() throws 异常类名 {
}
②注意事项
- 这个throws格式是跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理
- 运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理
2.throw抛出异常
①定义格式
throw new 异常();
②注意事项
这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了
③throws和throw的区别
throws | throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
声明异常,调用该方法有可能会出现这样的异常 | 手动抛出异常对象,由方法体内的语句处理 |
3.try-catch方式处理异常 | |
①定义格式 |
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}finally(){
最终一定会执行的代码;
}
②执行流程
- 程序从 try 里面的代码开始执行
- 出现异常,就会跳转到对应的 catch 里面去执行
- 执行完毕之后,程序还可以继续往下执行
Throwable成员方法
常用方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |