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

相关推荐
三品吉他手会点灯5 小时前
C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
c语言·开发语言·笔记·学习
huangdong_6 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天6 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录9176 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录9177 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
sunfdf7 小时前
知识学习场景下的智能应用实践大纲
学习
一杯奶茶¥8 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
在放️8 小时前
Python 爬虫 · 第三方代理接入与合规使用
开发语言·爬虫·python
不能只会打代码8 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|8 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端