Java 中的静态是什么意思

Rashmi Patidar 2023年10月12日
  1. 在 Java 中使用 static 关键字和成员变量
  2. 在 Java 中使用 static 关键字和成员函数
  3. 在 Java 块中使用 static 关键字
Java 中的静态是什么意思

在 Java 语言中,static 是一个可以在不同地方使用的关键字。static 关键字与成员变量、成员函数、块和嵌套类一起使用。静态关键字的应用是我们不想每次都创建新实例的地方。相反,我们在类内共享单个副本的地方使用它。静态变量存储在堆内存中,这是一种永久内存。

在 Java 中使用 static 关键字和成员变量

代码块解释了静态变量与非静态变量的不同之处。

public class StaticVariableUsage {
  public static void main(String[] args) {
    InnerClass in = new InnerClass();
    InnerClass in1 = new InnerClass();

    InnerClass2 in2 = new InnerClass2();
    InnerClass2 in3 = new InnerClass2();
  }

  static class InnerClass {
    static int var4 = 0;
    InnerClass() {
      var4++;
      System.out.println("static variable : " + var4);
    }
  }

  static class InnerClass2 {
    int var5 = 0;
    InnerClass2() {
      var5++;
      System.out.println("non-static variable : " + var5);
    }
  }
}

在上面的代码块中,有一个名为 StaticVariableUsage 类的公共类。它有一个静态方法和两个内部类。名为 InnerClass 的内部类有一个静态整数变量 var4 并从零开始。该类有一个构造函数,用于递增静态整数变量并打印其值。

另一个内部类名为 InnerClass2,并保存一个非静态变量 var5。这个类也有一个构造函数,它增加非静态变量并打印它的值。

移动到 main 方法,这里,InnerClassInnerClass2 被实例化了两次。当构造函数调用发生时,可以推导出使用 new 关键字实例化对象的分析。

正如输出所说,静态变量被启动并被保留。该值第一次增加并将值打印为 1。下一次,当我们创建另一个实例时,构造函数会再次被调用。但是静态变量不会再次用零重新初始化。相反,先前存储的值会增加,因此,使静态变量值变为 2。

类似地,当创建 InnerClass2 的实例时,每次非静态变量都会被初始化为值 0。因此,它在两次输出中都将 value 打印为 1

static variable : 1
static variable : 2
non-static variable : 1
non-static variable : 1

在 Java 中使用 static 关键字和成员函数

我们有一个名为 StaticFunctionUsage 的外部类,它包含下面类中的另一个内部类。InnerClass 有一个静态函数。另一个名为 InnerClass1 的内部类有一个非静态方法。

现在,转到 main 方法,可以看到可以使用类名直接访问静态函数。我们不必实例化 InnerClass 对象。类似地,当我们尝试使用类名访问非静态函数 function1 时,会填充编译时错误。如果我们想访问该函数,则需要创建类实例,我们使用名称 in 变量创建了该实例。变量的用途是调用 function1,是一个有效的语句。

public class StaticFunctionUsage {
  public static void main(String[] args) {
    InnerClass.function();
    // InnerClass1.function1();
    InnerClass1 in = new InnerClass1();
    in.function1();
  }

  static class InnerClass {
    static void function() {
      System.out.println("In the static function");
    }
  }

  static class InnerClass1 {
    void function1() {
      System.out.println("In the non-static function");
    }
  }
}

上述代码块的输出如下。

In the static function
In the non-static function

在 Java 块中使用 static 关键字

静态块的用途是初始化静态变量。程序的执行从 main 方法开始。如果类中存在静态块,则它会在 main 方法执行之前执行。

下面是解释静态块的代码。

public class StaticBlock {
  static {
    System.out.println("In the static block");
  }

  public static void main(String[] args) {
    System.out.println("In the main method");
  }
}

代码的输出如下。正如我们所见,静态块中的语句首先被执行。

In the static block
In the main method
作者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn