Обновление статических переменных в java
У меня есть класс со статическими переменными, как:
class Commons {
public static String DOMAIN ="www.mydomain.com";
public static String PRIVATE_AREA = DOMAIN + "/area.php";
}
и если я попытаюсь изменить домен из действия Android (или другого класса java) во время выполнения, переменная домена изменится, но PRIVATE_AREA не изменится. Почему?
4 ответов
это потому, что назначение статических полей происходит после загрузки класса (происходит только один раз) в JVM. The PRIVATE_AREA
переменная не будет обновляться, когда DOMAIN
переменной изменяется.
public class Test {
public static String name = "Andrew";
public static String fullName = name + " Barnes";
public static void main(String[] args){
name = "Barry";
System.out.println(name); // Barry
System.out.println(fullName); // Andrew Barnes
}
}
Я предлагаю вам использовать следующую структуру.
public class Test {
private static String name = "Andrew";
public static String fullName = name + " Barnes";
public static void setName(String nameArg) {
name = nameArg;
fullName = nameArg + " Barnes";
}
}
Условие_2.java
public class Test2 {
public static void main(String[] args){
System.out.println(Test.fullName); // Andrew Barnes
Test.setName("Barry");
System.out.println(Test.fullName); // Barry Barnes
}
}
PRIVATE_AREA не изменился, потому что он установлен на время объявления. При изменении домена он не влияет на PRIVATE_AREA. Может быть, лучше работать с сеттером(...) и методы getter () и локальные переменные. При получении PRIVATE_AREA вы снова создаете значение retrun.
присвоение переменной происходит во время загрузки класса, поэтому после этого, если вы измените значение одной статической переменной, она не будет отражать там, где она назначена другой переменной