1.在return中使用finally:在一个方法中,可以从多个点返回,finally子句总是会执行的。
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int i = 1;
try {
i++;
System.out.println("try:" + i);
return i;
} catch (Exception e) {
i++;
System.out.println("catch:" + i);
} finally {
i++;
System.out.println("finally:" + i);
}
return i;
}
2.异常的限制:当覆盖方法的时候,只能抛出在基类方法的异常。
class A {
public void fun() throws Exception {
}
}
class B extends A {
public void fun() throws IOException, RuntimeException {
}
}
异常限制对构造器不起作用,子类构造器依旧可以抛出父类构造器所没有声明的异常。派生类构造器不能捕获基类构造器抛出异常。
3.构造器:使用finally所有东西都能够被正确的清理,但涉及构造器内抛出异常,清理行为也许就不能正常工作了。
4.异常匹配:抛出异常时,异常处理系统会按照代码的书写顺序找出“最近”的处理程序,找到处理程序后将不继续查找。
class MyTest extends Exception {
}
class Task extends MyTest {
}
public class Test2 {
public static void main(String[] args) {
try {
throw new Task();
} catch (Task task) {
System.out.println("捕捉 Task");
} catch (MyTest myTest) {
System.out.println("捕捉 myTest");
}
System.out.println("----------");
try {
throw new Task();
} catch (MyTest myTest) {
System.out.println("捕捉 myTest");
}
}
}
5.异常使用指南:在知道该如何处理的情况下才捕获异常;进行少许修补,然后绕过异常发生的地方继续执行;把当前运行环境下能做的事情尽量做完,然后把相同(或不同)的异常重抛到更高层;终止程序,让类库和程序更加安全。
1468

被折叠的 条评论
为什么被折叠?



