2013-05-31 3 views
1

Я наткнулся на этот блок кода Java, который, кажется, бросает вызов правилам синтаксиса:Двойные Конструкторы блоки кода, статический блок кода в Java

1. public class Sequence { 
2.  Sequence() { System.out.print("c "); } 
3.  { System.out.print("y "); } 
4.  public static void main(String[] args) { 
5.   new Sequence().go(); 
6.  } 
7.  void go() { System.out.print("g "); } 
8.  static { System.out.print("x "); } 
9. } 

по отношению к линии 3, как бы независимый блок кода будет так открылся? Я тестировал его, и это сработало. Однако логика движется в обратном порядке: y будет напечатано до c.

Кроме того, со ссылкой на строку 8, я не уверен, что этот блок пытается сделать. Это похоже на объявление класса. В этом случае не следует, чтобы ключевое слово static сопровождалось именем класса?

Может кто-то прояснить мои сомнения? Спасибо.

+4

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

+0

Спасибо, что указали мне правильную страницу. – LanceHAOH

ответ

2

Код в строке 8 называется статическим инициализационным блоком. Где, поскольку код в строке 3 называется блоком нестатической инициализации.

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

+1

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

+0

Спасибо! Все ваши объяснения были настолько полезными! – LanceHAOH

Смежные вопросы