Java Static 练习

概述

在 Java 编程语言中,static 关键字用于描述类级别的属性和方法。当一个成员被声明为 static 时,它将与类本身关联,而不是与类的实例关联。这意味着无论创建多少个类的实例,static 成员只有一份副本。

本文将介绍 static 关键字在 Java 中的用法和作用,以及如何在代码中正确使用它。

静态变量

静态变量也称为类变量,是在类级别上定义的变量,与类的实例无关。静态变量在类加载时被创建,并且只有一份副本存在于内存中。所有的类实例将共享这个静态变量。

下面是一个示例代码,展示了如何声明和使用静态变量:

public class Counter {
  // 静态变量
  static int count = 0;

  public Counter() {
    count++; // 每次创建类实例时,静态变量自增
  }

  public static void main(String[] args) {
    Counter c1 = new Counter();
    Counter c2 = new Counter();
    Counter c3 = new Counter();

    System.out.println("计数器的值:" + Counter.count); // 输出:计数器的值:3
  }
}

在上面的代码中,我们定义了一个名为 Counter 的类,并声明了一个静态变量 count。当创建 Counter 类的实例时,count 的值会自增。在 main 方法中,我们创建了三个类的实例 c1c2c3,并打印出 count 的值,结果是 3

静态变量可以通过类名直接访问,无需创建类的实例。例如,在上面的例子中,我们可以通过 Counter.count 访问静态变量。

需要注意的是,静态变量在多线程环境下可能会引发并发问题。由于所有实例共享同一个静态变量,多个线程同时访问和修改静态变量可能导致数据不一致性。因此,在多线程环境中使用静态变量时应格外小心。

静态方法

静态方法也称为类方法,与静态变量类似,它们在类级别上定义,并且与类的实例无关。静态方法可以通过类名直接调用,无需创建类的实例。

下面是一个示例代码,展示了如何声明和使用静态方法:

public class MathUtils {
  // 静态方法
  public static int add(int a, int b) {
    return a + b;
  }

  public static void main(String[] args) {
    int result = MathUtils.add(3, 5);
    System.out.println("结果:" + result); // 输出:结果:8
  }
}

在上面的代码中,我们定义了一个名为 MathUtils 的类,并声明了一个静态方法 add。该方法接收两个整数作为参数,并返回它们的和。在 main 方法中,我们通过 MathUtils.add(3, 5) 调用了静态方法,并将结果打印出来,结果是 8

需要注意的是,静态方法只能访问静态成员(变量和方法),不能访问非静态成员。这是因为静态方法在类加载时就存在,而非静态成员需要通过实例才能访问。如果在静态方法中尝试访问非静态成员,将会导致编译错误。

静态代码块

静态代码块是在类加载时执行的一段代码,它在类的所有实例创建之前执行。静态代码块通常用于初始化静态变量或执行一些静态操作。

下面是一个示例代码,展示了如何使用静态代码块:

public class StaticBlockExample {
  // 静态变量
  static int number;

  static {
    // 静态代码块
    number = 10;
    System.out.println("静态代码块执行");