java修饰符final

🧠 一句话理解 final

final 修饰的变量不可修改,方法不可重写,类不可继承。


🧱 用法 & 语法

✅ 1. final 修饰变量(常量)

final int x = 10;
x = 20; // ❌ 编译错误:不能修改 final 变量
🔹 特点:
  • 修饰基本类型变量:值不能改

  • 修饰引用类型变量:引用地址不能改,但对象内容可改

final StringBuilder sb = new StringBuilder("hello");
sb.append(" world");     // ✅ 允许修改内容
// sb = new StringBuilder(); // ❌ 不允许更改引用
✅ 场景:
  • 定义常量(通常配合 static 使用)

public static final double PI = 3.14159;

通常全大写命名,表示全局不可修改常量


✅ 2. final 修饰方法

class A {
    public final void show() {
        System.out.println("Hello");
    }
}

class B extends A {
    // ❌ 编译错误:不能重写 final 方法
    // public void show() { ... }
}
✅ 场景:
  • 不希望子类重写某个方法(如工具类、安全逻辑)

  • 保持方法逻辑的完整性(如 Object.equals() 自定义)


✅ 3. final 修饰类 

final class Animal {
    public void run() {
        System.out.println("Animal runs");
    }
}

// ❌ 编译错误:不能继承 final 类
// class Dog extends Animal {}
✅ 场景:
  • 类逻辑不希望被扩展(如 String 类就是 final 的)

  • 保证类的安全性与不可更改行为


✅ 4. final 修饰形参(方法参数)

public void print(final int num) {
    // num++; // ❌ 编译错误:不能修改参数值
    System.out.println(num);
}
✅ 场景:
  • 明确参数是只读的,提高代码可读性与安全性

  • 在匿名内部类或 Lambda 中引用局部变量时必须是“有效 final”


✅ 5. final 修饰局部变量(for循环、try块等)

final int a = 100; // ✅ 必须初始化,否则编译报错

📌 final 的常见使用场景总结

场景示例意图
定义常量public static final double PI不可修改的全局量
防止变量被意外修改final String name提高代码安全性与意图表达
禁止方法被重写final void log()保证父类逻辑不被子类改变
禁止类被继承final class UserService防止扩展,控制行为封装
匿名内部类中使用局部变量final int count = 10JDK 8 之后必须是“有效 final”

⚠️ 易错点 & 注意事项

易错点错误示例正确理解
1️⃣ 引用 final 不能改内容?final List<String> list = ...; list.add("x");✅ 可以改内容,不能换引用
2️⃣ final 方法是不是不能调用?final void print() {}✅ 可以调用,只是不能被重写
3️⃣ final 一定要加 static 才是常量?final double PI❌ 单独 final 是实例级常量,不是类常量
4️⃣ final 成员变量可以不初始化吗?final int a;❌ 必须初始化(可在构造器中赋值)

🧪 三种 final 使用

final class Constants {
    public static final int MAX_USERS = 100;
}

class App {
    public final void start() {
        System.out.println("App started");
    }
}

public class Main {
    public static void main(String[] args) {
        final StringBuilder sb = new StringBuilder("Hi");
        sb.append(" there"); // ✅ 允许修改内容
        System.out.println(sb.toString());
    }
}


final 是 Java 提供的语义约束机制 —— 用来创建只读变量不可继承类不可重写方法,提升程序的稳定性、安全性、可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星空下的DeppBing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值