码迷,mamicode.com
首页 > 其他好文 > 详细

哎,又是一个final引发的问题

时间:2017-04-15 19:29:36      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:技术   int   分析   final   image   .com   初始化   ima   关键字   

啥都不说了,今天我就是和final关键字给杠上了,看题:

public class Test {
    final int age;
    public Test(){
        age=10;
    }
    
    public static void main(String[ ] args) {
        System.out.println(new Test().age);
    }
}

执行结果如下所示:

技术分享

 

思路分析:

 

今天忙活了一天有点累了,我也不扯那么多了,直接进入正题。我又做了个图,哈哈,不要打我,图这个东西可以声情并茂的解决问题,哦,不对,比喻错了,但是也可以解决问题!来看看执行顺序吧!这样就明白了。

技术分享

    前面不是说被final修饰过的不能发生改变吗?这句话一点也不错,确实没有发生改变,根据执行顺序我们可以看到,age属性的初始值就是10,因此执行结果是10很正常的。当代码改为如下时就能到达你心目中不能改变的要求啦!

    

public class Test {
    final int age;
    public Test(){
        age=10;
    }
    
    public void say(){
        age = 20; //执行错误,不能再次赋值
    }
    
    public static void main(String[ ] args) {
        System.out.println(new Test().age);
    }
}

   当我们添加say()方法为age属性重新赋值时,程序就会出错。因此不能发生改变的情况是发生在初始化之后的。

public class Test {
    final int age = 8;
    public Test(){
        age=10;
    }

    public static void main(String[ ] args) {
        System.out.println(new Test().age);
    }
}

  但是如上述情况中,age是直接就被初始化赋值了,因此在构造器中便不能再次赋值了。

    

哎,又是一个final引发的问题

标签:技术   int   分析   final   image   .com   初始化   ima   关键字   

原文地址:http://www.cnblogs.com/xixi16/p/6715052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!