2015-06-01 23 views
6

ich eine Klasse mit statischen Variablen wie:aktualisiert statische Variablen in Java

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

Und wenn ich versuche, DOMAIN von einer Android-Aktivität zu ändern (oder einem anderen Java-Klasse) während der Laufzeit, die DOMAIN variable Änderung aber PRIVATE_AREA ändere dich nicht. Warum?

+0

zugeordnet Sie wandelbar statische Variablen nicht vorstellen - das ist einer der schlimmsten Anti-Patters in Java Einführung von Entropie und Wartbarkeit Probleme – rgasiore

Antwort

6

Dies liegt daran, die Zuweisung von statischen Feldern passiert, wenn die Klasse (tritt nur einmal) in die JVM geladen wird. Die Variable PRIVATE_AREA wird nicht aktualisiert, wenn die Variable DOMAIN geändert wird.

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 
    } 
} 

Ich schlage vor, dass Sie die folgende Struktur verwenden.

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

gibt es eine Möglichkeit, die zweite Variable zu aktualisieren oder Variablen zwischen anderen Klassen teilen? – AlexBerry

+0

@AlexBerry Siehe meine Bearbeitung! – SamTebbs33

+0

In Anbetracht der Tatsache, dass Sie im Grunde einen Setter verwenden, würde ich nur Setter/Getter-Struktur anstelle von Statik an erster Stelle empfehlen. – Wald

0

PRIVATE_AREA did't ändern, weil es auf der Deklaration festgelegt ist. Wenn Sie DOMAIN ändern, hat dies keine Auswirkungen auf PRIVATE_AREA. Vielleicht ist es besser, mit Setter (...) und Getter() Methoden und lokalen Variablen zu arbeiten. Wenn Sie PRIVATE_AREA erhalten, erstellen Sie den Retrun-Wert erneut.

0

Zuordnung von variablen geschieht an der Ladezeit der Klasse ist, warum nach, dass, wenn Sie den Wert eines statischen Variablen ändern, ist es nicht dort reflektiert, wo es auf eine andere Variable