java final修改器_Java中的“ final”关键字如何工作?(我仍然可以修改对象。)...
小编典典
这是一个最喜欢的面试问题。带着这些问题,访问者试图找出你对对象的构造,方法,类变量(静态变量)和实例变量的理解程度。
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 void setFoo(List foo) {
//this.foo = foo; Results in compile time error.
}
}
在上述情况下,我们为“ Test”定义了一个构造函数,并为其指定了“ setFoo”方法。
关于构造器: 构造函数可以调用只有一个使用每个对象的创建时间new关键字。你不能多次调用构造函数,因为构造函数的目的不是这样做的。
关于方法:可以根据需要多次调用方法(甚至永远不会调用),并且编译器知道该方法。
场景1
private final List foo; // 1
foo是实例变量。当我们创建Test类对象时,实例变量foo将被复制到Test类对象中。如果我们foo在构造函数内部分配,则编译器知道构造函数将仅被调用一次,因此在构造函数内部分配它没有问题。
如果我们foo在一个方法内部赋值,编译器就会知道一个方法可以被多次调用,这意味着必须多次更改该值,而final变量是不允许的。因此编译器认为构造函数是一个不错的选择!你只能一次将值分配给最终变量。
方案2
private static final List foo = new ArrayList();
foo现在是一个静态变量。当我们创建Test类的实例时,foo不会被复制到对象,因为它foo是静态的。现在foo不是每个对象的独立属性。这是Test类的属性。但是foo可以被多个对象看到,如果每个使用new关键字创建的对象最终将调用Test构造函数,则该构造函数会在创建多个对象时更改值(记住static foo并不是在每个对象中都复制,而是在多个对象之间共享)
场景3
t.foo.add("bar"); // Modification-2
以上Modification-2是你的问题。在上述情况下,你没有更改第一个引用的对象,而是在foo其中添加了允许的内容。如果你尝试将a分配new ArrayList()给foo引用变量,则编译器会抱怨。
规则如果已初始化final变量,则无法将其更改为引用其他对象。(在这种情况下ArrayList)
final类不能被子类化
final方法不能被覆盖。(此方法在超类中)
最终方法可以重写。(以语法方式阅读。此方法在子类中)
2020-02-28
java final修改器_Java中的“ final”关键字如何工作?(我仍然可以修改对象。)...相关推荐
- java final被覆盖_java中的final的使用
1.final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为fin ...
- Java yield详解_Java 中的 yield 关键字
从 Java 14 开始,yield 关键字已添加到 Java 语言中,用于实现 switch 表达式. 它用于从 switch 表达式中的 case 返回值. 例如: int x = switch ...
- 3DMAX基础建模 | 3Dmax修改器堆栈中的辅助工具
今天给你解解闷,给你们聊一聊3Dmax修改器堆栈中的辅助工具怎么用? "锁定堆栈":当场景中有多个物体对象,如果我们对其中一个对象添加修改器,然后开启"锁定堆栈" ...
- 游戏修改器(Quick Memory Editor) - 是一款功能强大的游戏修改工具
继上期介绍GameEnchanter游戏修改器和萝卜游侠之后,今天我再来介绍一款全新的游戏修改器.游戏修改器(Quick Memory Editor)是一款功能强大的游戏修改(作弊)工具.游戏修改器通 ...
- SQL 触发器 当修改TEST表中的F1字段时,同时根据条件修改F2字段
Code --当外修改TEST表中的F1字段时,同时根据条件修改F2字段 ALTER TRIGGER [dbo].[updatetest1] ON [dbo].[TEST] FOR INSERT, ...
- java final内存机制_Java中的内存处理机制和final、static、final static总结
装载自:http://blog.csdn.net/wqthaha/article/details/20923579 Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JV ...
- java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例
可能使用到final的情况有3种:数据.方法和类. 一.final数据 对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法把它改为指 ...
- java final 详解_java中Final详解
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- JAVA的final类有哪些_Java中的final类
下面列举几个Java包中的final类(): 1.java.lang包(列举所有final类) 包装类:Boolean,Character,Short,Integer,Long,Float,Doubl ...
最新文章
- asp.net模糊查询存储过程
- windows系统numpy的下载与安装教程
- RefreshListView中onItemClick点击错位
- PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
- oracle exp imp
- 对于高并发的理解及实践方案
- 【强化学习】A3C代码注释版本
- Java13的API_JAVA基础--JAVA API常见对象(其他API)13
- 拉格朗日乘子法的通俗理解
- 第三期 预测——2.输入和输出
- 并发编程之Lock接口
- android.jar 重新编译,android的framework.jar反编译,并重新编译
- php中strtotime函数,PHP中strtotime函数用法举例
- threejs中引入draco压缩后的模型
- TortoiseSVN简明教程
- <choose>标签的使用
- 黑色星期五移动购物销售额iOS设备占逾80%
- 新手lbw + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006
- RadioButtonList功能汇总
- Word2Vec原理简单解析
热门文章
- HDFS Shell基本操作总结
- 将华氏温度转化成摄氏度和绝对温度
- 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI
- 继续教育自动听课软件_荣耀小口哨app下载-华为荣耀小口哨软件v1.9.9 安卓最新版 - 极光下载站...
- 应用宝认领应用签名_腾讯应用宝认领应用步骤
- postman本地请求ip地址变成ipv6_华为认证-IPv6技术-ICMPv6介绍
- java executequery_java execute、executeQuery和executeUpdate之间的区别
- linux时间与日期函数,Shell中关于时间和日期的函数总结
- 基于python的贝叶斯分类算法_Python实现贝叶斯分类器
- linux qt交叉编译opencv,c-使用Qt和opencv交叉编译到Raspberry Pi