[align=center]Java出现异常丢失的两种情况[/align]
1.在finally中有return语句
程序输出:清理工作
由于在finally中有returne语句,从输出结果可以看出try语句块中“测试1”的异常被丢失。
2.在finally语句中有异常抛出
输出结果:
从输出结果中可以看出try语句块中c.f1()所抛出的异常被丢失。
从上面两个例子可以看出,在Java语言中如果处理不当存在了异常丢失。如果异常丢失在现实项目中发生,那会是糟糕的问题。因为异常丢失使得找出异常发生的地方很困难。
1.在finally中有return语句
package test_12;
public class FinallyTest {
public static void main(String[] args) {
try {
throw new Exception("测试1");
} finally{
System.out.println("清理工作");
return;
}
}
}
程序输出:清理工作
由于在finally中有returne语句,从输出结果可以看出try语句块中“测试1”的异常被丢失。
2.在finally语句中有异常抛出
package test_12;
public class FinallyDiscardException {
void f1() throws Exception1{
throw new Exception1();
}
void f2() throws Exception2{
throw new Exception2();
}
public static void main(String[] args) throws Exception1, Exception2 {
FinallyDiscardException c = new FinallyDiscardException();
try{
c.f1();
}finally{
c.f2();
}
}
}
class Exception1 extends Exception{
public String toString(){
return "测试异常————test1";
}
}
class Exception2 extends Exception{
public String toString(){
return "测试异常————test2";
}
}
输出结果:
Exception in thread "main" 测试异常————test2
at test_12.FinallyDiscardException.f2(FinallyDiscardException.java:10)
at test_12.FinallyDiscardException.main(FinallyDiscardException.java:19)
从输出结果中可以看出try语句块中c.f1()所抛出的异常被丢失。
从上面两个例子可以看出,在Java语言中如果处理不当存在了异常丢失。如果异常丢失在现实项目中发生,那会是糟糕的问题。因为异常丢失使得找出异常发生的地方很困难。