JavaSE--final关键字
一、final关键字
1、final概述
final是一个关键字,可以修饰变量、方法还有类等
final表示最终的,不可变的
2、final修饰的类
final修饰的类无法继承
final class A{ } // B类继承A类相当于给A类进行功能扩展, // 如果不希望别人进行扩展,进行继承,可以给A加final关键字 class B extends A{// 错误: }
3、final修饰的方法
final修饰的方法无法被覆盖,被重写
class C{ public final void doSome(){ System.out.println("C's doSome"); } } class D extends C{ public void doSome(){// 错误:不能覆盖 System.out.println("D's doSome"); } }
4、final修饰的变量
重点:final修饰的变量只能赋一次值
- final修饰的局部变量:
一旦赋值不能重新赋值
- final修饰的引用:
该引用只能指向一个对象,并且他只能永远指向该对象,无法再指向其他对象,并且指向的该对象不会被垃圾回收器回收,直到当前方法结束,才会释放空间
但是该对象内部的数据还是可以修改的哦,这没问题,
public class FinalTest01{ public static void main(String[] args){ int i = 100; i = 200; final k = 100; k = 300;// 错误:无法为最终变量k分配值 final m; m = 200;// 一次赋值可以 m = 500;// 错误: } }
public class FinalTest02{ public static void main(String[] args){ Person p1 = new Person(20); final Person p = new Person(30); p = new Person(10);// 错误:无法为最终变量p分配值 } } class Person{ int age; public Person(){ } public Person(int age){ this.age = age; } }
5、final修饰的实例变量
final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值
这个手动赋值,再变量后面赋值可以,在构造方法里面赋值也可以
public class FinalTest03{ public static void main(String[] args){ } } class User{ // final int age;// 错误 final double height = 1.8; // 以下这四行代码代码联合起来,weight也是赋值了1次 final double weight; public User(){ this.weiht = 60;// 只要我赶在系统赋默认值之前赋值就行 } public User(double d){ this.weight = d; } }
6、final修饰的实例变量一般添加static修饰
static fina联合修饰的变量称为“常量”,常量名建议全部大写,每个单词之间采用下划线衔接
因为既然使用了final修饰,说明该实例变量不会随着对象的变化而变化,那么100个对象在堆内存中就有100份相同的该实例变量,浪费空间,那我们加上static修饰,他就一直存在方法区,节省空间
class Chinese{ public final static String COUNTRY = "中国"; // 常量一般都是公开的 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?