有关 java 异常的 异常表现

j2eeoriented 2013-05-18 01:47:19
场景说明:
有自定异常 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 ? 请高手解答
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pangjingji 2013-05-19
  • 打赏
  • 举报
回复
引用 4 楼 j2eeoriented 的回复:
[quote=引用 3 楼 pangjingji 的回复:] finally快会在控制转移到它的新的目标代码之前执行. 在finally块中使用return 则会把抛出的异常吃掉
在finally块中使用return 则会把抛出的异常吃掉 你好 有这方面的官方文档说明吗?[/quote] 你的代码就证明了,代码最好说明问题。
j2eeoriented 2013-05-18
  • 打赏
  • 举报
回复
引用 3 楼 pangjingji 的回复:
finally快会在控制转移到它的新的目标代码之前执行. 在finally块中使用return 则会把抛出的异常吃掉
在finally块中使用return 则会把抛出的异常吃掉 你好 有这方面的官方文档说明吗?
pangjingji 2013-05-18
  • 打赏
  • 举报
回复
finally快会在控制转移到它的新的目标代码之前执行. 在finally块中使用return 则会把抛出的异常吃掉
pangjingji 2013-05-18
  • 打赏
  • 举报
回复
http://blog.csdn.net/hguisu/article/details/6155636
花木兰1闪21A 2013-05-18
  • 打赏
  • 举报
回复
太长了,看不下去。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧