黑马程序员技术交流社区
标题:
finally问题
[打印本页]
作者:
姚伟涛
时间:
2012-4-16 15:42
标题:
finally问题
public class TestEx {
public static int test(int x){
int i=1;
try{
System.out.println("try 块中 10/x之前");
i = 10 /x;
System.out.println("try 块中10/x之后");
return i;
}catch(Exception e){
i =100;
System.out.println("catch块......");
}finally{
i =1000;
System.out.println("finally块");
}
return i;
}
public static void main(String avg[]){
System.out.println(TestEx.test(1));
System.out.println(TestEx.test(0));
}
}
返回结果:
try 块中 10/x之前
try 块中10/x之后
finally块
10
try 块中 10/x之前
catch块......
finally块
1000
为什么System.out.println 方法输出的值不同 ?
作者:
liumeng
时间:
2012-4-16 15:52
在return 先执行返回10 在执行finally
而后便的先执行finally i=1000 之后返回1000
作者:
岳民喜
时间:
2012-4-16 16:23
System.out.println(TestEx.test(1)); x=1==>10/x不会发生异常 ,不执行catch处理
System.out.println(TestEx.test(0)); x=0==>10/x除数为零异常,执行catch处理语句
作者:
葛尧
时间:
2012-4-16 16:28
因为你try里面也定义了return i
第一次传参1 10/1 return 10 函数结束返回 但是还会执行一次finally (注意这里,finally里面 i =1000,但是传递前 函数结果已经返回给调用者了 )
第二次传参0 10/0 算术异常 被catch i =100,执行finally i =1000; 然后return i 函数结束返回
所以结果是10 和1000
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2