Инициализация по умолчанию в java

У меня есть путаница с инициализацией переменных в Java. Как я понимаю, переменные класса получают инициализацию по умолчанию, а локальные переменные по умолчанию не инициализируются. Однако, если я создаю массив внутри метода, используя ключевое слово new, он инициализируется по умолчанию. Верно ли это для всех объектов? Инициализирует ли ключевое слово new объект независимо от того, является ли он переменной класса или локальной переменной?

3 ответов


Это верно для всех объектов? Инициализирует ли использование ключевого слова new объект независимо от того, является ли он переменной класса или локальной переменной?

при использовании new ключевое слово. это значит, что у вас есть инициализации ваш объект. не имеет значения, объявлен ли он на уровне метода или на уровне экземпляра.

public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}

с Спецификация Языка Java

каждая переменная класса, переменная экземпляра или компонент массива инициализируется со значением по умолчанию при его создании (§15.9, §15.10):

  • для типа byte значение по умолчанию равно нулю, то есть значение (байт)0.

  • для типа short, значение по умолчанию равно нулю, то есть значение (короткий)0.

  • для типа int, значение по умолчанию равно нулю, то есть 0.

  • для типа long значение по умолчанию равно нулю, то есть 0L.

  • для типа float значением по умолчанию является положительный ноль, то есть 0.0 f.

  • для типа double значением по умолчанию является положительный ноль, то есть 0.0 d.

  • для типа char значением по умолчанию является нулевой символ, то есть "\u0000".

  • для типа boolean, значение по умолчанию-false.

  • для всех ссылочных типов (§4.3), значение по умолчанию-null


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

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