你所不知道的final

简介: 你所不知道的final

@[toc]

什么是不变性

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

final的作用

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

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

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

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

修饰类:

  • final关键字修饰的类不能被继承
  • 在这里插入图片描述

注意点

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

不变性和final的关系

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

不可变的第二种情况

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

  • 在方法里新建局部变量,实际上是存储在每个线程私有栈空间,而每个栈空间不能被其他线程访问到,所以,不会出现线程安全问题,这就是著名的 “栈封闭” 技术
相关文章
|
4月前
|
消息中间件 Kubernetes NoSQL
c++11 关键字 override 与 final
c++11 关键字 override 与 final
|
1月前
|
Linux 数据安全/隐私保护
[HZNUCTF 2023 final]ezgo
[HZNUCTF 2023 final]ezgo
26 0
|
4月前
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
52 0
|
4月前
|
程序员
final
final
22 0
JAVA中static、final、static final的区别
JAVA中static、final、static final的区别
|
4月前
|
编译器 C++
C++新特性 override和final
C++新特性 override和final
|
存储 C++
详解static
static关键字是C++里一个很重要的关键字,本文将从无类和有类两个方面总结static关键字的作用。
|
Java
Java 权限修饰符(private、protected、public、默认、final、static)
Java 权限修饰符(private、protected、public、默认、final、static)
154 0
1. Final 有什么用?
Final(最终)一词可以在不同的语境中有不同的用途和含义。以下是对于"Final"的一般解释,以及一些常见的用途
64 0
private static final long serialVersionUID = 5461344781588144485L;是什么意思,后面的号码是如何生成的
serialVersionUID 用来表明类的不同版本间的兼容性。 序列化的时候,被序列化的类要有一个唯一标记。客户端和服务端必须需要同一个对象,serialVersionUID的唯一值判定其为同一个对象。 后面的号码是自动生成的,只要是唯一的就行,通常为1,此行语句去掉在练习的时候也没有什么影响,只不过此实例类会报一个警告。将鼠标放到警告上,选择第一个解决方案,就会重新加上此行语句,后面的数字和原先的可能会不一样。
168 0
private static final long serialVersionUID = 5461344781588144485L;是什么意思,后面的号码是如何生成的