2012-04-07 6 views
0
public class Main { 

    public static void main(String[] args){ 

     Class2 class2Object = new Class2(); 

     //class2Object 
     //num1 
     class2Object.setNumber(class2Object.number1, 1) ; 

     class2Object.getNumber(class2Object.number1); 
    } 

} 

public class Class2 { 
    public int number1; 

    public void setNumber(int x, int value){ 
     x = value; 

    } 
    public void getNumber(int number){ 
     System.out.println("Class2, x = "+number); 
    } 
} 

Ich habe 2 Klasse: Class2 und Main. Ich weise eine Instanzvariable 1 in der Hauptklasse zu. Warum wird class2Object.number1 nicht dem Wert 1 zugewiesen? Die Ausgabe ist 0.java Variablen und Parameter

Antwort

3

Ihr Setter nichts tut:

public void setNumber(int x, int value){ 
    x = value; // This just overwrites the value of x! 
} 

Ein Setter sollte nur einen Parameter haben. Sie müssen den empfangenen Wert auf das Element Feld zuzuordnen:

// The field should be private. 
private int number; 

public void setNumber(int value){ 
    this.number = value; 
} 
+0

Was passiert, wenn ich eine Menge ganzer Zahlen wie Nummer1 haben, Zahl2 ... ich für alle Variablen einen Setter brauchen? – user1050548

+1

Sie brauchen Array von List in diesem Fall, denke ich. – sarwar026

+0

Die meisten Leute haben einen separaten Getter und Setter für jede Variable. Es wird deutlich, welche Variable mit der Methode gesetzt wird. – user12345613

1

Da Sie wie folgt zuweisen soll:

private int number1; 

public void setNumber(int value){ 
    this.number1 = value; 
} 
+2

haben Sie vergessen, den unnötigen Parameter zu entfernen. – twain249

+0

ohh sorry, ja @ twain249. Du hast recht. Ich aktualisiere meine Codes. – sarwar026

2

In Java primitive Typen (wie int) von Wert übergeben werden, nicht durch Verweis .

So sagen:

Class2 class2Object = new Class2(); 
class2Object.setNumber(class2Object.number1, 1) ; 

geht class2object.number1 nach Wert, nicht Bezug genommen wird. So ist der Parameter x in setNumber ein ganz neuer Int und zeigt nicht auf den gleichen Ort wie number1 in class2object. Die Methode überschreibt nur den Wert des neuen int x und ändert den Wert, auf den number1 zeigt, nicht.

Um den Wert einzustellen es sein sollte:

void setNumber(int newNumber) { this.number1 = newNumber; }