目录
异常
异常就是不同寻常的事情
异常不总是错误,一切不同寻常的事情都是异常
Java 程序中的异常
Throwable(不寻常)
1.Error
错误(不可控)
2.Exception
异常(可控)
1.编译时异常
RuntimeException
2.运行时异常
SQLException
ClassNotFoundException
ArithmeticException
...
异常处理的方式
直接处理:
try代码块:包含的是可能引起一个或者多个异常的代码
遇到第一个异常进入catch块
catch代码块:包含着计划用于处理一个特定类型异常的代码
可以拥有若干个try-catch块,catch运行完后try-catch块结束
fianlly代码块:在方法结束之前必须执行代码块
无论是否异常,一定执行
finally代码块中的代码只写一次
异常处理方案:
try...catch、try...catch...finally、try...finally
try{
可能会发生的异常
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}...
[finally{
释放资源代码;
}]
注意:
1.catch 不能独立于 try 存在。
2.catch里面不能没有内容
3.在 try/catch 后面添加 finally 块并非强制性要求的。
4.try 代码后不能既没 catch 块也没 finally 块。
5.try里面越少越好。
6.try, catch, finally 块之间不能添加任何代码。
7.finally里面的代码最终一定会执行(除了JVM退出)
8.如果程序可能存在多个异常,需要多个catch进行捕获。
9.异常如果是同级关系,catch谁前谁后没有关系
如果异常之间存在上下级关系,上级需要放在后面
向上抛出:
如果你需要把自己捕获的异常传递给调用的程序,可以使用throw语句在catch块中把它
再次抛出,此时该方法的声明部分添加throws和异常类型
如果异常为运行时异常,则必须添加throws和异常类型
Java异常处理图
异常是一起处理好还是分开处理好?
根据实际的开发要求是否严格来决定。在实际的项目开发项目工作中,所有的异常是统一使用Exception处理还是分开处理,完全根据开发者的项目开发标准来决定。如果项目开发环境严谨,基本上要求针对每一种异常分别进行处理,并且要详细记录下异常产生的时间以及产生的位置,这样可以方便程序维护人员进行代码的维护。再次注意:处理多个异常时,捕获范围小的异常要放在捕获范围大的异常之前处理。
throw和throws的区别?
- throw:指的是在方法中人为抛出一个异常对象(这个异常对象可能是自己实例化或者抛出已存在的);
- throws:在方法的声明上使用,表示此方法在调用时必须处理异常。
垃圾回收
垃圾收集时可将分配给对象但不再使用的内存回收或释放的过程
Java将自动释放不再使用的内存
如果一个对象没有指向它的医用或将其赋值为null,则此对象将适于垃圾收集
finalize方法:
如果存在finalize()方法,它将在垃圾收集前被执行一次,而且每个对象仅执行一次,用于执行最终消亡之前的一些操作