final使用

本文深入解析Java中的final关键字,涵盖final变量、方法和类的特性,以及其在编译和运行时的影响,如静态绑定、内存分配优化和并发安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final变量

final变量有成员变量和局部变量,在类成员中final经常和static一起使用,作为类常量使用。其中类常量必须在声明是初始化,final成员常量可以在构造函数初始化。

public class test {
	 public static	final int a;//报错
	 public static	final int b=1;

}

由static和final修饰的常量必须在声明时,初始化。由于static静态的代码是比构造器执行。
而只有final修饰的成员常量,可以在构造函数中初始化。
也就是说final修饰的成员常量,必须在构造器执行之后,这个值被赋值。简单来说就是在声明时初始化或者在构造方法中初始化。

public class test {
	 public final int a;
	 public static	final int b=1;
	 test(){
		 a=1;
	 }
}

final修饰的变量,只允许被赋值一次。例如引用只被赋值一次引用
但是不影响被引用对象的属性改变,只是我这个引用不能改变。
final修饰的方法,不能被子类重写
final修饰的类,不能被继承
final方法,在编译时已经静态绑定了,不需要运行时动态绑定。

final类

final类不能被继承,并且final类中的方法默认是final类型的

final的注意点
1.final成员变量必须声明在初始化或者构造器中初始化,否则编译出错
2.接口中声明的变量默认都是final
3.final方法在编译阶段绑定,称为静态绑定
4.final变量,在使用前必须赋值
final方法的好处
1.提高了性能,jvm在常量池中会缓存final变量
2.final变量在多线中并发安全,无需额外的同步开销
3.final方法时静态编译的额,提高了调用速度

final内存分配
当我们区调用一个函数时,有两部分时间:一部分是去寻找这个函数的位置的时间,另一部分是执行函数的时间。执行时间肯定是少不了的,这就得去看看如何节省寻找函数位置的时间,这就有了内嵌机制。

当我一个函数定义为final类型。我再调用这个函数的时候,编译器会把这个final函数给嵌入到调用的地方。这样就不需要去寻找这个函数了。
也就是在使用final修饰方法的时候,编译器会将被final修饰过的方法插入到调用者代码处。

本文属于自己参考文章和结合自己的总结来学习和巩固Java基础

参考文章:https://github.com/h2pl/Java-Tutorial/blob/master/docs/java/basic/1%E3%80%81%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%9F%BA%E7%A1%80.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值