final 关键字使用场景

1. final 修饰变量

final 修饰的变量一旦赋值就不能再更改,通常用于定义常量。

java 复制代码
package com.example.demo1;

public class FinalVariableExample {
    // 静态常量,类加载时初始化
    public static final double PI = 3.14159;
    // 实例常量,对象创建时初始化
    public final int objectId;

    public FinalVariableExample(int id) {
        // 实例常量在构造方法中初始化
        this.objectId = id;
    }

    public static void main(String[] args) {
        FinalVariableExample example = new FinalVariableExample(1);
        System.out.println("PI 的值: " + PI);
        System.out.println("对象 ID: " + example.objectId);

        // 下面这行代码会报错,因为 PI 是 final 变量,不能重新赋值
        // PI = 3.14; 
    }
}

2. final 修饰方法

final 修饰的方法不能被子类重写,常用于确保方法的行为不被改变。

java 复制代码
package com.example.demo1;

class Parent {
    // final 方法,不能被重写
    public final void display() {
        System.out.println("这是父类的 final 方法");
    }
}

class Child extends Parent {
    // 下面这行代码会报错,因为不能重写父类的 final 方法
    // public void display() {
    //     System.out.println("尝试重写 final 方法");
    // }
}

public class FinalMethodExample {
    public static void main(String[] args) {
        Child child = new Child();
        child.display();
    }
}

3. final 修饰类

final 修饰的类不能被继承,常用于创建不可变类。

java 复制代码
package com.example.demo1;

// final 类,不能被继承
final class FinalClass {
    public void show() {
        System.out.println("这是 final 类的方法");
    }
}

// 下面这行代码会报错,因为不能继承 final 类
// class SubClass extends FinalClass {
// }

public class FinalClassExample {
    public static void main(String[] args) {
        FinalClass fc = new FinalClass();
        fc.show();
    }
}

4. final 修饰方法参数

final 修饰方法参数时,在方法内部不能修改该参数的值。

java 复制代码
package com.example.demo1;

public class FinalParameterExample {
    public void printValue(final int num) {
        System.out.println("传入的值: " + num);
        // 下面这行代码会报错,因为 num 是 final 参数,不能修改
        // num = 10; 
    }

    public static void main(String[] args) {
        FinalParameterExample example = new FinalParameterExample();
        example.printValue(5);
    }
}
相关推荐
奋斗的小乌龟5 小时前
动态创建Agent02
java
ZFSS5 小时前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
摇滚侠5 小时前
Java 零基础全套教程,集合框架,笔记 153-163
java·开发语言·笔记
nannan12325 小时前
后端技术栈梳理
java
L、2186 小时前
CANN算子开发调试实战:从“Segmentation Fault“到定位根因的完整流程
java·开发语言
索木木7 小时前
NCCL SHARP 和 TREE算法
java·服务器·算法
NiceCloud喜云7 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
超梦dasgg8 小时前
Java 生产环境 MQ 技术选型全解析
java·开发语言·java-rocketmq·java-rabbitmq
霸道流氓气质8 小时前
Spring AI 多工具链式调用(Tool Chain)极简实战
java·人工智能·spring
罗超驿8 小时前
22.深入剖析JDBC架构:从原生API到企业级数据交互核心
java·数据库·mysql·面试