news 2026/6/5 21:56:10

Java static 与 final 详解(简单易懂)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java static 与 final 详解(简单易懂)

Java static 与 final 详解(2025–2026 视角,简单易懂版)

static 和 final 是 Java 中最容易混淆的两个修饰符,但它们解决的问题完全不同。

用最生活化的比喻来记住:

修饰符生活比喻核心含义修饰对象能不能改什么时候初始化
static“全校共用的一台饮水机”属于,而不是某个对象变量、方法、代码块、内部类变量可以改类加载时(变量)
final“买回来就焊死的手机电池”不可再修改(终态、常量、最终实现)变量、方法、类变量一旦赋值不可改变量必须在定义或构造器中赋值

一、static 的四种主要用法(最常用排序)

  1. static 变量(类变量)
classCounter{staticintcount=0;// 全班共用一个计数器publicCounter(){count++;// 每 new 一个对象,count +1}}

特点:

  • 只在类加载时初始化一次
  • 所有对象共享同一份内存
  • 通过类名.变量访问(推荐)
  1. static 方法(类方法)
classMathUtil{publicstaticintmax(inta,intb){returna>b?a:b;}}// 调用方式MathUtil.max(3,7);// 不需要 new 对象

特点:

  • 不能访问非静态成员(this、实例变量、普通方法)
  • 常用于工具类(Arrays、Collections、Math)
  1. static 代码块(类初始化块)
classConfig{staticStringurl;staticintport;static{// 只执行一次,通常用来加载配置文件、初始化复杂静态变量url="jdbc:mysql://localhost:3306/test";port=8080;System.out.println("静态代码块执行了");}}

执行时机:类第一次被主动使用时(new、调用静态方法、访问静态变量等)

  1. static 内部类(静态嵌套类)
classOuter{staticclassStaticInner{voidsay(){System.out.println("我是静态内部类");}}}// 使用Outer.StaticInnerinner=newOuter.StaticInner();

与普通内部类的最大区别:不依赖外部类实例,可以独立创建

二、final 的四种主要用法

  1. final 变量(最常见)
finalintMAX_SIZE=100;// 常量(推荐全大写+下划线)finalStringNAME;// 声明时不赋值也没关系NAME="张三";// 但必须在构造器结束前赋值// final 引用类型:引用不能改,对象内容可以改finalList<String>list=newArrayList<>();// list = new ArrayList<>(); // 错!不能重新指向新对象list.add("苹果");// 对!内容可以改

记住口诀:final 修饰引用 → 地址不可变,内容可变

  1. final 方法(不能被子类重写)
classAnimal{finalvoidbreathe(){System.out.println("呼~吸~");}}classDogextendsAnimal{// void breathe() { } // 编译错误!不能重写 final 方法}

常见场景:模板方法模式中不想让子类改动核心步骤

  1. final 类(不能被继承)
publicfinalclassString{...}// Integer、Long、Double、Math 等核心类都是 final 的

意义:防止被恶意继承、保证不可变性、安全性

  1. final + static组合(最常见的常量写法)
publicclassConstants{publicstaticfinalintPAGE_SIZE=20;publicstaticfinalStringDEFAULT_CHARSET="UTF-8";}

三、static 与 final 组合时的几种典型写法对比

写法含义是否可修改访问方式典型场景
static int a = 10;类共享变量可以类名.a计数器、全局配置
final int b = 20;实例常量(每个对象一份)不可对象.b对象唯一标识、创建时确定值
static final int c = 30;全局常量(最常见)不可类名.c配置常量、魔法值替代
final static int d;语法允许,但必须在静态块或定义时赋值不可类名.d

四、常考易错点(面试/调试高频)

  1. static 方法里能不能用 this / super?
    不能,因为 this 代表当前对象,而静态方法不依赖对象

  2. final 局部变量可以不初始化吗?
    → 可以,但使用前必须赋值(编译器强制检查)

  3. static final 变量在类加载时初始化吗?
    → 是的,但如果是复杂表达式,会在静态代码块中完成

  4. 接口里的变量为什么默认是 public static final?
    → 接口不能有状态,只能定义常量,所以自动加上这三个修饰符

  5. final 数组 / List 内容能改吗?
    !因为 final 只保护引用不被重新赋值

finalint[]arr={1,2,3};arr[0]=100;// 合法// arr = new int[5]; // 非法

五、总结口诀(背下来答题快)

  • static→ “全班/全校共用一份,类加载时准备好”
  • final→ “焊死、定死、改不了、子类不能覆盖”
  • static final→ “全局常量,最推荐的常量写法”
  • static 方法里没有 thisfinal 变量必须初始化一次

你现在最容易混淆的是哪一部分?

  • static 和 final 一起用时的初始化顺序?
  • final 引用类型的内容修改?
  • static 代码块和构造代码块的区别?
  • 接口常量和类常量的写法差异?

告诉我,我可以继续给你更针对性的例子或对比。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 3:56:38

收藏!华为员工转岗大模型拿百万年薪,小白/程序员入门LLM必看指南

近日&#xff0c;我在技术社群刷到一则刷屏热议帖&#xff1a;一位华为在职员工&#xff0c;从传统开发岗成功转型大模型算法岗后&#xff0c;高调晒出百万年薪收入条&#xff0c;还毫无保留地分享了自己的转岗全流程心得。这则帖子瞬间在程序员圈引爆讨论——评论区里&#xf…

作者头像 李华
网站建设 2026/6/2 10:27:57

基于vue3实施部门权限分配及审批的监管系统-开题报告 黄耀兴202006050071 (2)

目录研究背景与意义系统目标技术选型系统模块设计创新点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 部门权限分配及审批监管系统在现代企业管理中具有重要作用。随着企业规模扩…

作者头像 李华
网站建设 2026/5/30 1:35:43

基于Vue技术的营养食品搭配系统的设计与实现任务书

目录系统背景与目标技术选型核心功能模块关键实现技术预期成果备注项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统背景与目标 现代人对健康饮食需求日益增长&#xff0c;但缺乏专业营养知识。该系统基…

作者头像 李华
网站建设 2026/6/3 10:07:37

域控制器架构十年演进

域控制器&#xff08;Domain Control Unit, DCU&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是汽车电子电气架构&#xff08;EEA&#xff09;从“诸侯割据”走向“高度中央集权”的剧变史。 它完成了从上百个分散的 ECU 到几个核心“域”的集成&#x…

作者头像 李华
网站建设 2026/6/1 6:07:31

视觉感知十年演进

视觉感知&#xff08;Visual Perception&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“识别照片里的像素”向“重建实时三维物理世界”的跨越。 视觉感知是自动驾驶的“眼睛”。这十年间&#xff0c;视觉算法完成了从 2D 到 3D、从局部到全局、从“…

作者头像 李华
网站建设 2026/5/28 19:06:54

什么是护网行动?

随着企业上云加速&#xff0c;护网行动的战场已延伸至云原生环境。多云架构的安全割裂、容器逃逸风险、Serverless 无服务器攻击等新挑战&#xff0c;要求防御体系从 “边界防护” 转向 “云原生全链路防护”。本文拆解云原生场景的核心风险与攻防技巧。 一、云原生环境三大核…

作者头像 李华