English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Warum gibt es in Java keine statischen Initialisierungsblöcke in einer Schnittstelle, wenn Schnittstellen nur statische Methoden haben können?

in JavaSchnittstelleÄhnlich wie Klassen, aber sie enthalten nur abstrakte Methoden und Felder, die final und static sind.

Statische Methodenwerden statische Methoden mit dem Schlüsselwort static deklariert, die zusammen mit der Klasse in den Speicher geladen werden. Sie können statische Methoden auf das Klassenniveau zugreifen, ohne eine Instanz zu instantiieren.

Seit Java8Angefangen mit den statischen Methoden in Schnittstellen

Von Java8Zunächst können Sie statische Methoden in einer Schnittstelle (mit Körperschaft) verwenden. Sie müssen den Namen der Schnittstelle verwenden, um auf sie zuzugreifen, genau wie auf statische Methoden einer Klasse.

示例

Im folgenden Beispiel definieren wir eine statische Methode in einer Schnittstelle und greifen auf sie von einer Klasse zu, die diese Schnittstelle implementiert.

interface MyInterface{
   public void demo();
   public static void display() {
      System.out.println("Dies ist eine statische Methode");
   }
}
public class InterfaceExample{
   public void demo() {
      System.out.println("Dies ist die Implementierung der demo-Methode");
   }
   public static void main(String args[]) {
      InterfaceExample obj = new InterfaceExample();
      obj.demo();
      MyInterface.display();
   }
}

输出结果

This is the implementation of the demo method
This is a static method

静态块

静块是代码使用静态关键字的块。通常,这些用于初始化静态成员。JVM在类加载时在main方法之前执行静态块。

public class MyClass {
   static{
      System.out.println("Hello this is a static block");
   }
   public static void main(String args[]){
      System.out.println("This is main method");
   }
}

输出结果

Hello this is a static block
This is main method

接口中的静态块

主要是,如果在声明时尚未初始化静态块,则它们将用于初始化类/静态变量。

在接口中声明字段时。必须给它赋值,否则会生成编译时错误。

示例

interface Test{
   public abstract void demo();
   public static final int num;
}

编译时错误

Test.java:3: error: = expected
   public static final int num;
                              ^
1 error

当您在接口中为静态最终变量分配值时,将解决此问题。

interface Test{
   public abstract void demo();
   public static final int num = 400;
}

因此,接口中不必包含静态块。

Vielleicht gefällt dir das auch