2012-06-01 2 views
9

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


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

Но даже если я объявляю переменную только final, то она остается неизменной для всех объектов, так как мне нужно инициализировать их в самой программе, а не во время выполнения.


Итак, в принципе нет никакой разницы между двумя, за исключением проблемы, связанной с памятью?

ответ

12

Но даже если я объявить переменную только окончательное, то остается один и тот же для всех объектов, как мне нужно, чтобы инициализировать их в самой программе , а не во время выполнения.

Нет, нестатические конечные элементы могут быть инициализированы в конструкторе. После этого они не могут быть повторно назначены.

+1

Могу ли я инициализировать значение конечной переменной во время выполнения с помощью пользовательского ввода ?? –

+1

Только если вы вызываете конструктор после ввода пользователя. Он не может быть изменен после вызова конструктора. –

+0

Только если это часть конструктора. Путь вокруг этого состоит в том, чтобы сначала прочитать первый класс в значении, а затем создать свой объект с конечной переменной, как только вы узнаете данные. – n00begon

1

Конечные переменные: объявленная конечная переменная будет константой, ее значение не может быть изменено и может быть инициализировано в конструкторе.

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

2

final означает, что вы можете назначить только одно значение переменной. final можно использовать во многих областях и очень полезно, в свойстве объекта вы должны (и принудительно) установить значение в объявлении или в конструкторе или в блоке инициализации объекта.

И static должен установить объем переменных, это означает, что в свойстве класса, значение является хранением внутри класса, и может быть доступ даже без объекта, когда вы используете static final или final static вы должны (и принудительные), чтобы установить значение в объявлении или внутри статического кода инициализации класса.

Пример:

public class NewClass { 

    static final int sc = 123; //I recommend to use this declaration style. 
    final static int scc; 
    final int o = 123; 
    final int oo; 
    final int ooo; 

    static { 
     scc = 123; 
    } 

    { 
     oo = 123; 
    } 

    public NewClass() { 
     ooo = 123; 
    } 

    void method(final int p) { 
//  p=123; //Error, the value is only assigned at the call of the method. 

     final int m = 123; 
     final int mm; 
     mm = 123; 
//  mm = 456; //Error, you can set the value only once. 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       System.out.println(m + p); //You still can reach the variables. 
      } 
     }).start(); 
    } 
} 
Смежные вопросы