展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > Javafinal关键字用法、场景、面试题全解析

Javafinal关键字用法、场景、面试题全解析

final关键字修饰变量、方法、类三种场景。修饰基本类型变量值不可修改,修饰引用类型变量地址不可修改但对象内部属性可修改;修饰方法不能被子类重写;修饰类不能被继承。常与static搭配定义全局常量,保证代码安全与可读性。

在Ja va开发里,有一个关键字几乎天天都会碰到,但越是常见的东西,越容易藏着一些容易忽略的细节。没错,说的就是final。表面上看,它只是“最终的、不可修改的”这么简单,但实际用起来,变量、方法、类,三个场景各有各的讲究,新手和老手都容易在这些地方翻车。

这篇文章会从final的三个核心使用场景——修饰变量、修饰方法、修饰类——入手,配合实战代码和容易踩坑的细节,最后再补上几道高频面试题。不管你是刚入门,还是想巩固基础备战面试,读完应该会有收获。

这里先划个重点:final的核心思想是“一旦定义,不可改变”。但注意,这个“不可改变”在不同场景下,含义可是完全不一样的。接下来一个一个说清楚。

一、final关键字核心定义

final是Ja va里一个非访问修饰符,中文意思就是“最终的、不可变的”。它的作用很明确:一是保证代码的安全性,二是提升可读性和可维护性。什么意思呢?就是明确告诉其他人,这个变量、这个方法或者这个类,是不允许被随便动的。

具体来说,final可以修饰三种东西:变量、方法、类。下面逐一拆解。

二、final修饰变量(最常用,重点掌握)

final修饰变量时,含义是“该变量为常量,一旦赋值,无法再修改”。这个“不可修改”要分两种情况来看,基本数据类型和引用数据类型,完全是两码事,也是新手最容易搞混的地方。

2.1 修饰基本数据类型变量

先看基本数据类型,像int、char、double这些。一旦你用final修饰,变量的值就彻底锁死了,再想改?编译器直接报错。

public class FinalVariableDemo {
    public static void main(String[] args) {
        // 1. 局部变量(方法内):声明时直接赋值
        final int MAX_AGE = 120; // 常量命名规范:全大写,单词间用下划线分隔
        // MAX_AGE = 130; // 编译报错:无法为最终变量分配值
        // 2. 成员变量(类内、方法外):两种赋值方式,二选一
        final String NAME = "Ja va学习者"; // 方式1:声明时直接赋值
        final int SCORE; // 方式2:构造器中赋值(必须赋值,否则编译报错)
        // 构造器赋值
        SCORE = 95;
        // SCORE = 100; // 编译报错:已赋值,无法修改
    }
}

2.2 修饰引用数据类型变量

重点来了!final修饰引用类型,比如对象、数组,锁住的是那个“引用地址”——也就是这个变量不能再指向别的对象了。但对象本身内部是怎么样的,它管不着,你可以随便改里面的属性值。

public class FinalReferenceDemo {
    public static void main(String[] args) {
        // final修饰数组(引用类型)
        final int[] ARR = {1, 2, 3};
        ARR[0] = 100; // 允许:修改数组内部元素的值
        // ARR = new int[]{4,5,6}; // 编译报错:无法修改引用地址
        // final修饰对象(引用类型)
        final Person person = new Person("张三", 20);
        person.setAge(21); // 允许:修改对象内部属性
        // person = new Person("李四", 22); // 编译报错:无法修改引用地址
    }
}
// 自定义Person类
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // setter方法:修改对象内部属性
    public void setAge(int age) {
        this.age = age;
    }
}

2.3 常见使用场景(实战必备)

实际开发中,final变量的应用场景其实很广:

  • 定义全局常量:经常搭配static一起用,声明项目中固定不变的值,比如验证码字符池、配置参数;
  • 方法参数:防止方法内部意外修改参数的值,尤其是引用类型参数,避免篡改;
  • 局部变量:明确标识这个变量不会被修改,代码可读性一下子就上去了。

举个实战例子,比如验证码功能:

// 全局常量:验证码字符池(固定不变,用final+static修饰)
public static final String CODE_POOL = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 全局常量:验证码固定长度(不可修改)
public static final int CODE_LENGTH = 4;

三、final修饰方法(面试高频)

说完变量,再来看方法。final修饰方法时,意味着“该方法不能被子类重写”。注意,不能重写,但可以继承和调用,两者不冲突。

什么时候用?父类里那些逻辑已经固定、不希望子类随便改的方法,比如工具类的核心方法、通用逻辑,就可以用final锁住,防止子类重写后破坏设计意图。

实战示例

// 父类
class Parent {
    // final修饰方法,不能被子类重写
    public final void showInfo() {
        System.out.println("父类的固定逻辑,不可修改");
    }
    // 普通方法,可被子类重写
    public void commonMethod() {
        System.out.println("父类的普通方法");
    }
}
// 子类
class Son extends Parent {
    // 报错:Cannot override the final method from Parent
    // @Override
    // public void showInfo() {}
    // 允许:重写普通方法
    @Override
    public void commonMethod() {
        System.out.println("子类重写父类的普通方法");
    }
}

避坑提醒

两个小细节:第一,final方法不能被重写,但可以被重载(重载是方法名相同、参数列表不同,别搞混了);第二,private方法默认就是final的,因为子类根本访问不到,没必要再显式加final。

四、final修饰类(实战常用)

最后来看final修饰类。这个就很好理解了,final类就是“最终类”,不能再被继承。比如Ja va里的String、Math、System,全是final类。

为什么这么设计?要么是类的逻辑已经完整,不需要扩展;要么是为了安全,防止子类继承后篡改核心逻辑。比如String类,如果可以被继承,那字符串常量池的复用机制就可能被破坏,后果很严重。

实战示例

// final修饰类,不能被继承
final class FinalClass {
    public void show() {
        System.out.println("final类的方法");
    }
}
// 报错:Cannot inherit from final class FinalClass
// class SubClass extends FinalClass {}

重点补充

注意两点:第一,final类里的所有方法,默认都是final的(因为类都不能被继承了,方法自然也没法重写,所以不用再显式加final);第二,final类可以继承别的类,比如String继承自Object,但别人不能继承它。

五、final高频面试题(新手必背)

final是面试里的常客,下面这三道题几乎每次都会碰到,建议提前准备好。

面试题1:final、finally、finalize的区别?

  • final:修饰类、方法、变量,核心是“不可修改”,用于保证代码安全和可读性;
  • finally:异常处理的关键字,搭配try-catch使用,无论是否发生异常,finally块里的代码都会执行(除非JVM退出),通常用来释放资源;
  • finalize:Object类里的方法,用于垃圾回收前的资源释放,JVM会自动调用,但开发者几乎用不到,JDK9已经把它标记为废弃了。

面试题2:final修饰引用类型变量,为什么能修改对象内部的属性?

这个问题其实前面已经说清楚了。final修饰引用变量,限制的是引用地址不能变,也就是变量不能再指向新的对象。但对象本身是独立的,它内部的属性值不受final限制,该改还是能改。

面试题3:String类为什么是final的?

核心原因有两个:一是安全性,防止String被继承后篡改核心逻辑,避免字符串内容被意外修改(比如黑客改密码、改接口参数);二是效率,String类实现了常量池,final保证了字符串不可变,常量池才能正常复用,程序运行效率才能提上去。

六、总结(新手必记)

说到这,final的用法基本就讲完了。最后简单总结一下,方便记忆:

  • 修饰变量:基本类型,值不能改;引用类型,地址不能改,但对象内容可以改;
  • 修饰方法:不能被子类重写,但可以继承和重载;
  • 修饰类:不能被子类继承,类中方法默认是final;
  • 高频搭配:static+final,用来定义全局常量,项目里大量使用;
  • 核心作用:保证代码安全、提高可读性和可维护性。

final是Ja va基础里的重点,也是面试高频考点。建议多写几段代码练练手,尤其是“引用类型变量”的修饰细节,搞清楚了,以后踩坑的概率就小多了。

本文内容来源于网友投稿,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。