В моем классе 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
Если вы хотите быстро прочитать эти конструкции и для чего их можно использовать, см.
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
Сравнение с Ruby несколько ошибочно, так как это только синтаксическое сходство между Java и Ruby - в Ruby "{" означает нечто совершенно иное, чем Java использует этот синтаксис. "-> {}" в Ruby - это выражение, возвращающее лямбду, которая является вызываемым объектом.
Также помогает объяснить случай с некоторыми хорошими примерами кода.
static { System.out.print("static block, "); }
является статическим инициализатором , и это{ System.out.print("what_is_this? "); }
инициализатор экземпляра .