一.学习之前
在没学这个板块的时候,我们对于程序相关的异常处理大致是提示错误信息,而后退出程序。
例如:
输出:
(1)正常:
(2)不正常:
二.学习之后:
One: try…catch…finally语句
try{
//程序代码块
}
catch(Exceptiontype1 e)
{
//对ExceptionType1的处理
{
…
catch(Exceptiontype2 e){
//对ExceptionType2的处理
}
finally{
//程序代码块
}
先看try…catch语句块(例)(这个代码块可以单独使用,不用finally):
输出结果:
这里面由于try代码块中的年龄类型不符合,即为异常,则不执行try语句,转而执行catch中的相关内容,这里输出的是"grogram over",后面的一大片红就是异常的类型以及相关信息。
再看finally:
完整的语句中一定要包含finally语句(这里说的完整语句是try…catch…finally语句),无论程序中是否有异常或者无论之前的try…catch语句块是否被执行,都会执行finally语句块中的内容。但是除了以下四种情况:
(1)在finally语句中发生异常
(2)在前面代码中使用了System.exit()退出程序。
(3)程序所在县城死亡。
(4)关闭CPU;
Two:常见异常类
常见异常类表格:
这里仅写出冰山一角,写多了也没太大意义,况且大部分向我这样的人是记不住的,只要大致了解一下以至于以后看见这些异常不至于太陌生就行了。
Three:自定义异常
这里就很自由了,就算考试中有些异常记不住也可以通过自定义躲过一劫(当然了这种机会怕是不多)常见步骤大致如下:
(1)常见自定义异常类
(2)在方法中通过throw关键字抛出异常对象
(3)如果在当前异常的方法中处理异常,可以使用try…catch语句块进行捕获和处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常的方法的调用者中捕获并处理异常。
示例如下:
输出结果:
Four:使用通过使用throw或throws来抛出异常(不想在当前方法中处理这个异常)
(1)throws关键字(应用在声明方法中,用来指定方法中可能抛出的异常,多个异常可用逗号分隔):
输出结果:
使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
(2)使用throw关键字抛出异常(应用于方法体中,程在执行到throw语句后立刻停止执行,若想通过上一级的代码捕捉异常,则要用throws关键字在方法的声明中抛出异常;如果要捕获throw关键字中的异常,则必须用try……catch语句块来捕捉):
举一个例子(这里的异常信息顺序不能变):
错误一:
错误二:
错误三:
正常输出:
Five:运行时的异常
这里仅写出一小部分。
try…with…resources语句
此语句的作用是关闭try…catch语句中使用的资源。
(1)关闭一个资源
输出结果:
(2)关闭多个资源
输出结果:
三.使用原则
Java异常强制用户考虑程序的强健性和安全性。异常处理不应用来控制程序的正确流程,其主要作用是获取程序来运行时发生的异常并运行相应的处理。编写代码处理某个方法可能出现的异常时,可遵循以下几条规则:
(1)在当前方法声明中使用try…catch语句捕获异常。
(2)在一个方法被覆盖时,覆盖它的方法必须抛出与它相同的异常或异常子类。
(3)如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新的异常。