小编典典

这是一个最喜欢的面试问题。带着这些问题,访问者试图找出你对对象的构造,方法,类变量(静态变量)和实例变量的理解程度。

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”关键字如何工作?(我仍然可以修改对象。)...相关推荐

  1. java final被覆盖_java中的final的使用

    1.final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为fin ...

  2. Java yield详解_Java 中的 yield 关键字

    从 Java 14 开始,yield 关键字已添加到 Java 语言中,用于实现 switch 表达式. 它用于从 switch 表达式中的 case 返回值. 例如: int x = switch ...

  3. 3DMAX基础建模 | 3Dmax修改器堆栈中的辅助工具

    今天给你解解闷,给你们聊一聊3Dmax修改器堆栈中的辅助工具怎么用? "锁定堆栈":当场景中有多个物体对象,如果我们对其中一个对象添加修改器,然后开启"锁定堆栈" ...

  4. 游戏修改器(Quick Memory Editor) - 是一款功能强大的游戏修改工具

    继上期介绍GameEnchanter游戏修改器和萝卜游侠之后,今天我再来介绍一款全新的游戏修改器.游戏修改器(Quick Memory Editor)是一款功能强大的游戏修改(作弊)工具.游戏修改器通 ...

  5. SQL 触发器 当修改TEST表中的F1字段时,同时根据条件修改F2字段

    Code --当外修改TEST表中的F1字段时,同时根据条件修改F2字段 ALTER TRIGGER [dbo].[updatetest1] ON [dbo].[TEST]  FOR INSERT,  ...

  6. java final内存机制_Java中的内存处理机制和final、static、final static总结

    装载自:http://blog.csdn.net/wqthaha/article/details/20923579 Java程序运行在JVM上,可以把JVM理解成Java程序和操作系统之间的桥梁,JV ...

  7. java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例

    可能使用到final的情况有3种:数据.方法和类. 一.final数据 对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法把它改为指 ...

  8. java final 详解_java中Final详解

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  9. JAVA的final类有哪些_Java中的final类

    下面列举几个Java包中的final类(): 1.java.lang包(列举所有final类) 包装类:Boolean,Character,Short,Integer,Long,Float,Doubl ...

最新文章

  1. asp.net模糊查询存储过程
  2. windows系统numpy的下载与安装教程
  3. RefreshListView中onItemClick点击错位
  4. PCB布局布线基础技巧问答_“Altium杯”Altium_Designer应用技巧
  5. oracle exp imp
  6. 对于高并发的理解及实践方案
  7. 【强化学习】A3C代码注释版本
  8. Java13的API_JAVA基础--JAVA API常见对象(其他API)13
  9. 拉格朗日乘子法的通俗理解
  10. 第三期 预测——2.输入和输出
  11. 并发编程之Lock接口
  12. android.jar 重新编译,android的framework.jar反编译,并重新编译
  13. php中strtotime函数,PHP中strtotime函数用法举例
  14. threejs中引入draco压缩后的模型
  15. TortoiseSVN简明教程
  16. <choose>标签的使用
  17. 黑色星期五移动购物销售额iOS设备占逾80%
  18. 新手lbw + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006
  19. RadioButtonList功能汇总
  20. Word2Vec原理简单解析

热门文章

  1. HDFS Shell基本操作总结
  2. 将华氏温度转化成摄氏度和绝对温度
  3. 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI
  4. 继续教育自动听课软件_荣耀小口哨app下载-华为荣耀小口哨软件v1.9.9 安卓最新版 - 极光下载站...
  5. 应用宝认领应用签名_腾讯应用宝认领应用步骤
  6. postman本地请求ip地址变成ipv6_华为认证-IPv6技术-ICMPv6介绍
  7. java executequery_java execute、executeQuery和executeUpdate之间的区别
  8. linux时间与日期函数,Shell中关于时间和日期的函数总结
  9. 基于python的贝叶斯分类算法_Python实现贝叶斯分类器
  10. linux qt交叉编译opencv,c-使用Qt和opencv交叉编译到Raspberry Pi