2012-04-07 2 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); 
    } 
} 

J'ai 2 classes: Class2 et Main. J'attribue une variable d'instance à 1 dans la classe Main. Pourquoi class2Object.number1 n'attribue-t-il pas la valeur 1? La sortie est 0.variables java et paramètres

Répondre

3

Votre setter ne fait rien:

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

Un poseur doit avoir un seul paramètre. Vous devez affecter la valeur reçue au champ membre:

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

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

si j'ai beaucoup d'entiers comme nombre1, nombre2 ... je besoin d'un setter pour chaque variable? – user1050548

+1

Vous avez besoin de tableau de liste dans ce cas, je suppose. – sarwar026

+0

La plupart des gens ont un getter et un setter séparés pour chaque variable. Cela rend beaucoup plus clair quelle variable est définie par la méthode. – user12345613

1

Puisque vous devez assigner comme ceci:

private int number1; 

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

vous avez oublié de supprimer le paramètre inutile. – twain249

+0

ohh désolé, oui @ twain249. tu as raison. Je suis en train de mettre à jour mes codes. – sarwar026

2

En Java, les types primitifs (comme int) sont passés par valeur, non par référence .

le dire:

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

passe class2object.number1 par valeur et non par référence. Par conséquent, le paramètre x dans setNumber est un entier nouveau et ne pointe pas au même emplacement que number1 dans class2object. La méthode écrase simplement la valeur du nouvel int x et ne modifie pas la valeur pointée par number1.

Pour définir la valeur qu'il devrait être:

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