A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚伟涛 中级黑马   /  2012-4-16 15:42  /  1231 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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 方法输出的值不同 ?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
在return 先执行返回10 在执行finally
而后便的先执行finally i=1000 之后返回1000

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报

System.out.println(TestEx.test(1));    x=1==>10/x不会发生异常 ,不执行catch处理
   
System.out.println(TestEx.test(0));  x=0==>10/x除数为零异常,执行catch处理语句

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
因为你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      

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马