黑马程序员技术交流社区

标题: 代码出错了,求帮助 [打印本页]

作者: 进击的蜗牛    时间: 2015-5-23 23:19
提示: 该帖被管理员或版主屏蔽
作者: Huylens    时间: 2015-5-23 23:24
不知道你想看到什么结果。finally不会运行,因为在try中函数已经返回了,也就是函数已经运行完了。不会运行。
作者: 狙神自傲    时间: 2015-5-23 23:25
应该是return true
作者: tanzhixue    时间: 2015-5-23 23:30
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;
                }
               
        }
}
作者: 进击的蜗牛    时间: 2015-5-23 23:30
Huylens 发表于 2015-5-23 23:24
不知道你想看到什么结果。finally不会运行,因为在try中函数已经返回了,也就是函数已经运行完了。不会运行 ...

这个不会有结果的吗?不是应该先运行finally吗?我想要的结果就是证明先运行的是finally
作者: Huylens    时间: 2015-5-23 23:34
进击的蜗牛 发表于 2015-5-23 23:30
这个不会有结果的吗?不是应该先运行finally吗?我想要的结果就是证明先运行的是finally ...

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

你们给我绕糊涂了。。。到底是先运行finally还是先运行try?
作者: 进击的蜗牛    时间: 2015-5-23 23:41
Huylens 发表于 2015-5-23 23:34
那你就把结果输出来用System
另外,如果在finally之前有代码return 或者System.exit(0),finally是都不会 ...

你的意思是我这个程序,finally是不会运行的吗?只运行try?
作者: Huylens    时间: 2015-5-23 23:45
进击的蜗牛 发表于 2015-5-23 23:41
你的意思是我这个程序,finally是不会运行的吗?只运行try?

嗯嗯,是的
作者: qq496099229    时间: 2015-5-24 00:07
本帖最后由 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;         
        }
}
根据输出的顺序来判断你想要的
还想要其他结果的话,自己注释掉某些,再测试一下就好了 谢谢!祝你好运!


作者: 半世心修    时间: 2015-5-24 08:03
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;
         }
}
作者: ZSMAN    时间: 2015-5-24 08:44
进击的蜗牛 发表于 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 08:47
水水更健康!
作者: 绝版坏银    时间: 2015-5-24 09:09
学习学习。。。。
作者: andre    时间: 2015-5-24 09:22
不会执行try里面return,当执行到turn false的时候,检测到有finally,就会去先执行finally,最后通过final的return结束
作者: 914360849    时间: 2015-5-24 10:13
写try,应该有catch捕捉啊
作者: tanzhixue    时间: 2015-5-24 16:04
进击的蜗牛 发表于 2015-5-23 23:39
你们给我绕糊涂了。。。到底是先运行finally还是先运行try?

try 进来 然后 catch 的a--->return 然后 finally的a-->return 然后 把值返回给函数结束 (最终返回的是finally的a)
作者: 想要那片海    时间: 2015-5-24 21:33
你定义的证明方法就是要获取一个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");;
        }
        }




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