final关键字的工作原理?

  • 回答 (2)
  • 关注 (0)
  • 查看 (286)

在Java中,我们使用final关键字和变量来指定它的值不被改变。但是我发现你可以改变类的构造函数/方法中的值。再次,如果变量是static那么这是一个编译错误。

这里是代码:

import java.util.ArrayList;
import java.util.List;
class Test {
  private final List foo;
  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}

上面的代码工作正常,没有错误。

现在改变变量为static:

private static final List foo;
jkr94756jkr94756提问于
嗨喽你好摩羯座回答于

你总是被允许初始化一个final变量。编译器确保你只能做一次。

请注意,调用存储在final变量中的对象的方法与其语义无关final。换句话说:final只是关于引用本身,而不是引用对象的内容。

Java没有对象不可变性的概念; 这是通过精心设计的对象来实现的,是一个远非平凡的努力。

回答过的其他问题

系统盘装错了,更换系统盘应该怎么选择?

嗨喽你好摩羯座
是的,可以更换为windows,如果是同平台内:Linux-Linux;Windows-Windows 如linux换linux,windows换windows,可以直接在云主机控制台的重装系统按钮进行自主更换; 操作步骤:登录云主机管理中心控制台->选中需更换系统的云主机->更...... 展开详请

请问 :超过30s没有数据发送,主动断开连接,-1307这个是什么原因造成的???

嗨喽你好摩羯座
你说的-1307是下面这个吧: PUSH_ERR_NET_DISCONNECT = -1307, // 网络断连,且经多次重连抢救无效,可以放弃治疗,更多重试请自行重启推流 文档地址 SH_WARNING_SERVER_NO_DATA = 30...... 展开详请

iOS demo运行不了?

嗨喽你好摩羯座

依赖文件加载了吗?没有加载依赖文件一般都是缺少文件的提示,尝试加载以下依赖文件看一下:

libz.tbd
Accelerate.framework
Bugly.framework

GET调用为什么发生错误?

嗨喽你好摩羯座
60008错误,可通过以下方式定位解决: 1、如果请求在1s内响应60008错误码,请确认请求格式是否是标准HTTP格式; 2、确认dns配置是否正常,确保使用的是公网dns server; 3、推荐业务使用http长连接,并使用连接池,以提升网络质量;... 展开详请

wafer2-startup-master 对 mysql数据库 的增删改查?

嗨喽你好摩羯座

Knex.js是一个用于Postgres,MSSQL,MySQL,MariaDB,SQLite3,Oracle的SQL查询构建器,也就是你说的增删改查。Knex.js文档使用教程在这里,你可以学习一下使用办法:

http://knexjs.org/

不同的项目应该用哪种数据库更合适?该如何选择?

嗨喽你好摩羯座
要说应用场景首先要从其特点说起: 存储数据的格式:非关系型数据库的存储格式为文档、图片、key,value形式等,可以存储基础类型之外,还有集合或对象等各种格式。而关系型数据库只能存储基础类型。 查询速度:非关系型数据库将数据存储在缓存中,而关系型数据库将数据存储在硬盘中,关系型...... 展开详请

关于作者

所属标签

扫码关注云+社区

领取腾讯云代金券