final 使用

(1) final 变量(常量)

  • 局部变量:一旦赋值,不可修改

  • 成员变量:必须在声明时或构造方法中初始化

  • 静态变量:必须在声明时或静态代码块中初始化

final int x = 10;          // 局部 final 变量
x = 20;                    // 编译错误!不能重新赋值

class MyClass {
    final int y;           // final 成员变量
    final static int Z;    // final 静态变量

    static {
        Z = 100;           // 静态代码块初始化
    }

    public MyClass() {
        y = 20;           // 构造方法初始化
    }
}

关键点

  • 基本类型:值不可变(如 final int x = 10

  • 引用类型:引用不可变,但对象内部状态可能可变(如 final List<String> list = new ArrayList<>() 仍可 add()

(2) final 方法(不可重写)

  • 子类不能重写 final 方法

  • 用途:防止继承破坏关键逻辑(如 Object.getClass()

示例

class Parent {
    public final void show() {
        System.out.println("Parent's final method");
    }
}

class Child extends Parent {
    // @Override  // 编译错误!不能重写 final 方法
    public void show() { } 
}

注意private 方法隐式是 final 的,因为子类无法访问。

(3) final 类(不可继承)

  • 该类不能被继承(如 StringInteger 等核心类)

  • 用途:保证类的行为不被修改,增强安全性

final class ImmutableClass { }
// class SubClass extends ImmutableClass { }  // 编译错误!

总结

场景作用典型用例
final 变量防止重新赋值常量、方法参数、共享数据
final 方法禁止子类重写模板方法模式、关键算法
final 类禁止继承工具类、核心不可变类(如 String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值