finally中会丢失异常
class OneException extends Exception{
public String toString(){
return "One exception";
}
}
class TwoException extends Exception{
public String toString() {
return "TwoException";
}
}
public class Main {
void one() throws OneException{
throw new OneException();
}
void two() throws TwoException{
throw new TwoException();
}
public static void main(String[] args) throws Exception{
Main m = new Main();
try{
m.one();
}finally {
m.two();
}
}
}
结果,可以看到缺失OneException
Exception in thread “main” TwoException
at com.cool.Main.two(Main.java:1205)
at com.cool.Main.main(Main.java:1195)
这是一项相当严重的缺陷,因为它意味着一个违例可能完全丢失。而且就象前例演示的那样,这种丢失显得非常“自然
我们尽量避免此事发生,不在finally块中使用return
和throw