java学习--final

在 Java 中,final 是一个关键字,可以修饰类、方法、变量(包括局部变量、成员变量、静态变量),不同修饰场景下含义不同,核心是体现 "不可变" 或 "不可继承 / 重写" 的特性。

1. 修饰类

  • 含义 :被final修饰的类不能被继承,即无法派生子类。

  • 用途 :通常用于设计不可变的类(如StringInteger等包装类),保证类的安全性和稳定性。

  • 示例

    复制代码
    final class FinalClass {
        // 该类无法被继承
    }
    
    // 错误!无法继承final类
    // class SubClass extends FinalClass {}

2. 修饰方法

  • 含义 :被final修饰的方法不能被子类重写(override),但可以被重载(overload)。

  • 用途:防止子类修改父类方法的逻辑,保证方法行为的一致性。

  • 示例

    复制代码
    class Parent {
        public final void finalMethod() {
            System.out.println("父类final方法");
        }
    }
    
    class Child extends Parent {
        // 错误!无法重写final方法
        // @Override
        // public void finalMethod() {}
    
        // 允许重载
        public void finalMethod(int a) {
            System.out.println("重载final方法");
        }
    }

3. 修饰变量

final修饰变量时,变量成为常量 ,需遵循 "声明时初始化" 或 "构造器 / 代码块中初始化" 的规则,且初始化后值不可修改

(1)修饰局部变量
  • 局部变量被final修饰后,必须在使用前初始化,且值不可变。

  • 示例:

    复制代码
    public void testLocalFinal() {
        final int a; // 声明
        a = 10;      // 初始化(只能赋值一次)
        // a = 20;  // 错误!final变量不可重新赋值
    
        final int b = 20; // 声明时直接初始化
    }
(2)修饰成员变量(实例变量)
  • 成员变量被final修饰后,必须在声明时、实例初始化块中或构造器中初始化(三者选其一),且每个实例的该变量值固定。

  • 示例:

    复制代码
    class FinalVarDemo {
        // 方式1:声明时初始化
        final int num1 = 10;
    
        // 方式2:实例初始化块中初始化
        final int num2;
        {
            num2 = 20;
        }
    
        // 方式3:构造器中初始化
        final int num3;
        public FinalVarDemo() {
            num3 = 30;
        }
    }
(3)修饰静态变量(类变量)
  • 静态变量被final修饰后,必须在声明时或静态初始化块中初始化(不能在构造器中),且属于类的常量,全局唯一。

  • 通常命名规范为全大写,单词间用下划线分隔(如PI)。

  • 示例:

    复制代码
    class FinalStaticDemo {
        // 方式1:声明时初始化
        public static final double PI = 3.1415926;
    
        // 方式2:静态初始化块中初始化
        public static final int MAX_SIZE;
        static {
            MAX_SIZE = 100;
        }
    }

4. 修饰引用类型变量

  • final修饰引用类型变量时,引用本身不可变(即不能指向新的对象),但对象的内容可以修改。

  • 示例:

    复制代码
    final List<String> list = new ArrayList<>();
    list.add("Java"); // 允许修改对象内容
    // list = new LinkedList<>(); // 错误!引用不可指向新对象

总结

修饰目标 特性
不可继承
方法 不可重写(可重载)
变量 不可重新赋值(引用类型变量的对象内容可修改)

final关键字的核心作用是保证不可变性,常用于定义常量、防止类 / 方法被篡改,提升代码的安全性和可读性。

相关推荐
Highcharts.js12 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员14 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats14 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
min(a,b)14 小时前
学习第 4 天:面向对象与异常处理
python·学习·学习方法
一只小菜鸡..14 小时前
南京大学 操作系统 (JYY) 学习笔记:进程地址空间与内存“外挂”魔法
笔记·学习
我命由我1234515 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
tju新生代魔迷15 小时前
Verilog语言学习(一)
学习
一只小菜鸡..15 小时前
南京大学 操作系统 (JYY) 学习笔记:访问操作系统的对象与“一切皆文件”
笔记·学习
爱写代码的小朋友16 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华16 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python