异常的处理
Throwable: Error,Exception
Error处理不了 ,Exception可以捕获并处理
Exception: RuntimeException可以捕获也可以不捕获,其他异常必须主动捕获
?
public void someMethod() throws SomeExcepton /*声明该方法可能抛出的异常*/{
??? if(someCondition()) {
??????? throw new SomeException("错误原因");//构造并抛出异常对象,最终由try catch捕获
??? }
?
}
?
try {
??? someMethod();
} catch (SomeExcepton e) {
??? //异常处理代码;
}
?
try语句
try{...}语句指定了一段代码,该段代码就是一次捕获并处理例外的范围。在执行过程中,该段会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。如果没有例外产生,所有的catch代码段都被略过不执行。cathc语句
在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。在catch中声明的异常对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。??????? 例如:
???????????? getMessage()方法,用来得到有关异常事件的信息。
?????????? ? printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容。
finally语句
finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。通常在finally语句中可以进行资源的清除工作,如:?????????? 关闭打开的文件
?????????? 删除临时文件等
?
对于处理不了的异常,使用throws SomeException方法往外抛出,由调用它的程序处理,该调用者还可以继续向上抛出异常,交由它的上级处理
????? void f() throws FileNotFoundException,IOException {
?????????? ...
????? }
??
???? void f2() {
??????? try {
?????????? f();
??????? } catch (FileNotFoundExcepton e) {
???????????System.out.println(e.getMessage());
??????? }?catch (IOException e {
?????????? System.out.println(e.printStackTrace());
??????? }
?
???? }
?
其他
? void m(int i) throws ArithmeticException {
???? if(i == 0)
???????? throw new ArithmeticException("被除数为0");//直接抛出异常,并且用getMessage()时拿到的是"被除数为0"
?
? }
?
?
?