关于final的一点思考

Javafinal关键字,作用就是描述其为不变的,这个“其”可以是类、方法或变量或其他的(还有吗?)。被修饰的就是不能变的!

 

下面阐述几个例子:


final class Test1 {
public String string;
    Test1(String string) {
        this.string = string;
    }
}
 
public Test1 test1 = new Test1("hhhhhhh");


 阐述:修饰的类。产生什么效果呢?意思就是“这个类不能变了,不能被继承了。”

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

public final Set<String> threeNames = new HashSet<>();

阐释:修饰的引用。什么是引用呢?引用我觉得应该就是一个地址。所以意思就是“这个引用不能变了”==“这个地址不能变了”。具体效果:new HashSet<>()产生的对象的地址永远在threeNames里面存着了,谁也不能改变,比如threeNames = new TreeSet<>()(让new TreeSet<>()对象的地址替换掉threeNames原有的new HashSet<>()产生的对象地址。)是会报错的。但是可以threeNames.clear()是没问题的,因为这是对new HashSet<>()对象的操作,threeNames引用是final(不能变的),但是threeNames指向的对象可没有被final修饰,所以可以修改。这就是“不可变的对象引用”与“不可变的对象”之间的关系。


public final int anInt = 123;

 阐释:修饰的基本数据类型的变量。

修饰方法

  下面这段话摘自《Java编程思想》第四版第143页:

使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。

  注:类的private方法会隐式地被指定为final方法。

    另外,Java中的String类就是一个final


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值