Следующая причина:
int a=5;
, объявленная на уровне класса, не создает ошибку времени компиляции, когда:
void m1() {
int a;
a=5;
}
объявлен, поскольку m1()
имеет свою собственную область.
Например, если вы не объявляете и не получаете доступ к переменной a
, она будет ссылаться на поле класса, где, как при локальном объявлении a
, вы всегда ссылаетесь на объявленную внутри a
.
PS: Вы не можете делать следующее на уровне класса:
int a;
a=5;
Вам придется:
int a=5;