Java 静态方法,变量和代码块

Java 中的静态可以是:

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

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

Java 中的静态变量是什么?

Java 中的静态变量是变量,属于类,并且在执行开始时仅初始化一次。

  • 它是属于类的变量而不是对象(实例)
  • 静态变量仅在执行开始时初始化一次。在初始化任何实例变量之前,将首先初始化这些变量
  • 要由该类的所有实例共享的单个副本
  • 静态变量可以通过类名直接访问,不需要任何对象

语法 :

<class-name>.<variable-name>

Java 中的静态方法是什么?

Java 中的静态方法是属于类而不是对象的方法。静态方法只能访问静态数据。

  • 这是一个属于类的方法而不是对象(实例)
  • 静态方法只能访问静态数据。它无法访问非静态数据(实例变量)
  • 静态方法只能调用其他静态方法,不能从中调用非静态方法。
  • 静态方法可以通过类名直接访问,不需要任何对象
  • 无论如何,静态方法不能引用 thissuper 关键字

语法 :

<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: 预期输出如下所示,

C:\Tastones>java Demo
Value of a = 0
Value of b = 1
Value of c = 0
Value of d = 2

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

Java 静态方法和变量

步骤 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