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

相关推荐
im_AMBER16 分钟前
Leetcode 59 二分搜索
数据结构·笔记·学习·算法·leetcode
gihigo199823 分钟前
基于MATLAB的IEEE 14节点系统牛顿-拉夫逊潮流算法实现
开发语言·算法·matlab
田里的水稻24 分钟前
AI_常见“XX学习”术语速查表
人工智能·学习
合作小小程序员小小店37 分钟前
游戏开发,桌面%小游戏,贪吃蛇%demo,基于vs2022,c语言,easyX,无数据库
c语言·开发语言
Nan_Shu_6141 小时前
学习:Sass
javascript·学习·es6
天殇凉1 小时前
AC自动机学习笔记
java·笔记·学习
x***J3481 小时前
Python多线程爬虫
开发语言·爬虫·python
TechTrek1 小时前
Spring Boot 4.0正式发布了
java·spring boot·后端·spring boot 4.0
AA陈超1 小时前
从0开始学习 **Lyra Starter Game** 项目
c++·笔记·学习·游戏·ue5·lyra