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修饰的对象,表示引用不可变,对象的内容可以改变以及赋值。

时间: 2024-10-26 11:32:26

final引发的结果的相关文章

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

啥都不说了,今天我就是和final关键字给杠上了,看题: public class Test { final int age; public Test(){ age=10; } public static void main(String[ ] args) { System.out.println(new Test().age); } } 执行结果如下所示: 思路分析: 今天忙活了一天有点累了,我也不扯那么多了,直接进入正题.我又做了个图,哈哈,不要打我,图这个东西可以声情并茂的解决问题,哦,不

Android FastJson与不规范JSON引发的血案

去公司实习了,没多少时间更博客了,距离上一篇博客也有一个来月了.看标题,应该可以看出,这篇文章是讲一个坑,以及如何填坑. 坑是什么?有两个坑,其一是fastjson的bug,其二是不规范的json字符串.如何填坑,不要着急,后文详细说明. 首先,我们看一个json字符串 { "doubleParam": 4.875, "floatParam": 2.76, "extra": { "doubleParam": 12.23, &q

Android Configuration change引发的问题及解决方法(转)

之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什么影响都没什么了解.见到的次数多了,总是掠过去心理总觉得不踏实,最终还是好好看了些介绍Congifuration Change的blog,在此做个梳理也不枉花了那么多时间.有疏漏和描述不准确的地方恳请指正. 前言 在研究Configuration Change之前我主要的疑问: 横竖屏切换对布局有影

【java解惑】final域变量初始化顺序

如下所示代码: public class Example049 { private final int overtime; public static final Example049 INSTANCE = new Example049();//1 private static final int CURRENT_YEAR = Calendar.getInstance().get( Calendar.YEAR);//2 private Example049() { overtime = CURR

Fragment重叠问题引发的思考

参考: http://stackoverflow.com/questions/16189088/overlapping-hidden-fragments-after-application-gets-killed-and-restored http://stackoverflow.com/questions/18274732/android-fragments-overlapping-issue?answertab=active#tab-top Fragment重叠问题相信很多开发者都遇到个这个

一个由内存泄漏引发的血案-Square

一个内存泄漏引发的血案-Square 原文链接 : A small leak will sink a great ship 原文作者 : Pierre-Yves Ricau 译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载! 译者 : chaossss 校对者: 这里校对者的github用户名 状态 : 完成 在开发 LeakCanary 时我发现一处奇怪的内存泄漏,为了搞清楚到底是什么原因导致这个问题我一边 Debug,一边在邮件中和小伙伴们沟通,最后形成了这篇博文.

AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver

1. 问题描述和起因 在使用Appium1.7.0及其以下版本的时候,我们可以直接使用如下代码来创建一个AppiumDriver实例进行对安卓设备的操作. driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); 但在把Appium包升级到当前最新的2.0.0版本的时候,这段代码会引发如下的一问题 当前的pom.xml相关设置如下:记得把1.7.0改成2.0.0或者是将来更高级版

一个贴子引发的对回调的思考

一个贴子引发的对回调的思考 网上看到一个贴子:http://topic.csdn.net/u/20080728/20/d60f719a-c103-44b8-8d0c-bc1c818b768a.html 觉得蛮有意思,在学习的工程中又引申出不少东西,真有趣!! 定义在类中方法之外的内部类分为实例内部类和静态内部类. 实例内部类自动持有外部类的实例的引用,即可以访问外部类的所有变量: 静态内部类可以直接访问外部类的静态成员: 定义在方法中的内部类叫局部内部类,该类只能访问被final修饰的局部变量和

从头认识java-17.4 详解同步(1)-由竞争条件引发的问题

这一章节我们来讨论一些同步的一些话题,由竞争条件引发的问题. 1.什么是竞争条件? 多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间,这种情形叫做竞争. 竞争条件发生在当多个进程或者线程在读写数据时,其最终的的结果依赖于多个进程的指令执行顺序. 举一个例子: 我们平常编程经常遇到的修改某个字段,这个操作在库存那里尤为突出,当两个单子同时修改库存的时候,这时就形成了竞争条件,如果不做同步处理,这里十有八九就是错误的了,因为如果两个单子同时出库,而出库的数量刚好大于库存数量,这里就会