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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© superob123 中级黑马   /  2014-6-2 01:22  /  1485 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test
  2. {
  3.      public static void main(String[] args)
  4. {

  5. }
  6. }
复制代码

10 个回复

倒序浏览
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(test());
  6.         }

  7.         public static int test()
  8.         {
  9.                 try
  10.                 {
  11.                         return 1;
  12.                 }
  13.                 finally
  14.                 {
  15.                         return 2;
  16.                 }
  17.         }
  18. }
复制代码
回复 使用道具 举报
它打印结果为2,为什么呢
回复 使用道具 举报
finally,方法中无论前面有没有return,finally都会执行,所以是2
               
public static int test(int a) {//是6
               
       
                try {
                        a=5;
                       
                        return a;
                       
                       
                } finally {
                       
                        a=6;
                        return a;
                }
        }
之前看到一个例子,忘记细节了,好像场景是a是上面个return的值
回复 使用道具 举报
在执行    public static int test()
        {
                try
                {
                        return 1;
                }
                finally
                {
                        return 2;
                }
        }
}这一段代码时,try与finally都会执行,try返回的1,而finally返回的是2,(finally是必须执行代码),那么最终返回的是2.
回复 使用道具 举报
楼上正解
回复 使用道具 举报
因为无论try的代码段是否成功执行,都将执行finally的代码段,所以会以最后的一个return为准,返回2。
回复 使用道具 举报
finally后执行,覆盖了。
回复 使用道具 举报
可以这样理解finally必须执行,return1并没有结束函数,所以1没有被返回,在执行完finally后才返回

试试:
class T

{

        public static void main(String[] args)

        {

                System.out.println(test());

        }


        public static int test()

        {

                try

                {

                       
                        //System.exit(0);
                        return 1;

                }

                finally

                {

                        System.out.println("haha");

                }

        }

}
回复 使用道具 举报
try catch 语句块是对异常的处理 ,这里没有异常,所以你可以忽略他们直接看代码,首先是return 1,返回了一个常量1,然后是finally语句,一般finally语句是和try catch 语句块一起使用的,他的目的是使finally语句块中的内容一定会被执行,因为有时候你需要被执行的代码由于异常的原因无法执行到,finally 是一个保证。他是有些语句一定会被执行到,所以这时候 执行了finally  语句块 return 2  。这时候返回的常量2,覆盖了 常量1 。所以输出的是2而不是1.
回复 使用道具 举报
看看,学习学习......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马