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

news/2025/3/3 8:22:17/

1. final 变量

  • 名称final 变量(常量)。

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

  • 分类

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

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

示例:
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)。

示例:
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 类。

  • 作用:不能被继承。

final class FinalClass {void display() {System.out.println("This is a final class.");}
}// class SubClass extends FinalClass { // 错误:不能继承 final 类
// }

4. final 参数

  • 名称final 参数。

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

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

5. final 与匿名内部类

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

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

示例:
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 字段在构造函数完成后是线程安全的,其他线程可以看到正确的初始化值。

示例:
class SafePublication {final int value;SafePublication(int value) {this.value = value; // 构造函数中初始化 final 字段}void printValue() {System.out.println(value);}

7. final 与不可变对象

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

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

示例:
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 定义全局常量。

示例:
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 局部变量匿名内部类中使用的局部变量必须是 finalfinal String msg = "Hello";
final 字段final 字段多线程安全,构造函数完成后不可变final int value;
不可变对象不可变对象通过 final 字段实现不可变性final class ImmutablePoint { ... }
静态常量静态常量通过 static final 定义全局常量public static final double PI = 3.14159;

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


http://www.ppmy.cn/news/1576244.html

相关文章

Hive-05之查询 分组、排序、case when、 什么情况下Hive可以避免进行MapReduce

一、目标 掌握hive中select查询语句中的基本语法掌握hive中select查询语句的分组掌握hive中select查询语句中的join掌握hive中select查询语句中的排序 二、要点 1. 基本查询 注意 SQL 语言大小写不敏感SQL 可以写在一行或者多行关键字不能被缩写也不能分行各子句一般要分行…

【再谈设计模式】备忘录模式~对象状态的守护者

一、引言 在软件开发过程中,我们常常会遇到需要保存对象状态以便在之后恢复的情况。例如,在文本编辑器中,我们可能想要撤销之前的操作;在游戏中,玩家可能希望恢复到之前的某个游戏状态。备忘录模式(Memento…

NIM平台开发基于提示工程的大语言模型(LLM)应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 课程介绍1.1 Goals1.2 content 2 提示词简介2.1 NVIDIA NIMs 用于提示工程2.2 OpenAI API 交互2.3 与 LangChain 交互实现聊天2.4 流式处理和批处理2.5 迭代式提示…

《白帽子讲 Web 安全:点击劫持》

目录 摘要: 一、点击劫持概述 二、点击劫持的实现示例:诱导用户收藏指定淘宝商品 案例 构建恶意页面: 设置绝对定位和z - index: 控制透明度: 三、其他相关攻击技术 3.1图片覆盖攻击与 XSIO 3.2拖拽劫持与数据…

大白话实战docker

为什么有docker 假设有这么一个场景,作为新时代的全栈工程师,某一天你接手一个项目,搭建好项目以后,还需要一台服务器,在它上面安装mysql、redis等项目中常用的中间件,于是你网上搜索Linux如何安装mysql、redis,照着网上的资料进行复制粘贴,结果发现老是运行不成功,好…

23种设计模式一览【设计模式】

文章目录 前言一、创建型模式(Creational Patterns)二、结构型模式(Structural Patterns)三、行为型模式(Behavioral Patterns) 前言 设计模式是软件工程中用来解决特定问题的一组解决方案。它们是经过验证…

vector 面试点总结

ps&#xff1a;部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器&#xff0c;支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…

在Ubuntu中,某个文件的右下角有一把锁的标志是什么意思?

在Ubuntu中&#xff0c;某个文件的右下角有一把锁的标志是什么意思&#xff1f; 在 Ubuntu&#xff08;或其他基于 GNOME 文件管理器的 Linux 发行版&#xff09;中&#xff0c;文件或文件夹的右下角出现一把“锁”标志&#xff0c;通常表示 你当前的用户没有该文件/文件夹的写…