你所不知道的final

@[toc]

什么是不变性

  • 如果对象在被创建后,状态就不能被修改,那么他就是不可变的
  • 具有不变性的对象,一定是线程安全的,我们不需要采取任何额外的安全措施,也能保证线程安全

final的作用

  • 被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);

3种用法:修饰方法,变量,类

修饰变量 :不能被改变 在这里插入图片描述 修饰方法:

  • 构造方法不允许修饰
  • 不可被重写,也就是不能被override,即便子类有同样名字的方法,那也不是override 在这里插入图片描述 修饰类:
  • final关键字修饰的类不能被继承
  • 在这里插入图片描述

注意点

  • final 修饰对象的时候,只有对象的引用不可变,而对象本身的属性是可以变的
  • final使用原则,良好的编程习惯

不变性和final的关系

  • 基本数据类型,确实被final修饰的就是不可变的
  • 但是对于对象类型,需要该对象保证自己被创建后,状态永远不变才可以

不可变的第二种情况

把变量写在线程内部,----栈封闭

  • 在方法里新建局部变量,实际上是存储在每个线程私有栈空间,而每个栈空间不能被其他线程访问到,所以,不会出现线程安全问题,这就是著名的 “栈封闭” 技术
end
  • 作者:yxl(联系作者)
  • 发表时间:2020-08-11 15:57
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论