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);
    }
}
相关推荐
c++之路19 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2423 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮38 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken44 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl2 小时前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠2 小时前
Java进阶:CGLIB动态代理解析
java·开发语言
环流_2 小时前
HTTP 协议的基本格式
java·网络协议·http
爱滑雪的码农2 小时前
Java基础十三:Java中的继承、重写(Override)与重载(Overload)详解
java·开发语言