Лучшая практика объявления переменной как статической, а не статической - PullRequest
0 голосов
/ 12 июня 2019

У меня есть класс Java, в котором есть локальные переменные,

private final String name;

Есть ли преимущество использования static?

static final name;

Оба работают, но я думал, что, когда объект, доступный только для чтения, совместно используется классами, имеет смысл создать статический объект.Мысли?

1 Ответ

1 голос
/ 12 июня 2019

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

Сжатые эффекты ...

1: ... статические переменные могут быть доступны без создания экземпляра этого класса, а нестатические переменные - нет. Это связано с тем, что для нестатических переменных требуется установить экземпляр этого класса, поскольку они могут отличаться от экземпляра к экземпляру, а статические переменные, такие как File.separatorChar, зависят от класса.

2: ... Нестатические переменные недоступны из статических методов. Это означает, что это работает:

static int countInstances = 0;
int myID;

public TestClass() {
    countInstances++;
    myID = countInstances;
}

public static void main(String[] args) {
    System.out.println(countInstances);
}

Пока это не скомпилируется:

public static void main(String[] args) {
    System.out.println(myID); // Won't compile
}

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

3: ... содержимое статической переменной будет одинаковым для нескольких экземпляров. Пример:

static int countInstances = 0;
public TestClass() {
    countInstances++;
    System.out.println(countInstances);
}

public static void main(String[] args) {
    new TestClass();
    new TestClass();
}

Это будет иметь выходные данные 1 и 2. Оба раза счетчик увеличивается, и поскольку переменная относится не к одному из экземпляров, а к самому классу, ее содержимое обновляется для каждого экземпляра при обращении к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...