黑马程序员技术交流社区

标题: finally与return哪个先执行 [打印本页]

作者: yangxiaosa    时间: 2017-3-18 23:56
标题: finally与return哪个先执行
public class FinallyTest {
        static int x;
        public static void main(String[] args) {
                int y=test();
                System.out.println(x);
                System.out.println(y);
        }
        public static int test(){
                try{
                        x=10;
                        return x;//此时x=100;,但返回的值是10。
                }catch(Exception e){
                       
                }finally {
                        x=100;
                }
                return x;
        }
}
//最后的结果是y=10;x=100
//------------------------------------------------------------------------
class FinallyTest {
        static int x;
        public static void main(String[] args) {
                int y=test();
                System.out.println(x);
                System.out.println(y);
        }
        public static int test(){       
                try{
                        x=10;
                        return x;
                }catch(Exception e){
       
                }finally {
                        x=100;
                        return x;//在这里返回x
                }
               
        }
}
//最后结果是y=100,x=100
/*
        百度大神给的解释:
                1.如果finally代码块中没有return
                        在返回结果之前,先把结果(基本数据类型的值或引用数据类型的地址值)压到栈顶,等finally代码看执行完后,把栈顶的结果返回。
                2.如果finally代码块中有return
                        finally的return把自己要返回的结果压到栈顶,最后把栈顶结果返回。
                注意: 如果返回值是基本数据类型,那么finally中对变量的修改与try中返回的值没有影响,如果是引用数据类型会有影响
               
*/


作者: 小黄哥    时间: 2017-3-19 00:10
这些说的没毛病呀

作者: kevin0    时间: 2017-3-19 00:49
就是finally是最终值,如果之前有出现过,就会覆盖

作者: mrwalker    时间: 2017-3-20 11:25
还好能看懂




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