2013-09-10 3 views
1
class A{ 
public final static int num = 0; 
public final static B instance = null; 
} 

Я слышал, что члены класса сначала инициализируются. Итак, в этом коде, что инициализируется первым и имеет ли Java порядок, в котором инициализируются переменные?Что инициализируется первым, примитивы или объекты?

Заранее спасибо.

+0

'B instance' является ссылкой, а не объектом. –

+0

Спасибо, мой плохой. – user2384330

+0

Это означает, что разница с примитивным не так велика, как может показаться. Ссылка - это всего лишь 4-байтовый или 8-байтовый указатель, с которым вы не можете манипулировать. –

ответ

1

Они будут инициализированы в порядке, указанном вами в коде. Первый int будет инициализирован, а затем B

2

Я не знаю, откуда вы это слышали, но я верю, что они инициализированы в том порядке, в котором они написаны. Проверьте documentation

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

+1

Привет, спасибо за информацию, очень полезную ссылку. – user2384330

1
public final static int num = 0; 
public final static B instance = null; 

Оба утверждения включают в себя равные/эквивалентные усилия на стороне JVM. Второй оператор просто создает ссылку null, а не фактический новый объект. Ссылка обычно представляет собой (32/64 бит) значение в зависимости от виртуальной машины и платформы. Итак, я бы сказал, что JVM выполнит их в том порядке, в котором они появляются.

§12.4.2 JLS:

Процедура инициализации C затем следующим образом:

Затем инициализировать конечный переменный класс и поле интерфейсов , значения которых во время компиляции постоянных выражений (§8.3 .2.1, §9.3.1, §13.4.9, §15.28).

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

1

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

Загрузка классов происходит сразу, поэтому нет ничего, что было создано первым. JVM просто создает их один за другим, может быть в порядке объявления. Оба num и instance представляют собой набор 32-битных/64-битных данных; с разницей только в том, что значения num - числовые 0; а экземпляр - это значение.

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