疯狂java学习笔记四--异常管理
1.方法结束
-
1.1)方法正常结束,是指执行到return语句,void方法默认也是有return语句的. 1.2)方法非正常结束,是指执行不到return语句,或者虚拟机退出,或者抛出异常,即方法执行失败.
2.Java异常
-
2.1)java异常分类
受检查异常checked异常,该类型的异常是一定要处理的(例如IO异常) 非检查异常unchecked异常,可以处理,也可以不处理的异常(例如Sql异常)
-
2.3)异常的处理原则
谁调用,谁处理 即在哪个方法内去调用改方法,则由哪个方法去处理
-
2.4)异常处理的方式
try..catch..finally..去处理 方法+throws+类型 声明 throw new +实例 抛出 jvm虚拟机对异常的处理方式: 结束程序,打印异常堆栈信息. 如果方法调用者不处理,可以继续向上抛出,最后到main方法,到jvm去处理
-
2.5)异常链
java运行时遇到异常,会生成一个异常对象,运行环境会去检查有没有对应的处理器(或者处理机制), 如果有就调用对应的处理器去处理,没有就中断程序. java的异常调用链,可以定位到发生异常的堆栈,发生异常的代码,通过发生异常的地方向上冒泡, 直到main方法或者run方法(线程). 异常可以自定义和封装,以保证异常调用链的清晰,Throwable定义一个构造方法可以接受 或者包装Throwable的子类(一般在企业级应用中会封装异常,反馈到客户端的只是提示信息,后端日志 记录实际发生的异常)
-
2.6)异常的继承关系
Object Throwable Error Exception RuntimeException SqlException IOException OutOfIndexException NullPointException .... 一般的Error异常是关于硬件的,程序代码不可处理. Exception则是程序方面的,需要程序员去处理,否则会发生异常状况 一般自定义异常继承Exception类,调用Exception的构造方法
-
2.7)异常信息
异常的getMessage(),异常信息 printStrace(),异常的堆栈信息
3.try…catch…finally…块
java在try块中包含的代码,首先有变量一定是局部变量,在try块外面没有办法引用 try中包含的代码发生了异常那一行代码后面的代码不在执行,直接跳到对应的catch块去处理,如果没有对应的catch块,则中断程序. 如果发生异常但是在异常catch中可以执行到return方法,则所有执行的过的代码依然有效,整个方法是成功执行的,只是try块发生异常的代码所在行后面的代码无法执行. finally块一定会执行,并且是在return方法之前执行,如果try块中没有return方法,异常也捕获处理了,则在执行finally块之后,继续执行try..catch..finally后面的代码 catch是从最小的异常开始,捕获到之后,不会继续向下捕获,所以小的异常一定要写在前面. catch的异常是通过 instanceOf 来判断的是否是该异常及其子类的异常实例. catch到的异常可以在通过if()判断更明细异常处理方法
4.java7的特性
1.自动关闭资源,一般finally用来关闭资源(垃圾回收器无法回收的资源,一般是硬件的开销比如数据库连接,IO操作),在java7中这些接口都实现了AutoClosable的接口,可以通过try(资源代码){}不需要写finally来手动关闭资源. 2.多异常处理,可以catch(Exception e1 | Exception e2 ...) 这样的方式来在一个catch块中来处理多个异常,同时e1这样的有final修饰的不可改变的.
上一篇:
IDEA上Java项目控制台中文乱码