final引发的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final引发的结果相关的知识,希望对你有一定的参考价值。

请看下面一道有关final修饰的作业题,此外我又画了一张内存分析图,若是有什么问题不要骂我,毕竟我还只是小虾米而已。

public class Test {
    public static void main(String[] args) {   
        final Person person = new Person("欧欧");
        person.name = "美美";
        person = new Person("亚亚");
        person1.say();     
    }
} 

class Person {
    public String name;
    public Person(String name) {
        this.name = name;
    }   
    public void say(){
        System.out.println("姓名:" + name);
    }
}

 执行结果如下:

技术分享

 

  由于Eclipse工具的强大性,使得我们刚把代码放进去,就看到了错误信息。分析这行报错代码,看看也没什么错误啊!这些是正常的对象创建,可问题出在了哪里呢?这个时候内心一定要镇静,千万不要摔电脑。当你通过回溯对象 person时,可以发现此对象创建的时候前面被加了final关键字进行修饰。我说呢?原来是不能再改变了,顿时松了一口气,终于解决了问题。可...可当你向下继续看时,尼玛 person.name = "美美" 怎么没报错啊!不是说不能改变了吗?这时忽然听到谁在说 "别急,别急,先看下面的图再说"。

技术分享

    思路总结:final修饰的对象,表示引用不可变,对象的内容可以改变以及赋值。


以上是关于final引发的结果的主要内容,如果未能解决你的问题,请参考以下文章

为啥代码片段在 matplotlib 2.0.2 上运行良好,但在 matplotlib 2.1.0 上引发错误

finally 块中的异常

Finally-操作返回值

片段对话框中的片段膨胀引发错误“片段未创建视图”

异常和TCP通讯

在 Finalizer 中处理 MemoryCache 会引发 AccessViolationException