读书人

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

发布时间: 2013-02-03 12:33:31 作者: rapoo

异常处理中的一点困惑,请指点!
本帖最后由 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块的后括号}就已经结束

读书人网 >J2SE开发

热点推荐