Вопрос о синтаксисе Java - PullRequest
5 голосов
/ 28 июля 2011

Что значит

static{
    //something
}

объявлено в теле определения класса означает?

public class A extends B{
     static {
          C.register(new C(A.class,
                    (byte) D.x.getCode()) {
                         public DataSerializable newInstance() {
                              return new A();
                         }
                    }
               );
     }
 }

Ответы [ 6 ]

6 голосов
/ 28 июля 2011

Блок static называется «блоком статической инициализации». Он очень похож на обычный конструктор, за исключением того, что он может только инициализировать статические переменные.

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

Подробнее о статических блоках инициализации вы можете прочитать здесь: Инициализирующие поля

3 голосов
/ 28 июля 2011

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

2 голосов
/ 28 июля 2011

Это статический инициализатор.Он запускается после загрузки класса, и его результаты могут быть сохранены в статических членах.Он используется для инициализации статических членов, которые требуют больше, чем обычный новый Xyz () (например, списки или карты) ...

2 голосов
/ 28 июля 2011

Это становится блоком статической инициализации , который может быть записан как статический метод.

1 голос
/ 28 июля 2011

Это означает, что у вас будет этот раздел, который находится внутри статического блока, выдвинутого ПЕРВЫМ при загрузке класса в JVM.

Выполните следующую простую программу, чтобы прояснить ситуацию

public class Test123 {
  static{
    System.out.println("Hello from static block");
  }

  public static void main(String[] args) {
    System.out.println("In main");
  }
}

Вывод на выше будет

Hello from static block 
In main
1 голос
/ 28 июля 2011

Это статический инициализатор.Он позволяет вам определять вещи, которые происходят во время загрузки класса, перед созданием любого экземпляра.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...