English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
в JavaИнтерфейсаналогичны классам, но они содержат только абстрактные методы и поля с ключевыми словами final и static.
甲Статические методыявляются статическими, и они загружаются в память вместе с классом. Вы можете вызывать статические методы по имени класса, не требуя создания экземпляра.
С 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; }
Таким образом, в интерфейсе не нужно включать статические блоки.