2015-06-01 3 views
6

У меня есть класс со статическими переменными как:Обновления статические переменные в Java

class Commons { 
public static String DOMAIN ="www.mydomain.com"; 
public static String PRIVATE_AREA = DOMAIN + "/area.php"; 
} 

И если я пытаюсь изменить домен из Android деятельности (или другого класса Java) во время выполнения, переменных изменений домена, но PRIVATE_AREA не меняются. Зачем?

+0

Не вводить изменяемом статические переменные - это один из худших анти-patters в java, который вводит вопросы энтропии и ремонтопригодности. – rgasiore

ответ

6

Это происходит потому, что назначение статического полей происходит после загрузки класса (происходит только один раз) в JVM. Переменная 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"; 
    } 

} 

Test2.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 
    } 
} 
+0

Есть ли способ обновить вторую переменную или поделиться переменными между другими классами? – AlexBerry

+0

@AlexBerry Пожалуйста, смотрите мое редактирование! – SamTebbs33

+0

Учитывая, что вы в основном используете сеттер, я бы просто рекомендовал использовать структуру setter/getter вместо статики на первом месте. – Wald

0

PRIVATE_AREA did't изменения, потому что он установлен на время объявления. Когда вы меняете DOMAIN, это не влияет на PRIVATE_AREA. Возможно, лучше работать с методами setter (...) и getter() и локальными переменными. При получении PRIVATE_AREA снова создайте значение повторного использования.

0

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

Смежные вопросы