前言:异常有 Throwable,Error和Exception

1.为什么要有Exception?

在下面的方法总,如果没有捕获异常,将导致异常直接抛给main方法处理。导致虚拟机直接kill该线程。在实际应用中导致闪退现象!

java 抛出Null java 抛出exception_捕获异常

2.处理异常的方法分为两中。

(1)通过try{}catch(){}来捕获异常。

(2)通过throws来抛出异常。


.通过try{}catch(){}来捕获异常,try{}用来表示运行时可能会出现异常,catch(){}用来表示遇到异常时的处理方式以及声明处理异常的类型。

增加异常捕获后,业务还可以继续向下运行。


java 抛出Null java 抛出exception_子类_02

运行顺序:

try语句块中的方法-->如果运行时出现异常-->catch块,此时try块中剩余的代码逻辑将不再执。

java 抛出Null java 抛出exception_java 抛出Null_03

3.在实际应用中,通常指定捕获具体的类型,但是有些类型我们也无法预料!此时我们通常在最后增加捕获Exception

java 抛出Null java 抛出exception_子类_04


注意:父类异常后抛出

4.虽然Java在程序结束时自动关闭所有打开的流,但是当使用完毕时,显示的关闭所有打开的留仍时一个好习惯。一个打开的留有可能会用尽系统资源,如果没有将打开的留关闭,当另一个程序试图打开另一个留时,可能会得不到需要的资源。为了保证流成功关闭,可将流关闭操作放入finally{}中。


通过throws抛出异常的原因:

1.程序执行错误,但是该异常不应该由当前代码处理,应该抛出给调用方处理。

2.遇到满足语法规定但是与业务逻辑不符。

目的:

当别的方法调用时,知道该方法可能会出现异常,当出现异常时,调用方对异常进行处理。


5.throw和throws

通常一个方法使用throw抛出什么异常,方法上应该使用throws定义该异常抛出以告知调用这需要处理的异常。但是,如果为非检查异常RuntimeException及其子类时,则不需要。

java 抛出Null java 抛出exception_父类_05

6.当重写父类中含有异常的方法时,应遵守以下规则

(1).不抛任何异常

(2).抛出部分异常

(3).抛子类异常

(4).不可抛出父类异常

(5).不抛出额外异常(没有继承关系)


7.获取异常信息的方法

e.printStackTrace();获取堆栈信息

e.getMessage();获取错误信息

e.getCause();获取异常原因