Я думаю, вы ищете что-то вроде этого:
public class TestClass {
public final String hallo;
public static final String halloSecond = "Saluto!";
TestClass(String hello){
String hallo = hello;
}
public static void main(String[] args) {
TestClass test = new TestClass("Tjena!");
System.out.println("I want "Tjena!": " + test.hallo);
TestClass testSecond = new TestClass("1");
System.out.println("I want Saluto!:" + test.halloSecond);
System.out.println("I want Saluto!:" + testSecond.halloSecond);
}
}
Значение hallo
устанавливается в каждом случае TestClass
. Значение halloSecond
является константой, разделяемой всеми экземплярами класса и видимой для всего приложения. Обратите внимание, что с этим кодом ваш IDE / компилятор, вероятно, выдаст вам предупреждение на test.halloSecond
- оно должно быть квалифицировано по имени класса, например TestClass.halloSecond
, а не по имени экземпляра.
Обновление глобальных переменных: Основная проблема с глобальными переменными состоит в том, что они создают код
- труднее понять - если метод использует глобальные переменные, вы не можете просто увидеть из его сигнатуры, какими данными он фактически манипулирует
- сложнее тестировать - тот же метод сложно тестировать изолированно в модульных тестах, поскольку перед каждым модульным тестом необходимо (пере) установить все глобальные переменные, от которых он зависит, до желаемого состояния
- сложнее поддерживать - глобальные переменные создают зависимости, которые легко превращают код в запутанный беспорядок, где все зависит от всего остального
В Java все находится внутри класса, поэтому у вас не может быть "классических" глобальных переменных, как в C / C ++. Однако открытый статический член данных по-прежнему является глобальной переменной.
Обратите внимание, что в приведенном выше примере кода halloSecond
является глобальной константой , а не переменной (как она объявлена final
и является неизменной), что устраняет многие из этих проблем (за исключением, может быть, проблема зависимости).