final 关键字在不同上下文中的用法及其名称

1. final 变量

  • 名称final 变量(常量)。

  • 作用:一旦赋值后,值不能被修改。

  • 分类

    • final 实例变量:必须在声明时或构造函数中初始化。

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

示例:
java 复制代码
class Example {
    final int instanceVar = 10; // final 实例变量
    final static int staticVar; // final 静态变量

    static {
        staticVar = 20; // 在静态代码块中初始化
    }

    Example(int value) {
        // instanceVar = value; // 错误:final 实例变量已经初始化
    }
}

2. final 方法

  • 名称final 方法。

  • 作用:不能被子类重写(Override)。

示例:
java 复制代码
class Parent {
    final void display() {
        System.out.println("This is a final method.");
    }
}

class Child extends Parent {
    // void display() { // 错误:不能重写 final 方法
    //     System.out.println("Trying to override final method.");
    // }
}

3. final

  • 名称final 类。

  • 作用:不能被继承。

java 复制代码
final class FinalClass {
    void display() {
        System.out.println("This is a final class.");
    }
}

// class SubClass extends FinalClass { // 错误:不能继承 final 类
// }

4. final 参数

  • 名称final 参数。

  • 作用:在方法内部不能修改参数的值。

示例:
java 复制代码
void printMessage(final String message) {
    // message = "New Message"; // 错误:不能修改 final 参数
    System.out.println(message);
}
复制代码

5. final 与匿名内部类

  • 名称final 局部变量(用于匿名内部类)。

  • 作用 :在匿名内部类中使用的局部变量必须是 final 或等效于 final(即不可变)。

示例:
java 复制代码
void printMessage() {
    final String message = "Hello"; // final 局部变量
    Runnable r = new Runnable() {
        public void run() {
            System.out.println(message); // 在匿名内部类中使用
        }
    };
    new Thread(r).start();
}

6. final 与多线程

  • 名称final 字段(用于多线程安全)。

  • 作用final 字段在构造函数完成后是线程安全的,其他线程可以看到正确的初始化值。

示例:
java 复制代码
class SafePublication {
    final int value;

    SafePublication(int value) {
        this.value = value; // 构造函数中初始化 final 字段
    }

    void printValue() {
        System.out.println(value);
    }

7. final 与不可变对象

  • 名称:不可变对象(Immutable Object)。

  • 作用 :通过将类的字段声明为 final,可以创建不可变对象。

示例:
java 复制代码
final class ImmutablePoint {
    private final int x;
    private final int y;

    public ImmutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

8. final 与静态常量

  • 名称:静态常量。

  • 作用 :通过 static final 定义全局常量。

示例:
java 复制代码
class Constants {
    public static final double PI = 3.14159; // 静态常量
    public static final String APP_NAME = "MyApp";
}

总结

类型 名称 作用 示例
final 变量 final 变量(常量) 值不可变 final int x = 10;
final 方法 final 方法 不能被子类重写 final void display() { ... }
final final 不能被继承 final class FinalClass { ... }
final 参数 final 参数 方法内部不能修改参数值 void print(final String message) { ... }
final 局部变量 final 局部变量 匿名内部类中使用的局部变量必须是 final final String msg = "Hello";
final 字段 final 字段 多线程安全,构造函数完成后不可变 final int value;
不可变对象 不可变对象 通过 final 字段实现不可变性 final class ImmutablePoint { ... }
静态常量 静态常量 通过 static final 定义全局常量 public static final double PI = 3.14159;

通过合理使用 final 关键字,可以提高代码的安全性、可读性和性能。

相关推荐
2603_965148117 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
jufeng13078 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk8 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_956319889 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
知无不研9 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
过期的秋刀鱼!9 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计10 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
cfm_291410 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
DeepVisionary11 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
C++ 老炮儿的技术栈11 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐