24-异常
什么是异常
- 检查性异常
- 运行时异常
- 错误ERROR
异常体系结构
-
Java把异常当作对象来处理,并定义了一个基类Throwable作为所有异常的超类
-
错误Error:(灾难性的错误)
- 由Java虚拟机运行错误,一般会悬着线程终止。
- 虚拟机试图执行应用时,如:类定义错误,链接错误
-
异常Exception
- 运行时异常(RuntimeException):数组下标越界、空指针异常、算数异常、丢失资源、找不到类
- 非运行时异常:检查性错误
Java异常处理机制
- 异常处理五个关键字:try、catch、finally、throw、throws
int a = 1;
int b = 0;
try {//try监控区域
System.out.println(a / b);
}catch (Error e){//catch捕获异常 参数是想要捕获的异常类型(最高的是throwable)
//在监控去代码块,若出现ArithmeticException e异常,则执行catch代码块
System.out.println("Error");
}catch (Exception e) {//可以写多个catch识别是什么异常
System.out.println("Execption");
}catch (Throwable e) {//最高的放最后
System.out.println("Throwable");
}finally{//无论出不出异常,都会执行finally,一般处理善后工作
System.out.println("finally");
}
/*
输出:
Execption
finally
*/
//finally区域可以不写,但是IO流,资源,中关闭一般在finally中
}
- 快捷键:ctrl+alt+t --->关键字包围:if/else、while、for、try/catch等等*
public void test(int a,int b ){
if(b==0){//主动抛出异常 throw throws 通常在方法里用
throw new ArithmeticException();
}
}
//假设这个方法中,处理不了这个异常,可以在方法上抛出异常throws
public void test(int a,int b )throws ArithmeticException{
if(b==0){//主动抛出异常 throw throws 通常在方法里用
throw new ArithmeticException();
}
}
自定义异常
- 用户自定义异常类,只需要继承Exception类即可
经验总结
- 处理运行异常时,采用逻辑去合理规避同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch(Exception)来处理可以被遗漏的异常
- 对于不确定的代码,也可以加上try-catch处理潜在的异常
- 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
- 具体如何处理异常,根据不同业务需求和异常类型决定
- 尽量添加finally语句块去释放占用的资源,IOScanner