
🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA后端开发学习者
❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、游戏、规划、程序人生
✨ 从来绝巘须孤往,万里同尘即玉京

文章目录
- [Java static入门:概述+静态变量特点与基础实战](#Java static入门:概述+静态变量特点与基础实战)
-
- [📝 文章摘要](#📝 文章摘要)
- 一、static关键字是什么?🤔
-
- [💡 小拓展:Java vs C语言的static(核心差异)](#💡 小拓展:Java vs C语言的static(核心差异))
- [二、静态变量:static修饰成员变量 📦](#二、静态变量:static修饰成员变量 📦)
- [✍️ 写在最后](#✍️ 写在最后)

Java static入门:概述+静态变量特点与基础实战
✨ 知识回顾
在进入Java面向对象的静态特性学习前,我们已经掌握了JavaBean类的设计、对象的创建与使用、成员变量和成员方法的基础用法。而static关键字是面向对象中实现数据共享、功能复用 的核心,也是从"面向对象"向"类级别的操作"过渡的关键,学好它能让我们的代码更简洁、更高效,这篇就从基础的static概述和静态变量开始,吃透静态特性的底层逻辑~
📝 文章摘要
- 核心摘要 :本文从
static关键字的基本定义出发,对比C语言与Java中static的差异,重点讲解静态变量的3大核心特点、2种调用方式,并结合Student类实战案例拆解静态变量的使用逻辑,帮你夯实静态特性的入门基础。 - 阅读时长:8分钟
- 适合人群&阅读重点
🎯 Java初学者:重点理解静态变量的"类共享、属于类、优先对象存在"三大特点,掌握基础调用方式。
📚 高校计算机专业学生:对比Java与C语言的static差异,理清语法底层的设计逻辑。
💻 初级开发工程师:掌握静态变量在实际开发中的使用场景,规避基础使用误区。
📖 面试备考者:熟记静态变量的核心特点,为后续内存原理和面试题打基础。
一、static关键字是什么?🤔
static翻译为静态 ,是Java中非常常用的修饰符 ,它可以修饰类的成员变量 、成员方法 ,后续还会学到它修饰代码块(静态代码块),其核心作用是将修饰的内容提升到「类级别」,脱离对象独立存在。
简单来说:被static修饰的内容,不再属于某个具体的对象,而是属于整个类,所有该类的对象都会共享这份内容。
💡 小拓展:Java vs C语言的static(核心差异)
很多学过C语言的同学会混淆static的用法,这里直接做对比,理清两者的核心区别,避免记混~
C语言中的static主要修饰局部变量、全局变量、函数 ,核心影响作用域 和生命周期,无"类级别"概念:
| C语言static修饰目标 | 作用域变化 | 生命周期变化 |
|---|---|---|
| 局部变量 | 不变(当前方法) | 变长(与程序一致) |
| 全局变量 | 变小(从所有文件→当前文件) | 不变(与程序一致) |
| 函数 | 变小(从所有文件→当前文件) | 不变(与程序一致) |
而Java中的static是面向类的修饰符 ,仅修饰类的成员(变量/方法/代码块),核心是将成员从「对象级别」提升到「类级别」 ,与C语言的设计初衷和使用场景完全不同,切勿混为一谈!
二、静态变量:static修饰成员变量 📦
当static修饰类的成员变量时,这个变量就被称为静态变量 (也叫类变量),与之对应的,没有被static修饰的成员变量称为非静态变量(也叫实例变量)。
2.1 静态变量的3大核心特点
这是静态变量的核心考点,必须熟记!✅
- 被该类所有对象共享:这是静态变量最核心的特点,一个类的所有对象共用同一个静态变量,修改其中一个对象的静态变量值,其他对象的该值也会同步改变。
- 不属于对象,属于类:静态变量是类的属性,不是某个对象的属性,即使没有创建任何对象,静态变量依然存在。
- 随着类的加载而加载,优先于对象存在 :Java程序运行时,类会先被加载到方法区,静态变量会跟着类一起初始化;而对象是后续通过
new关键字创建的,因此静态变量的创建时机早于对象。
2.2 静态变量的2种调用方式
静态变量有两种调用方式,推荐使用类名调用,更能体现其"类级别"的特性。
- 类名调用 (推荐):
类名.静态变量名 - 对象名调用 (不推荐):
对象名.静态变量名(Java语法允许,但会掩盖静态变量的本质,可读性差)
2.3 实战案例:Student类中的静态变量
结合实际场景理解:一个班级的所有学生共享同一个班主任,因此班主任姓名teacherName适合定义为静态变量,而学生的姓名name、年龄age是每个学生的独有属性,定义为非静态变量。
代码实现
java
// 学生类(JavaBean)
public class Student {
// 非静态变量:每个学生独有
String name;
int age;
// 静态变量:所有学生共享(班主任)
static String teacherName;
// 展示学生信息
public void show(){
System.out.println(name + "..." + age + "..." + teacherName);
}
}
// 测试类
public class TestStatic {
public static void main(String[] args){
// 方式1:类名调用静态变量(推荐)
Student.teacherName = "阿玮老师";
// 创建第一个学生对象
Student s1 = new Student();
s1.name = "张三";
s1.age = 23;
s1.show(); // 输出:张三...23...阿玮老师
// 创建第二个学生对象
Student s2 = new Student();
s2.name = "李四";
s2.age = 24;
s2.show(); // 输出:李四...24...阿玮老师
// 方式2:对象名调用静态变量(不推荐)
// s2.teacherName = "老王老师";
// s1.show(); // 输出:张三...23...老王老师(所有对象共享,同步改变)
}
}
运行结果分析
- 我们仅通过
Student.teacherName给静态变量赋值一次,两个学生对象的teacherName都获取到了该值,体现了所有对象共享的特点。 - 赋值静态变量时,我们还没有创建任何学生对象,体现了静态变量优先于对象存在的特点。
- 如果通过任意一个对象修改静态变量(如
s2.teacherName = "老王老师"),所有对象的该值都会同步改变,进一步验证了"共享性"。
2.4 静态变量vs非静态变量 核心对比
用表格清晰区分,避免使用时混淆:
| 对比维度 | 静态变量(类变量) | 非静态变量(实例变量) |
|---|---|---|
| 所属级别 | 属于类 | 属于对象 |
| 加载时机 | 随类加载而加载,优先存在 | 随对象创建而加载 |
| 共享性 | 所有对象共享 | 每个对象独有 |
| 调用方式 | 类名调用(推荐)/对象名调用 | 仅能对象名调用 |
| 内存存储 | 方法区的类静态区域 | 堆内存的对象区域 |
✍️ 写在最后
- 本文核心掌握
static关键字的基本定义,以及静态变量的3大特点+2种调用方式,这是静态特性的入门基础,后续的静态方法、静态代码块都是基于这个核心延伸的。 - 记住Java与C语言的static无直接关联,不要用C语言的逻辑理解Java的静态特性,避免走入误区。
- 实际开发中,当一个属性需要被所有对象共享时,就定义为静态变量,比如班级的班主任、系统的全局配置、工具类的常量等。
- 静态变量的调用优先使用类名调用,这是开发规范,能让代码的可读性更高,一眼看出这是类级别变量。
下一篇我们会深入底层,通过内存图解析静态变量的存储位置和访问逻辑,同时排查静态变量的常见使用错误,帮你从"会用"升级为"理解底层"~
❤️ 我是黎雁,专注Java基础与实战分享,关注我,一起从0到1吃透Java面向对象!
📚 后续文章预告:《Java静态变量底层:内存图解析+避坑指南》
💬 评论区交流:你在使用静态变量时遇到过哪些问题?或者有哪些疑惑,欢迎留言讨论~