Почему локальные переменные не могут иметь значение по умолчанию?

Почему локальные переменные не могут иметь значение по умолчанию в Java?
Например:

static int number1;
public static void main (String[] args)
{
    int number2;
    System.out.println(number1);
    System.out.println(number2);
}

Здесь number1 благополучно выведется, а при выводе number2 выдаст ошибку:

The local variable number2 may not have been initialized

Почему так происходит?


Ответы (2 шт):

Автор решения: Sergey Gornostaev

Java изначально проектировали так, чтобы в ней невозможны были типичные ошибки, вызывавшие проблемы в корпоративном ПО в предыдущие годы. В частности операции с не инициализированными переменными.

→ Ссылка
Автор решения: Slavik

потому что память для локальных переменных выделяется на стеке а как выделить память на стеке ?? просто переместить указатель на верхушку стека , не записывая в эту область никакого значения вообще это не только в java, это справедливо для многих языков, например в с/с++ локальная переменная также не будет инициализирована, то есть в ней буден находится мусор, просто компилятор не выдаст ошибку, а в яве и c# компилятор за этим следит, а сделано это для производительности, так как легче просто переместить указатель, чем переместить указатель и еще писать туда какието там значения по умолчанию

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

а память для локальных переменных память выделяется на стеке при каждом вызове функции

→ Ссылка