Java基础
final 在 Java 中有什么作用?
1、final修饰类:表示该类不能被继承
- 使用final修饰类的目的简单明确: 表明这个类不能被继承。
- 当程序中有永远不会被继承的类时, 可以使用final关键字修饰。
- 被final修饰的类所有成员方法都将被隐式修饰为final方法。
2、修饰方法:表示方法不能被重写
- 使用final修饰方法有两个作用, 首要作用是锁定方法, 不让任何继承类对其进行修改.
- 另外一个作用是在编译器对方法进行内联, 提升效率. 但是现在已经很少这么使用了, 近代的Java版本已经把这部分的优化处理得很好了. 但是为了满足求知欲还是了解一下什么是方法内敛.
- 方法内敛: 当调用一个方法时, 系统需要进行保存现场信息, 建立栈帧, 恢复线程等操作, 这些操作都是相对比较耗时的. 如果使用final修饰一个了一个方法a, 在其他调用方法a的类进行编译时, 方法a的代码会直接嵌入到调用a的代码块中.
3、修饰变量:表示变量只能一次复制以后值不能被修改(常量)
- 当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改. 但是该内存地址中保存的对象信息, 是可以进行修改的
final修饰基本数据类型时的内存示意图:
final修饰引用数据类型的示意图:
- 不难看出final修饰变量的本质: final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变.
- 引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 所以被final修饰的引用类型变量将永远指向一个固定的对象, 不能被修改; 对象的数据值可以被修改.