黑马程序员技术交流社区

标题: 求解释!!!!!!! [打印本页]

作者: java冬冬    时间: 2013-5-6 23:17
标题: 求解释!!!!!!!
本帖最后由 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
求解释!!

作者: 一直在路上    时间: 2013-5-6 23:31
既然你用到了try {
              return true;
         } finally {
              return false;
           }
finally表示无论什么情况finally中的代码一定会执行的,所以  return false一定会执行,故返回的肯定是false啊
作者: 翟宝海    时间: 2013-5-6 23:38
本帖最后由 翟宝海 于 2013-5-6 23:45 编辑

demo()前面加boolean,表示这个函数返回的值只能为true或者false,两者只能择其一,而finally是一定会执行的,这种情况下,执行try的时候,返回了一个true,再执行finally的时候,返回的false就将之前的true覆盖了!
作者: 孙金鑫    时间: 2013-5-6 23:45
  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. }
复制代码

作者: 曹德君    时间: 2013-5-6 23:53
楼上英明。这样就可以看到数据的变化了。
作者: 郑雪    时间: 2013-5-7 08:11
孙金鑫 发表于 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中的返回值。
作者: 宋晓明    时间: 2013-5-7 09:00
finally中的代码一定会执行,最终覆盖了try中的直
作者: 黄玉昆    时间: 2013-5-7 21:51

如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2