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 = "中国";
// 常量一般都是公开的
}

 

posted @   洛小依ovo  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示