黑马程序员技术交流社区

标题: 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