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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java冬冬 高级黑马   /  2013-5-6 23:17  /  1992 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 java冬冬 于 2013-5-7 21:55 编辑
  1. public class Demo {
  2.           public static void main(String[] args) {
  3.                     System.out.println(demo());
  4.           }
  5.          static boolean demo() {
  6.          try {
  7.               return true;
  8.          } finally {
  9.               return false;
  10.            }
  11.         }
  12. }
复制代码
结果是:false
求解释!!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
既然你用到了try {
              return true;
         } finally {
              return false;
           }
finally表示无论什么情况finally中的代码一定会执行的,所以  return false一定会执行,故返回的肯定是false啊
回复 使用道具 举报
本帖最后由 翟宝海 于 2013-5-6 23:45 编辑

demo()前面加boolean,表示这个函数返回的值只能为true或者false,两者只能择其一,而finally是一定会执行的,这种情况下,执行try的时候,返回了一个true,再执行finally的时候,返回的false就将之前的true覆盖了!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. public class Demo1 {
  2.           public static void main(String[] args) {
  3.                           boolean[] arr = new boolean[2];
  4.                 demo(arr);
  5.                           System.out.println(arr[0]+" "+arr[1]);
  6.           }
  7. /*下面函数有返回类型,只能返回一个,如果有finally,则必须执行,所以返回false,如果你传进来一个数组,就可以看到程序都try跟finally都执行了*/
  8.          static boolean demo(boolean[] arr) {
  9.          try {
  10.                          arr[0] = true;
  11.               return true;
  12.          } finally {
  13.                          arr[1] = false;
  14.               return false;
  15.            }
  16.         }
  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上英明。这样就可以看到数据的变化了。
回复 使用道具 举报
孙金鑫 发表于 2013-5-6 23:45

代码应该这样修改才能说明问题:
  1. public class Demo456 {
  2.         public static void main(String[] args) {
  3.                 boolean[] arr = new boolean[2];
  4.         demo(arr);
  5.         System.out.println(arr[0]+" "+arr[1]);
  6.         }
  7.        
  8.         @SuppressWarnings("finally")
  9.         static boolean demo(boolean[] arr) {
  10.         try {
  11.                 arr[0] = true;
  12.                 return arr[0];
  13.         }finally {
  14.                 arr[1] = false;
  15.              return arr[1];
  16.         }
  17.     }
  18. }
复制代码
运行的结果说明:确实是因为finally中的代码是必须执行的代码,而一个方法只能有一个返回值,所以finally中的返回值覆盖了try中的返回值。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
finally中的代码一定会执行,最终覆盖了try中的直
回复 使用道具 举报

如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马