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);
    }
}
相关推荐
SL_staff8 小时前
制造业交付崩盘?用跨部门节点协同计划打通销售、生产与质量链路
java·开源·产品
文丑颜不良啊9 小时前
LeetCode2261~2280题目解析
java·leetcode
SL_staff10 小时前
告别规则黑盒:JVS-Rules 在金融风控中的可视化决策编排实践
java·产品·全栈
逃逸线LOF10 小时前
服务网关Gateway
java·运维·gateway
灿飞屋11 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
阡陌数智11 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
学长毕设13 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
SL_staff14 小时前
离散制造排程破局:JVS-APS 四步闭环落地实践(开发者视角)
java·产品·全栈
这个昵称不容易14 小时前
SpringBoot 美容院管理系统:232个Java文件315个接口,5套角色从预约到发货一整条链路
java·springboot·毕设
装不满的克莱因瓶15 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba