2016-04-21 16 views
-3

ich Anfänger sind in JAVA, ich lese diesen Code:Statische Mitglieder einer Klasse

class trying1{ 
    static int x =40; 
    public static void main(String ...s){ 
     trying1 t = new trying1(); 
     x =20; 
     System.out.println(x); // print 20 
     t.show1(); 
    } 

    void show1(){ 
     System.out.println(x); // print 20 
    } 

} 

class trying2{ 
    public static void main(String ...s){ 
    System.out.println(trying1.x); // print 40 
    } 
} 

Warum es in Klasse druckt trying2?

Ich weiß, dass statische Datenmitglieder Speicher nur einmal erhalten und jeder diesen Speicher teilt. Wie in der Klasse trying1, ‚x‘ ist eine Klasse var, & wenn ich den Wert von ändern x es in jeder Instanz der Klasse reflektiert wird, oder Sie können es Wert sagen wird an seinem Speicherplatz geändert. a Nach dem Kompilieren und Ausführen der Klasse trying1, wenn ich trying2.class ausführen zeigt es als Ausgabe.

Allerdings sollte der Wert auf 20 geändert werden?

Kann mir jemand dabei helfen.

Vielen Dank !!

+0

Wie läuft das? –

+0

** javac trying1.java **, daher werden zwei '.class' Dateien erstellt, die Sie mit dem Befehl java ausführen können. –

+0

bedeutet, dass Sie versuchen, 1, es läuft, endet, als nächstes starten Sie versuchen2, es läuft auch ..? –

Antwort

0

Vielleicht führen, dass Sie bestehen nie den neuen Wert, und jedes Mal, x = 40

+0

Kann es zum Laden der Klasse oder Laufzeit, dass das statische Mitglied erhalten Speicher beim Laden der Klasse –

+0

gibt es zwei isolierte Läufe, zwei Hauptleitungen, zwei execs und niemand persist –

1

Wenn Sie trying2 starten Sie eine andere JVM starten. Die erste Instanz der JVM, die trying1 als Hauptklasse verwendet hat, wird gestoppt, und was immer versucht wird, dies zu tun, hat keine Auswirkung auf die zweite JVM.

Verwandte Themen