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

Почему интерфейс не имеет статического инициализационного блока, когда в Java интерфейс может иметь только статические методы?

в JavaИнтерфейсаналогичны классам, но они содержат только абстрактные методы и поля с ключевыми словами final и static.

Статические методыявляются статическими, и они загружаются в память вместе с классом. Вы можете вызывать статические методы по имени класса, не требуя создания экземпляра.

Статические методы в интерфейсах с Java 8

С Java 8 вы можете использовать статические методы в интерфейсах (с телом). Вы должны вызывать их по имени интерфейса, как и статические методы класса.

Пример

В данном примере мы определяем статический метод в интерфейсе и обращаемся к нему из класса, реализующего этот интерфейс.

interface MyInterface{
   public void demo();
   public static void display() {
      System.out.println("This is a static method");
   }
}
public class InterfaceExample{
   public void demo() {
      System.out.println("This is the implementation of the demo method");
   }
   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;
}

Таким образом, в интерфейсе не нужно включать статические блоки.

Основной учебник
Вам может понравиться