场景说明:
  有自定异常 MyException1,MyException2 ,,,有一个统一的异常 OpException ;要求所有捕获自定义异常都统一到OpException 上来,在上层 统一 捕获处理 OpException便可。 
  代码 如下 :
public class MyException1 extends Exception{ public MyException1()
  {
  }   public MyException1(String msg)
  {
    super(msg);
  }   public MyException1(String msg, Throwable cause) {
    super(msg, cause);
  }   public MyException1(Throwable cause) {
    super(cause);
  }
}public class MyException2 extends Exception{  public MyException2()
  {
  }   public MyException2(String msg)
  {
    super(msg);
  }   public MyException2(String msg, Throwable cause) {
    super(msg, cause);
  }   public MyException2(Throwable cause) {
    super(cause);
  }
}
public class OpException extends Exception{ public OpException()
  {
  }   public OpException(String msg)
  {
    super(msg);
  }   public OpException(String msg, Throwable cause) {
    super(msg, cause);
  }   public OpException(Throwable cause) {
    super(cause);
  }
}异常处理场景 
public class  HandleException{ public HandleException(){

}
//方法捕获到OpException 同时将 异常信息 打印出来
//观察对情形 throwsException1 和 throwsException2 的不同输出
public void handleOpException(){
try{
//Object o = throwsException1(); // throwsException1方法的finally 语句快中没有对象返回,异常被正常捕获      
Object o = throwsException2();//throwsException2方法的finally 语句快中有对象返回,异常将不被捕获 (忽略了) ,这是为什么??
System.out.println(o.getClass());
System.out.println(" after throwsException ");
}catch(OpException e){
e.printStackTrace();
}
}

//方法 将 MyException1的抛出 转成 OpException
public Object throwsException1()throws OpException{
try{
throw new MyException1(" throw MyException1");
}catch(MyException1 e){
throw new OpException(" catch MyException1 and Convert to  OpException");
}finally{
System.out.println(" do finally and no object return ");
}
}
//方法 将 MyException2的抛出 转成 OpException
public Object throwsException2()throws OpException{
try{
throw new MyException1(" throw MyException2");
}catch(MyException1 e){
throw new OpException(" catch MyException2 and Convert to  OpException");
}finally{
System.out.println(" do finally and no return object ");
return new Object();
}
}

public static void main(String[] args){
new HandleException().handleOpException();
}
}根据程序的执行表现 存在疑问
//throwsException2方法的finally 语句快中有对象返回,异常将不被捕获 (忽略了) ,这是为什么??这是个jvm的bug ? 请高手解答 

解决方案 »

  1.   

    http://blog.csdn.net/hguisu/article/details/6155636 
      

  2.   

    finally快会在控制转移到它的新的目标代码之前执行.在finally块中使用return 则会把抛出的异常吃掉
      

  3.   


    在finally块中使用return 则会把抛出的异常吃掉
    你好 有这方面的官方文档说明吗?
      

  4.   


    在finally块中使用return 则会把抛出的异常吃掉
    你好 有这方面的官方文档说明吗?
    你的代码就证明了,代码最好说明问题。