文章目录
1.异常机制(自我防御)
异常处理(exception handling):执行程序,当有错误发生,就可以终止程序,弹出相应的错误。这种反馈称为抛出异常(throwing)。
1.1 异常体系
1.2 异常分为Error & Exception
Error:Error类对象由虚拟机生成并抛出,大多数与代码编写者无关。(错误不可查,查了也没用,程序处理不了)(包括内存溢出,虚拟机错误等。程序对其不做处理)。
Exception(重点):是程序本身可以处理的异常。是运行时异常,可检查异常。
1.3 Exception----运行时候异常&可检查异常
运行时异常(RuntimeException):Exception的子类RuntimeException类及其子类表示“JVM常用操作”引发错误。(例如,使用空值对象引用抛NullPointerException、除数为零抛ArithmeticException、数组越界抛ArrayIndexOutOfBoundException)。
可检查异常(必须处理才能通过编译): 属于Exception类及其子类。
1.4 异常常用的五个关键字
try、catch、finally、throw、throws
1.4.1 try…catch…finally
异常由包含在try块中的语句捕获,catch进行处理。
try{
语句块;//检查语句块是否有异常
}catch(异常类型 e){
异常处理块;//根据异常类型进行捕获处理
}finally{//finally不是必须的
有无异常,都必须执行的程序;
}
1.4.2 throw
使用throw抛出异常对象。
File file3 = new File(file2,"aa.text");//创建一个.text文件
try {
file3.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
1.4.3 throws(潜台词:这活我干不了,你用的时候研究下)
throws在方法上声明抛出的可检查异常的类型。
public void run() throws IOException{
方法体;
}
如果一个方法被执行时可能生成某种异常,但不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
如果调用者也没处理,到运行到出错的为止,抛出异常(1、2、3、4、异常)。
1.4.4 自定义异常
- 继承异常类(Exception/RuntimeException)
public class MyException extends RuntimeException{
}
- 调用父类RuntimeException的有参构造方法
public MyException(String msg){
super(msg);
}
1.4.5 try…with…resource(打开了外部资源的时候用)
如果打开外部资源(文件、数据库链接、网络连接等),必须在使用完后手动关闭,因为它们不由JVM管理,无法享用GC,会导致连接池溢出等严重问题。
1.4.6 lombok简化异常(YYDS)
@SneakyThrows(添加都方法上面,可以代替try{}catch{}的工作)