Java-не может присвоить значение конечной переменной - PullRequest
0 голосов
/ 05 сентября 2018
class SomeClass{

    final static int temp;
    //temp=30;
    SomeClass(int a){
        System.out.println("here");
        temp=a;
    }
}

public class HelloWorld{

    public static void main(String args[]){

        SomeClass t1 = new SomeClass(10);
        SomeClass t2 = new SomeClass(20);

        System.out.println("t1:"+t1.temp);
        System.out.println("t2:"+t2.temp);
    }   
}

Когда я создаю объект t2 SomeClass, я не могу присвоить ему значение 20. В чем может быть причина здесь? Я не могу понять окончательный статический тип int.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

когда вы определяете переменную final static, это означает, что вы определяете ее как CONSTANT. Существует только одна копия переменной, которую нельзя повторно инициализировать.

0 голосов
/ 05 сентября 2018

Вы должны понимать два модификатора переменной temp:

  1. static означает, что делает эту переменную class , поэтому, когда вы делаете присваивание в конструкторе объектов, это не член объекта, а класс. При создании t2 вы делаете второе присвоение единственной переменной класса (не переменной-члену объекта).

  2. final означает, что переменной может быть присвоено значение только один раз, и поэтому присвоение в конструкции t2 завершается неудачей.

Намереваетесь ли вы, чтобы temp было полем члена объекта? Затем удалите static.

Если вы намереваетесь, чтобы temp была переменной класса, которая была переназначена? Затем удалите final.

0 голосов
/ 05 сентября 2018

static означает принадлежность на уровне класса. И final означает, что вы можете создать его только один раз. Итак, когда вы используете final static, вы создаете его один раз при создании t1. Тогда это не может быть повторно инициализировано. Смотрите эту статью .

Если вы хотите иметь переменную, которую нельзя изменить на уровне объекта, удалите static.

...