首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

错误处理中的一点困惑,请指点

2013-02-03 
异常处理中的一点困惑,请指点!本帖最后由 apollo_liiu 于 2013-01-23 17:08:11 编辑首先看一个方法: publi

异常处理中的一点困惑,请指点!
本帖最后由 apollo_liiu 于 2013-01-23 17:08:11 编辑 首先看一个方法:
 


public static void methoda()throws Exception {
try {
int b = 12;
int c;
for(int i=2;i>=-2;i--){
c = b/i;
System.out.println("i=" + i);
}
} catch (Exception e) {
System.out.println("catch ... "); 
throw new IOException();
}finally{
System.out.println("finally ... "); 
}
 }


该方法无返回值,在catch块中抛出一个IOException,Java编译器告诉我”当有非运行时异常出现时,必须捕获或声明它“,所以我在方法头处throws Exception。这个方法可以正确编译和运行。

问题来了,我把上面的方法稍微修改了一下,如下:

public static boolean methodb() {
 boolean ret = true;
try {
int b = 12;
int c;
for(int i=2;i>=-2;i--){
c = b/i;
System.out.println("i=" + i);
}
return true;
} catch (Exception e) {
System.out.println("catch ..."); 
ret = false; 
throw new IOException();
}finally{
System.out.println("finally ..."); 
return ret;
}
 }
 

该方法有返回值,在catch块中抛出一个IOException,但此时竟然不需要”捕获或声明“也能正常编译和运行。这是怎么回事呢? 异常 throw Exception
[解决办法]
引用:
本帖最后由 apollo_liiu 于 2013-01-23 17:08:11 编辑
            首先看一个方法:
 
Java code?123456789101112131415public static void methoda()throws Exception {    try {        int b = 12;        in……


因为你在finally快return了:
finally{
    System.out.println("finally ..."); 
    return ret;
}

[解决办法]
我猜是这个原因 有了finally估计是finally来扑捉了,你可以再没有返回值的finally语句中加个return ;这样编译器也不会强制要求我们抛异常 坐等楼下大神解释
[解决办法]
debug调试了一下,methoda中,在finally块执行完后会判断抛出的异常在大括号结束后会显示suspended exception
methodb中,finally块中直接return返回值,强制退出该方法的执行,返回到main方法,没有执行到finally块的后括号}就已经结束

热点排行