1. 什么是异常
- 异常(Exception) :指程序运行中出现的各种状况 如文件找不到,网络连接失败,非法参数等
- 异常发生在程序运行期间,影响了正常的程序执行流程
简单分类
-
检查性异常
最具代表的是用户错误问题引起的异常,是我们无法预见的,编译时不能被忽略;
-
运行时异常:可以在编译时被忽略
-
错误ERRoR:不是异常,脱离控制,编译也检查不到的
2. 异常体系结构
-
Java定义了一个基类java.lang.Throwable 作为所有异常的超类
-
分为两大类:错误Error和异常Exception
-
Error和Exception的区别:
- Error通常是灾难性的致命的错误,是程序无法控制的,当出现这些异常时,Java虚拟机(JVM)一般会终止线程;
- Exception 通常情况下是可以被程序处理的,应尽可能的去处理这些异常
3. java 异常处理机制
-
抛出异常
-
捕获异常
-
异常处理的五个关键字
-
try , catch ,finally ,throw,throws
-
try ...catch ... finally 捕获多个异常,从小到大
try{//监控区域 }catch(Exception e){ //catch(想要捕获的异常类型)捕获异常 System.out.print("异常,除数不能为0"); }finally{//最后一定会输出 处理善后 可选,用于资源的关闭 System.out.print("finally"); }
-
throw 手动抛出异常对象
class Number{ int num; public void step(){ if(num<0){ throw new RuntimeException("数据错误!"); } } }
-
throws
-
”throws +异常类型“ 在方法声明处,指明方法执行时,可能会抛出的异常类型
-
此方式只是将异常抛给了方法的调用者,并未真正处理掉异常
class Person{ public void resgit() throws Exception{ System.out.print("输出"); } }
-
-
-
-
4.自定义异常类
- 继承现有的异常结构:RuntimeException 、Exception
- 提供全局常量 :serialVersionUID
- 提供重载的构造器
5.经验总结
-
处理运行时异常时,采用逻辑合理规避同时辅助使用try-catch 处理
-
在多个catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
-
尽量去处理异常,而不是简单的调用printStackTrace去打印输出
-
对于资源读写,添加finally语句块去释放资源