HOWTO · Java
Java 中的静态是什么意思
本文介绍 Java 中的 static 关键字。
本页内容
在 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 方法,这里,InnerClass 和 InnerClass2 被实例化了两次。当构造函数调用发生时,可以推导出使用 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