частный заключительный статический атрибут по сравнению с частным заключительным атрибутом

никогда не храните свои сторонние двоичные файлы в управлении исходным кодом. Системы управления исходным кодом являются платформами, которые поддерживают параллельный совместный доступ к файлам, параллельны работе, объединяя усилия и историю изменений. Управление исходным кодом не является FTP-сайтом для двоичных файлов. Сторонние блоки НЕ являются исходным кодом; они изменяются, возможно, дважды на SDLC. Требование быть в состоянии вытереть Вашу чистую рабочую область, раскройте все от управления исходным кодом, и сборка не означает, что сторонние блоки должны застрять в управлении исходным кодом. Можно использовать сценарии сборки для управления получением по запросу сторонних блоков с сервера распределения. Если Вы волнуетесь по поводу управления, какое ответвление/версия Вашего приложения использует конкретный сторонний компонент, то можно управлять этим через сценарии сборки также. Люди упомянули Знатока для Java, и можно сделать что-то похожее с MSBuild для.Net.

285
задан ROMANIA_engineer 26 September 2014 в 11:10
поделиться

7 ответов

В общем, статический означает «связанный с самим типом , а не с экземпляром типа».

. Это означает, что вы можете ссылаться на статическую переменную, даже не создавая экземпляров этого типа, и любой код, ссылающийся на переменную, ссылается на те же самые данные. Сравните это с переменной экземпляра: в этом случае существует одна независимая версия переменной для каждого экземпляра класса. Так, например:

Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);

выводит 10: y.instanceVariable и x.instanceVariable разделены, потому что x и y относятся к к разным объектам.

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

Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);

тогда будет выведено 20 - есть только одна переменная, а не по одной на каждый экземпляр. Было бы яснее написать это как:

Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);

Это делает поведение более очевидным. Современные IDE обычно предлагают заменить второй листинг третьим.

Нет причин иметь встроенное объявление, инициализирующее значение, подобное приведенному ниже, поскольку каждый экземпляр будет иметь свой собственный НОМЕР , но всегда с номером то же значение (неизменяемо и инициализируется литералом). Это то же самое, что иметь только одну final static переменную для всех экземпляров.

private final int NUMBER = 10;

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

Но это имеет смысл, если инициализируется в конструкторе следующим образом:

// No initialization when is declared
private final int number;

public MyClass(int n) {
   // The variable can be assigned in the constructor, but then
   // not modified later.
   number = n;
}

Теперь для каждого экземпляра MyClass ,

298
ответ дан 23 November 2019 в 01:50
поделиться

Статический элемент - это один и тот же член во всех экземплярах класса и в самом классе.
Нестатический - один для каждого экземпляра (объекта), поэтому в ваш конкретный случай это пустая трата памяти, если вы не установите статический.

0
ответ дан 23 November 2019 в 01:50
поделиться

статический означает «связанный с классом»; без него переменная связана с каждым экземпляром класса. Если он статический, это означает, что у вас в памяти будет только один; в противном случае у вас будет по одному на каждый созданный вами экземпляр. статический означает, что переменная будет оставаться в памяти до тех пор, пока класс загружен; без него переменная может быть gc'd, когда ее экземпляр.

16
ответ дан 23 November 2019 в 01:50
поделиться

очень мало и статично

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

Поскольку это константа, она не может фактически храниться ни в одном классе или в экземпляре, но компилятор по-прежнему не позволит вам получить доступ к объектам экземпляра из статического метода, даже если он знает, какими они будут. Существование API отражения также может потребовать некоторой бессмысленной работы, если вы не сделаете его статичным.

1
ответ дан 23 November 2019 в 01:50
поделиться

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

private static final int NUMBER = 10;

Почему? Это уменьшает объем памяти, занимаемый каждым экземпляром. Возможно, это также благоприятно для попадания в кэш. И в этом есть смысл: static следует использовать для вещей, которые являются общими для всех экземпляров (то есть объектов) определенного типа (он же class ).

29
ответ дан 23 November 2019 в 01:50
поделиться

Как уже сказал Джон, статическая переменная, также называемая переменной класса, - это переменная, которая существует во всех экземплярах класса.

Я нашел пример этого здесь :

public class StaticVariable
{
  static int noOfInstances;
  StaticVariable()
  {
    noOfInstances++;
  }
  public static void main(String[] args)
  {
    StaticVariable sv1 = new StaticVariable();
    System.out.println("No. of instances for sv1 : " + sv1.noOfInstances);

    StaticVariable sv2 = new StaticVariable();
    System.out.println("No. of instances for sv1 : "  + sv1.noOfInstances);
    System.out.println("No. of instances for st2 : "  + sv2.noOfInstances);

    StaticVariable sv3 = new StaticVariable();
    System.out.println("No. of instances for sv1 : "  + sv1.noOfInstances);
    System.out.println("No. of instances for sv2 : "  + sv2.noOfInstances);
    System.out.println("No. of instances for sv3 : "  + sv3.noOfInstances);
  }
}

Вывод программы приведен ниже:

Как мы можем видеть в этом примере, каждый объект имеет свою собственную копию переменной класса.

C:\java>java StaticVariable
No. of instances for sv1 : 1
No. of instances for sv1 : 2
No. of instances for st2 : 2
No. of instances for sv1 : 3
No. of instances for sv2 : 3
No. of instances for sv3 : 3
2
ответ дан 23 November 2019 в 01:50
поделиться

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

Однако теперь вы можете сделать переменную общедоступной, поскольку никто не может изменить ее так же, как «System.out», это снова зависит от ваших намерений и того, чего вы хотите достичь.

0
ответ дан 23 November 2019 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: