【Java学习笔记】final关键字

final 关键字


一、final 关键字介绍

  • 1. final可以修饰类、属性、方法和局部变量

  • 2. final 的使用场景

    • (1)不能被继承时,可以使用final修饰

    • (2)类的某个属性不可以被更改,可以使用final修饰

    • (3)父类的某个方法不能被子类重写,可以使用final修饰

    • (4)某个局部变量不能被修改,可以使用final修饰

      • 补充说明:关于局部变量

        • 1. 可以是循环中的局部变量

        • 2. 可以是方法中的局部变量


二、final 关键字使用细节

  • (1)final 修饰的属性又叫常量,一般用 XX_XX_XX 来命名。

  • (2)final 修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一(选择一个位置赋初值即可)

    • 1. 在定义

    • 2. 在构造器

    • 3. 在代码块

  • (3)如果 final 修饰的属性静态的,则初始化的位置只能是

    • 1. 在定义

    • 2. 在静态代码块

    • 3. 不能在构造器中赋值

  • (4)final不能继承,但是可以实例化对象(可以创建一个 final 类的对象)

  • (5)如果类不是 final 类,但是含有 final 方法,则该方法不能重写,但是可以被继承

  • (6)代码规范:如果一个类已经是final类了,就没有必要再将该类中的方法修饰成final方法了

  • (7)final不能修饰构造器

  • (8)包装类(IntegerDoubleFloatBoolean等都是final),String也是final

  • (9)(重点!finalstatic往往搭配使用,效率更高,不会导致类加载(底层编译器做了优化处理)

    • 理解:为什么不会导致类加载?

      • 1. 编译器将 static final 的常量值直接存储到调用类的常量池中。

      • 2. 使用该常量时,JVM 直接使用常量池中的值不需要访问定义常量的类,自然就不会触发类的初始化(即类加载)。

代码示例:解释第 9 点

package final_;

public class main {
    public static void main(String[] args) {
        System.out.println(A.a);
    }
}

class A{
    public final static int a = 10;

    static {
        System.out.println("代码块被调用");
    }

    public A(){
        System.out.println("构造器被调用");
    }
}

// 输出结果
10

代码解析

finalstatic搭配使用修饰一个属性,调用该属性时不会导致类的加载,即不会执行代码块中的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackson凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值