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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 进击的蜗牛 中级黑马   /  2015-5-23 23:19  /  1091 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

提示: 该帖被管理员或版主屏蔽

18 个回复

倒序浏览
进击的蜗牛 发表于 2015-5-23 23:41
你的意思是我这个程序,finally是不会运行的吗?只运行try?

try和finally都会运行,try运行后后不是马上就return,而是运行finally代码块,如果finally中有return,就使用finally中的return~try中的return就没有运行~你可以给类设置一个静态属性,在try和finally中分别自加,看看try有没有运行~“规范规定了,当try和finally里都有return时,会忽略try的return,而使用finally的return。”
详细请看:http://www.cnblogs.com/averey/p/4379646.html

点评

给力!完美的解释!谢谢啦  发表于 2015-5-24 09:47
回复 使用道具 举报
不知道你想看到什么结果。finally不会运行,因为在try中函数已经返回了,也就是函数已经运行完了。不会运行。
回复 使用道具 举报
应该是return true
回复 使用道具 举报
public class FinallyDemo2 {
        public static void main(String[] args) {
                System.out.println(getInt());//结果打印30 所以会执行 用eclipse debug会发现 是在return 之前执行的;
        }

        public static int getInt() {
                int a = 10;
                try {
                        System.out.println(a / 0);
                        a = 10;
                } catch (ArithmeticException e) {
                        a = 20;
                        return a;
                       
                } finally {
                        a = 30;
                        return a;
                }
               
        }
}
回复 使用道具 举报
Huylens 发表于 2015-5-23 23:24
不知道你想看到什么结果。finally不会运行,因为在try中函数已经返回了,也就是函数已经运行完了。不会运行 ...

这个不会有结果的吗?不是应该先运行finally吗?我想要的结果就是证明先运行的是finally
回复 使用道具 举报
进击的蜗牛 发表于 2015-5-23 23:30
这个不会有结果的吗?不是应该先运行finally吗?我想要的结果就是证明先运行的是finally ...

那你就把结果输出来用System
另外,如果在finally之前有代码return 或者System.exit(0),finally是都不会执行的,这是特例
回复 使用道具 举报
tanzhixue 发表于 2015-5-23 23:30
public class FinallyDemo2 {
        public static void main(String[] args) {
                System.out.println(getInt()) ...

你们给我绕糊涂了。。。到底是先运行finally还是先运行try?
回复 使用道具 举报
Huylens 发表于 2015-5-23 23:34
那你就把结果输出来用System
另外,如果在finally之前有代码return 或者System.exit(0),finally是都不会 ...

你的意思是我这个程序,finally是不会运行的吗?只运行try?
回复 使用道具 举报
进击的蜗牛 发表于 2015-5-23 23:41
你的意思是我这个程序,finally是不会运行的吗?只运行try?

嗯嗯,是的
回复 使用道具 举报
本帖最后由 qq496099229 于 2015-5-24 00:10 编辑
进击的蜗牛 发表于 2015-5-23 23:30
这个不会有结果的吗?不是应该先运行finally吗?我想要的结果就是证明先运行的是finally ...

public class Linghsi {
        static int i=0;
        public static void main(String[] args) {
        //调用函数。
               
        zhengming();
      
}
public static boolean zhengming(){
        //在try中写入return        
        try{
                 i=0;  
                System.out.println(i);
                return false;
               
        }
        //添加finally
        finally{
                i=2;
                System.out.println(i);
                return true;         
        }
}
根据输出的顺序来判断你想要的
还想要其他结果的话,自己注释掉某些,再测试一下就好了 谢谢!祝你好运!

回复 使用道具 举报
fianlly块是一定会执行的,所以一般用于资源的关闭。当然,jvm跑到一半出了问题那是另外一回事
第二,java测试用system.out.println("字符串")
public static void main(String[] args) {
         //调用函数。
         zhengming();
}

public static boolean zhengming(){
         //在try中写入return
         try{
                 return false;
         }
         //添加finally
         finally{
                 System.out.println("我还是执行了");
                 return true;
         }
}
回复 使用道具 举报
水水更健康!
回复 使用道具 举报
学习学习。。。。
回复 使用道具 举报
andre 中级黑马 2015-5-24 09:22:06
15#
不会执行try里面return,当执行到turn false的时候,检测到有finally,就会去先执行finally,最后通过final的return结束
回复 使用道具 举报
写try,应该有catch捕捉啊
回复 使用道具 举报
进击的蜗牛 发表于 2015-5-23 23:39
你们给我绕糊涂了。。。到底是先运行finally还是先运行try?

try 进来 然后 catch 的a--->return 然后 finally的a-->return 然后 把值返回给函数结束 (最终返回的是finally的a)
回复 使用道具 举报
你定义的证明方法就是要获取一个bollean型的结果,try和finally两个代码块中,如果try中有return 是会先执行finally是没有错,但是你的finally中也有return ,这时候这个方法已经获取到了finally中的返回结果,很明显这个方法就调用结束了,你的try中的return没有执行到。

public static String  zhengming(){
        //在try中写入return
                String str="你好:";
        try{
               
               return str+"执行try";
        }
        finally{
                System.out.println("执行了finally");;
        }
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马