前言:异常有 Throwable,Error和Exception
1.为什么要有Exception?
在下面的方法总,如果没有捕获异常,将导致异常直接抛给main方法处理。导致虚拟机直接kill该线程。在实际应用中导致闪退现象!
2.处理异常的方法分为两中。
(1)通过try{}catch(){}来捕获异常。
(2)通过throws来抛出异常。
.通过try{}catch(){}来捕获异常,try{}用来表示运行时可能会出现异常,catch(){}用来表示遇到异常时的处理方式以及声明处理异常的类型。
增加异常捕获后,业务还可以继续向下运行。
运行顺序:
try语句块中的方法-->如果运行时出现异常-->catch块,此时try块中剩余的代码逻辑将不再执。
3.在实际应用中,通常指定捕获具体的类型,但是有些类型我们也无法预料!此时我们通常在最后增加捕获Exception
注意:父类异常后抛出
4.虽然Java在程序结束时自动关闭所有打开的流,但是当使用完毕时,显示的关闭所有打开的留仍时一个好习惯。一个打开的留有可能会用尽系统资源,如果没有将打开的留关闭,当另一个程序试图打开另一个留时,可能会得不到需要的资源。为了保证流成功关闭,可将流关闭操作放入finally{}中。
通过throws抛出异常的原因:
1.程序执行错误,但是该异常不应该由当前代码处理,应该抛出给调用方处理。
2.遇到满足语法规定但是与业务逻辑不符。
目的:
当别的方法调用时,知道该方法可能会出现异常,当出现异常时,调用方对异常进行处理。
5.throw和throws
通常一个方法使用throw抛出什么异常,方法上应该使用throws定义该异常抛出以告知调用这需要处理的异常。但是,如果为非检查异常RuntimeException及其子类时,则不需要。
6.当重写父类中含有异常的方法时,应遵守以下规则
(1).不抛任何异常
(2).抛出部分异常
(3).抛子类异常
(4).不可抛出父类异常
(5).不抛出额外异常(没有继承关系)
7.获取异常信息的方法
e.printStackTrace();获取堆栈信息
e.getMessage();获取错误信息
e.getCause();获取异常原因