Java 中的静态变量

静态可以

  1. 静态变量
  2. 静态方法
  3. 静态代码块。

我们先来看看静态变量和静态方法。

Java 中的静态变量是什么?

Java 中的静态变量是属于类的变量,并且在执行开始时只初始化一次。它是属于类的变量,而不是属于对象的(实例)。静态变量只在执行开始时初始化一次。这些变量将在任何实例变量初始化之前首先进行初始化。

  • 由类的所有实例共享的单一副本
  • 可以通过类名直接访问静态变量,而无需任何对象

语法

<class-name>.<variable-name>

Java 中的静态方法是什么?

Java 中的静态方法是属于类的变量,而不是属于对象的。静态方法只能访问静态数据。它是属于类的变量,而不是属于对象的(实例)。静态方法只能访问静态数据。它不能访问非静态数据(实例变量)。

  • 静态方法只能调用其他静态方法,而不能从中调用非静态方法。
  • 可以通过类名直接访问静态方法,而无需任何对象
  • 静态方法不能以任何方式引用“this”或“super”关键字

语法

<class-name>.<method-name>

注意: main 方法是静态的,因为它在任何实例化发生之前必须可访问,以便应用程序运行。

让我们通过一些练习来学习静态关键字的细微差别!

示例:如何调用静态变量和方法

步骤 1)将以下代码复制到编辑器中

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; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.

  Student(){
   //Constructor incrementing static variable b
   b++;
  }

   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}

}

步骤 2)保存并编译代码。运行代码,例如:java Demo

步骤 3)预期输出如下所示


Java Static Methods and Variables

下图显示了如何创建引用变量和对象,以及静态变量如何被不同实例访问。


Java Static Methods and Variables

步骤 4)可以使用语法ClassName.Variable_Name从类外部访问静态变量。取消注释第 7 行和第 8 行。保存、编译并运行。观察输出。

Value of a = 0
Value of b = 1
Value of a = 0
Value of b = 2
Value of a = 0
Value of b = 3

步骤 5)取消注释第 25、26 和 27 行。保存、编译并运行。

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

步骤 6)错误=?这是因为无法从 Java 静态类方法“increment”访问实例变量“a”。

Java 中的静态块是什么?

静态块是 Java 类中的一个语句块,当类首次加载到 JVM 时,它将被执行。静态块有助于初始化静态数据成员,就像构造函数有助于初始化实例成员一样。

class Test{
 static {
 //Code goes here
 }
}

以下程序是 Java 静态块的示例。

示例:如何访问静态块

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