在另一个构造函数中调用构造函数(并从cons.1获取修改后的变量)

时间:2014-12-02 22:31:20

标签: java class constructor this instance

我在网上搜索但没找到我的答案。这是我的问题。 这里的目标是仅在我的第一个构造函数中使用我的验证(如果codeForme< 0 || codeforme> 9)......等等,因为我的另外两个构造函数正在调用第一个构造函数。

但是,当我在我的第二个构造函数中输入codeforme = 20时,它在运行第一个构造函数后不会被修改。我知道这个问题可能是来自this.codeForme = forme,因为它从我们的参数中取代了forme而不是第一个的codeForme。 应该有一个简单的方法,谢谢!

到目前为止,这是我的代码:

public class carteMere {

    // variable(s) de classe s'il y a lieu
    private static int identifiant = 0;
    // variable(s) d'instance s'il y a lieu
    private String marque;
    private int codeForme = 0;
    private int capaciteMaxMemoire = 8;
    private int memoireInstalle = 0;
    private int codeCarte;
    // constructeur(s) s'il y a lieu
    public carteMere( String marque,
                      int codeForme,
                      int capaciteMaxMemoire,
                      int memoireInstalle) {
        this.marque = marque;
        this.identifiant = identifiant+1;
        this.codeCarte=this.identifiant;
        if(codeForme < 0 || codeForme > 9){
            codeForme = 0;
        }
        if(capaciteMaxMemoire<=0){
            capaciteMaxMemoire = 8;
        }
        if(memoireInstalle < 0){
            memoireInstalle = 0;
        }else if (memoireInstalle> capaciteMaxMemoire){
            memoireInstalle = capaciteMaxMemoire;
        }
        codeForme = codeForme;
        capaciteMaxMemoire = capaciteMaxMemoire;
        memoireInstalle = memoireInstalle;
    }
    public carteMere(int forme, int capaciteMax, int memoireInstalle){
        this("ASUS", forme, capaciteMax, memoireInstalle);
        this.codeForme = forme;
        this.capaciteMaxMemoire = capaciteMax;
        this.memoireInstalle = memoireInstalle;
        this.codeCarte=this.identifiant;
    }
    public carteMere(int codeForme, int memoireInstalle){
        this(codeForme, 8, memoireInstalle);
        this.codeForme=codeForme;
        this.memoireInstalle=memoireInstalle;
        this.identifiant = identifiant;
        this.codeCarte=this.identifiant;
    }

编辑:

如果我这样做: carte1 = new carteMere(10,8);

然后我检查carte1,codeForme是10,它应该是0,因为它应该在第一个构造函数中修改过。

1 个答案:

答案 0 :(得分:1)

使用this来验证您的实例变量,就像您为marqueindentifiantcodeCarte所做的那样。如果不在验证范围之外,还可以在else上使用if为变量指定正常值。例如。 codeForme

if(codeForme < 0 || codeForme > 9) {
    this.codeForme = 0;
}
else {
    this.codeForme = codeForme;
}

同样适用于capaciteMaxMemoirememoireInstalle