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);
    }
}
相关推荐
NE_STOP13 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园14 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆14 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
小宇宙Zz14 小时前
Maven依赖冲突
java·服务器·maven
swordbob14 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯15 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网15 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠15 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享15 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Flittly15 小时前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring