浅谈不变性

什么是不变性( Immutable)

​ 如果对象在被创建后,状态就不能被修改,那么它就是不可变的, 例子: person对象,age和name都不能再变

public class Person {
     final int age = 18;
     final String name = "Alice";
}
final的作用
  1. 类防止被继承、方法防止被重写、变量防止被修改
  2. 天生是线程安全的,而不需要额外的同步开销
3种用法:修饰变量、方法、类

final修饰变量: 被 final修饰的变量,意味着值不能被修改。如果变量是对象,那么对象的引用不能变,但是对象自身的内容依然可以变化。

final修饰:3种变量

赋值时机: 属性被声明为final后,该变量则只能被赋值一次。且一旦被赋值,final的变量就不能再被改变,无论如何也不会变

​ 1)final instance variable(类中的final属性)

​ 1. 在声明变量的等号右边直接赋值

​ 2. 构造函数中赋值

​ 3. 在类的初始代码块中赋值(不常用)

​ 4. 如果不采用第一种赋值方法,那么就必须在第2、3种挑一个来赋值,而不能不赋值,这是final语法所规定的

​ 2)final static variable(类中的 static final属性)

​ 1.在声明变量的等号右边直接赋值

​ 2.用 static初始代码块赋值,但是不能用普通的初始代码块赋值

​ 3)final local variable(方法中的final变量)

​ 1.在声明变量的等号右边直接赋值

​ 2.声明不赋值,使用前赋值

final修饰方法

  • ​ 构造方法不允许 final修饰
  • ​ 不可被重写,也就是不能被 override,即便是子类有同样名字的方法,那也不是 override,这个和 static方法是一个道理
  • ​ 扩展: static方法也不能被重写

final修饰类

​ 不可被继承, 例如典型的 String类就是final的,我们从没见过哪个类是继承String类的

注意点
  • final修饰对象的时候,只是对象的引用不可变,而对象本身的属性是可以变化的
  • final使用原则:良好的编程习惯,如果明确是不变,声明成final
不变性和final的关系

◆不变性并不意味着,简单地用final修饰就是不可变

◆对于基本数据类型,确实被 final修饰后就具有不变性

◆但是对于对象类型,需要该对象保证自身被创建后,状态永远不会变才可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值