异常
定义:异常指程序运行中出现的不期而至的各种状况
异常发生在程序运行期间,影响了正常的程序执行流程
Throwable是超类
分类:
检查性异常:用户错误或问题引起的异常
运行时异常
错误ERROR:脱离程序员控制的问题
Error
由Java虚拟机生成并抛出,大多数错误与代码编写者执行的操作无关
Exception
由程序逻辑错误引起的
Error与Exception的区别:
Error通常是灾难性的致命错误,程序无法控制和处理,一旦出现,JVM一般会选择终止线程Exception通常情况下可以被程序处理,并在程序中应该尽可能的去处理这些异常
异常处理机制
步骤:抛出异常,捕获异常
关键字:try、catch、finally、throw、throws
格式如下:
try{
//try监控区域
}catch(Error e){
//捕获后的操作
}catch(Exception e){
e.printStackTrace();//打印错误的栈信息
}catch(Throwable e){
........
}finally{
//程序无论出不出异常都会执行的代码,处理善后工作(可以不要finally)
}
假设要捕获多个异常,由小到大!
快捷生成异常处理:command+option+T(Mac) Ctrl+alt+t(Windows)
public void test() throws Exception(){//假设这个方法中处理不了这个异常,则在方法上抛出异常
if(...){
throw new Exception();//主动抛出异常,一般用在方法中使用
}
}
自定义异常
步骤:
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 若在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
- 在出现异常方法的调用者中捕获并处理异常
具体实现:
public class MyException extends Exception{
//传递数字大于10
private int detail;
public MyException(int a){
this.detail=a;
}
//toString:异常的打印信息
@Overrivide
public String toString(){
return "MyException{"+detail+'}';
}
}
这样MyException就能在别的异常处理机制中被throw、throws、catch了