2017-02-17 5 views
-2

если мы пытаемся сделатьПочему мы не можем выполнить задание в классе?

class A{ 
int a = 5 ; 
a=6; // we will get error 
} 

я видел этот вопрос, как у меня, но не то же самое Why can't I do assignment outside a method?

но ответы не убедили меня, как here

мы видим, что заявление в заявлении а также присваивание, поэтому скобки класса должны быть блоком кода, содержащим их, также каждый оператор находится внутри блока кода, который, несомненно, будет в классе как верхний уровень или методы как ниже, так что, как говорится, оператор должен быть только внутри блок кода?

Мне нужен ответ или ссылка, пожалуйста? спасибо за чтение.

+0

«так брекеты класса должен быть блок кода» - нет, объявление класса не учитывается в качестве блока. Не совсем понятно, чего вы пытаетесь достичь здесь. Вы * не можете * писать произвольные утверждения в объявлениях класса или только инициализатора. Вы можете прочитать [JLS] (http://docs.oracle.com/javase/specs/jls/se8/html/index.html) для всех деталей, но в принципе вам нужно принять, что это правила. –

+1

Я не уверен, что вы просите. Почему «должны» классовые брекеты ведут себя так, как вам кажется? Они этого не делают; это просто Java. –

+0

, так что это не сработало, потому что 1) тело класса не является блоком, если это так, так как он принимает объявление, поскольку ссылка говорит, что ему нужен блок кода. 2) класс класса принимает только декларацию. Я думаю, что это правильный ответ. – Sam

ответ

0

В приведенных вами примерах они не показывают полный код. Они фактически выполняют задания внутри методов. Это не значит, что назначение внутри класса невозможно.

class A { 
    int a = 5; 
} 

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

Я бы прочитать о том, как переменные работают в Java

+0

int a = 5; это инициализация не присвоение. как вы говорите, переназначение не будет работать в классе. потому что он не будет принят в качестве кода! – Sam

+0

int a = 5; является декларацией и инициализацией. Назначение было плохой работой для использования, извините, инициализация лучше. Технически это все код, причина, по которой я сказал, что переменные класса не обрабатываются одинаково, потому что переменные класса инициализируются в память один раз, когда класс загружается. Он не запускается последовательно каждый раз, когда он вызывается как метод. – ShaneNal

+0

thx, я начал его искать, теперь будет искать его. – Sam

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