2012-02-25 13 views
2

Это возможно даже, некоторые утверждают, его можно и я видел его здесь тоже link .. но когда я лично пытался это дает мне ошибки компиляции время ..Можно ли инициализировать конечную переменную после объявления ..?

я имею в виду это,

Class A{ 
    private final String data; 

    public A(){ 
     data = "new string"; 
    } 
} 

Спасибо заранее.

+1

Какая ошибка времени компиляции, которую вы получаете? – Rocky

+0

Возможно, ваша ошибка времени компиляции относится к верхнему регистру «Класс». Остальное отлично и должно компилироваться. – home

+0

** Чистые конечные данные поля, возможно, не были инициализированы ** ... это то, что я получаю. – ngesh

ответ

5

Да, это возможно. Класс написан с маленьким регистром c. В противном случае ваш код будет прекрасным (за исключением идентификации):

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
    } 
} 
4

Вы можете инициализировать конечную переменную экземпляра после объявления.

  • Если это статично, вы должны инициализировать его в статической инициализации .
  • Иначе вы должны инициализировать его в конструкторе.

Проблема с кодом, который вы опубликовали, это прописная буква C. Должно быть, это было class, как указал Борис.

2

Как и Борис предложил код в порядке. Однако вы не можете сделать, чтобы назначить второе значение конечным переменным данным. data = "another string"; не будет компилироваться, поскольку данные являются окончательными и, следовательно, его значение не может быть изменено после инициализации.

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
     data = "another string"; 
    } 
} 
2

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

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