2016-07-09 6 views
-1

Ich habe dieses Bit Code hier versuchen, eine Zeichenfolge aus einem, erhöhen jedes Mal, wenn eine neue Instanz erstellt wird.Wie Zeichenfolge aus "a" haben und jedes Mal erhöhen eine neue Instanz generieren

class TypeVariable{ 
    private static int variable_id = 96; 
    private static String variable_name; 

    public TypeVariable(){ 
     variable_id++; 
     variable_name = String.valueOf((char)variable_id); 
     } 

    @Override 
    public String toString() { 
     return this.variable_name; 
    } 
} 

aber wenn ich dies tun

TypeVariable one = new TypeVariable(); 
TypeVariable two = new TypeVariable(); 
TypeVariable three = new TypeVariable(); 
System.out.println(one); 
System.out.println(two); 
System.out.println(three); 

der Ausgang ist:

c 
c 
c 

statt:

a 
b 
c 

was kann ich tun, es richtig zu machen? Danke

+0

variable_name sh Es sollte nicht statisch sein. –

+0

Warum verwenden Sie 'static' für' variable_id'? und warum benutzt du 'static' für' variable_name'? Die Antwort ist da. – Wilson

Antwort

1

Machen variable_name nicht-statische, private String variable_name;.

Das Problem mit statischen ist, dass Ihre Variable zwischen Instanzen geteilt wird. Also, wenn Sie tun:

TypeVariable one = new TypeVariable(); 
System.out.println(one); 
TypeVariable two = new TypeVariable(); 
System.out.println(two); 
TypeVariable three = new TypeVariable(); 
System.out.println(three); 

Dann wird es funktionieren. Mit Ihrem vorherigen Code haben Sie jedoch zuerst die Variablen instanziiert, daher hat der Konstruktor jedes Mal variable_id++; eingegeben. Danach ändern Sie variable_name, da es zwischen Instanzen geteilt wird (statisch), alle Instanzen sehen die aktualisierte variable_name.

+0

Ich bekomme eine, a, a, wenn ich statische loswerden –

+0

Sorry, ich war zu schnell, 'variable_name' sollte nicht statisch sein, während' variable_id' statisch sein muss. So wird die ID mit jeder Instanz erhöht, aber der Name wird nicht zwischen den Instanzen geteilt. – HyperZ

0

Sie drucken das statische Feld variable_name, so dass Sie immer dasselbe erhalten, wenn Sie nach dem Erstellen der Instanzen drucken.

Sie wollen wahrscheinlich es Instanzfeld ändern:

private String variable_name; 
0

funktioniert, aber Sie erwägen nicht, dass variable_name zu statisch ist, also, wenn Sie brauchen, dass statische dann die Zeit, die Sie drucken betrachten ...

TypeVariable one = new TypeVariable(); 
System.out.println(one); 

TypeVariable two = new TypeVariable(); 
System.out.println(two); 

TypeVariable three = new TypeVariable(); 
System.out.println(three); 

aber wenn Sie das statische Schlüsselwort entfernen, dann können Sie tun:

TypeVariable one = new TypeVariable(); 
TypeVariable two = new TypeVariable(); 
TypeVariable three = new TypeVariable(); 
System.out.println(one); 
System.out.println(two); 
System.out.println(three); 
Verwandte Themen