有关 java 异常的 异常表现
场景说明:
有自定异常 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 ? 请高手解答