Какова цель безымянных блоков кода в Java?

1

В моем классе Java у меня есть утверждения в {} без каких-либо имен/ссылок, связанных с ним, и, как представляется, они выполняются до запуска конструктора. В чем его цель? Можно ли назвать это как вызов метода, связав с ним переменную/ссылку? Если нет, могу ли я изменить порядок его запуска?

package com.core.java;

public class App {

    public static void main(String[] args) {
        new App();
    }

    static { System.out.print("static block, "); }      
    App() { System.out.print("constructor, "); }    
    { System.out.print("what_is_this? "); }

}

Я видел аналогичную конструкцию в Ruby, где она может быть связана с ссылкой и называться по желанию. Например

v = -> { puts "A Code Block" }
v.call #=> prints -> A Code Block
  • 0
  • 0
    Флаг дублирования имеет больше смысла, если вы знаете, что static { System.out.print("static block, "); } является статическим инициализатором , и это { System.out.print("what_is_this? "); } инициализатор экземпляра .
Теги:

1 ответ

1
Лучший ответ

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

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

Сравнение с Ruby несколько ошибочно, так как это только синтаксическое сходство между Java и Ruby - в Ruby "{" означает нечто совершенно иное, чем Java использует этот синтаксис. "-> {}" в Ruby - это выражение, возвращающее лямбду, которая является вызываемым объектом.

Что такое блок инициализации?

Также помогает объяснить случай с некоторыми хорошими примерами кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню