亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java static 详解:静态变量、方法、代码块与实战示例

在 Java 中,static 关键字出现在三个不同场景:静态变量、静态方法 和 静态代码块。每种在类及其实例的生命周期中扮演独特角色。

Java 静态变量

静态变量是类级别的字段,类首次加载时仅初始化一次。与实例变量不同,所有该类对象共享同一份静态变量副本。

语法:

public static int count;

Java 静态方法

静态方法属于类而非特定实例。无需创建对象即可调用,且只能访问静态数据。

所有 main 方法均为 static,以便 JVM 在对象存在前启动应用。

实战示例:使用静态变量和方法

下面的简单程序演示静态计数器如何在多个 Student 对象间共享。

public class Demo {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.showData();
        Student s2 = new Student();
        s2.showData();
        // Student.b++; // 取消注释可修改计数器
        // s1.showData();
    }
}
class Student {
    int a; // 实例变量,默认 0
    static int b; // 静态计数器,仅初始化一次为 0
    Student() {
        b++; // 每创建一个 Student 递增计数器
    }
    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
}

用 java Demo 编译运行,输出如下:

Java static 详解:静态变量、方法、代码块与实战示例

下图展示引用变量与对象的创建过程,以及静态变量 b 如何在实例间共享。

Java static 详解:静态变量、方法、代码块与实战示例

类外部访问静态变量用 类名.变量名:

Student.b++; // 递增共享计数器
s1.showData(); // 将显示更新后的 b 值

尝试从静态上下文访问实例变量会导致编译错误:

error: non-static variable a cannot be referenced from a static context
a++;

这是因为静态方法不能直接访问实例字段。

Java 静态代码块

静态代码块是类首次加载进 JVM 时执行一次的特殊代码块。适合初始化需要复杂逻辑的静态字段。

class Test {
    static int a;
    static int b;
    static {
        a = 10;
        b = 20;
    }
}

运行下面程序演示静态代码块输出:

public class Demo {
    static int a;
    static int b;
    static {
        a = 10;
        b = 20;
    }
    public static void main(String[] args) {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
}

输出:

Value of a = 10
Value of b = 20

java

  1. Java 方法:定义、调用与高效使用全指南
  2. 深入理解 Java final 关键字:变量、方法与类的不可变性
  3. Java instanceof 运算符完全指南:用法、继承与接口检查
  4. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  5. 精通 Java 匿名内部类:定义、语法与实战示例
  6. Java 单例模式详解:安全实现与使用指南
  7. 精通 Java 反射:运行时检查类、方法与字段
  8. 精通 Java 异常处理:try-catch、finally、throw 与 throws 详解
  9. 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
  10. 掌握 Java 泛型:构建可复用、类型安全的代码
  11. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
  12. Java 接口 vs 抽象类:如何选择合适的抽象方式