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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangxiaosa 中级黑马   /  2017-3-18 23:56  /  909 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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中返回的值没有影响,如果是引用数据类型会有影响
               
*/

3 个回复

倒序浏览
回复 使用道具 举报
就是finally是最终值,如果之前有出现过,就会覆盖
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
还好能看懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马