哎,又是一个final引发的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哎,又是一个final引发的问题相关的知识,希望对你有一定的参考价值。
啥都不说了,今天我就是和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引发的问题的主要内容,如果未能解决你的问题,请参考以下文章