Java static入门:概述+静态变量特点与基础实战

🏠个人主页:黎雁

🎬作者简介:C/C++/JAVA后端开发学习者

❄️个人专栏:C语言数据结构(C语言)EasyXJAVA游戏规划程序人生

✨ 从来绝巘须孤往,万里同尘即玉京

文章目录

  • [Java static入门:概述+静态变量特点与基础实战](#Java static入门:概述+静态变量特点与基础实战)
    • [📝 文章摘要](#📝 文章摘要)
    • 一、static关键字是什么?🤔
      • [💡 小拓展:Java vs C语言的static(核心差异)](#💡 小拓展:Java vs C语言的static(核心差异))
    • [二、静态变量:static修饰成员变量 📦](#二、静态变量:static修饰成员变量 📦)
      • [2.1 静态变量的3大核心特点](#2.1 静态变量的3大核心特点)
      • [2.2 静态变量的2种调用方式](#2.2 静态变量的2种调用方式)
      • [2.3 实战案例:Student类中的静态变量](#2.3 实战案例:Student类中的静态变量)
      • [2.4 静态变量vs非静态变量 核心对比](#2.4 静态变量vs非静态变量 核心对比)
    • [✍️ 写在最后](#✍️ 写在最后)

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大核心特点

这是静态变量的核心考点,必须熟记!✅

  1. 被该类所有对象共享:这是静态变量最核心的特点,一个类的所有对象共用同一个静态变量,修改其中一个对象的静态变量值,其他对象的该值也会同步改变。
  2. 不属于对象,属于类:静态变量是类的属性,不是某个对象的属性,即使没有创建任何对象,静态变量依然存在。
  3. 随着类的加载而加载,优先于对象存在 :Java程序运行时,类会先被加载到方法区,静态变量会跟着类一起初始化;而对象是后续通过new关键字创建的,因此静态变量的创建时机早于对象。

2.2 静态变量的2种调用方式

静态变量有两种调用方式,推荐使用类名调用,更能体现其"类级别"的特性。

  1. 类名调用 (推荐):类名.静态变量名
  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非静态变量 核心对比

用表格清晰区分,避免使用时混淆:

对比维度 静态变量(类变量) 非静态变量(实例变量)
所属级别 属于类 属于对象
加载时机 随类加载而加载,优先存在 随对象创建而加载
共享性 所有对象共享 每个对象独有
调用方式 类名调用(推荐)/对象名调用 仅能对象名调用
内存存储 方法区的类静态区域 堆内存的对象区域

✍️ 写在最后

  1. 本文核心掌握static关键字的基本定义,以及静态变量的3大特点+2种调用方式,这是静态特性的入门基础,后续的静态方法、静态代码块都是基于这个核心延伸的。
  2. 记住Java与C语言的static无直接关联,不要用C语言的逻辑理解Java的静态特性,避免走入误区。
  3. 实际开发中,当一个属性需要被所有对象共享时,就定义为静态变量,比如班级的班主任、系统的全局配置、工具类的常量等。
  4. 静态变量的调用优先使用类名调用,这是开发规范,能让代码的可读性更高,一眼看出这是类级别变量。

下一篇我们会深入底层,通过内存图解析静态变量的存储位置和访问逻辑,同时排查静态变量的常见使用错误,帮你从"会用"升级为"理解底层"~


❤️ 我是黎雁,专注Java基础与实战分享,关注我,一起从0到1吃透Java面向对象!

📚 后续文章预告:《Java静态变量底层:内存图解析+避坑指南》

💬 评论区交流:你在使用静态变量时遇到过哪些问题?或者有哪些疑惑,欢迎留言讨论~

相关推荐
玉梅小洋1 小时前
C盘爆满 修改VS Code缓存与插件目录指定方法
开发语言·windows·visualstudio
C#程序员一枚1 小时前
C#AsNoTracking()详解
开发语言·c#
一条大祥脚1 小时前
26.1.21 根号分治 相向双指针
java·开发语言·redis
迦蓝叶2 小时前
JDBC元数据深度实战:企业级数据资源目录系统构建指南
java·jdbc·企业级·数据资源·数据血缘·数据元管理·构建指南
chilavert3182 小时前
技术演进中的开发沉思-327 JVM:内存区域与溢出异常(下)
java·jvm
冲刺逆向2 小时前
【js逆向案例六】创宇盾(加速乐)通杀模版
java·前端·javascript
洛阳纸贵2 小时前
JAVA高级工程师-消息中间件RabbitMQ工作模式(二)
java·rabbitmq·java-rabbitmq
涅小槃2 小时前
Carla仿真学习笔记(版本0.9.16)
开发语言·python·ros·carla