Java对象创建问题

时间:2015-01-08 17:24:18

标签: java arrays object constructor instance-variables

我正在尝试将“A”字符串传递给构造函数。我遇到的问题是必须设置的实例变量没有填充任何东西。现在我正在尝试与我不同的事情。一旦我用数组变量尝试任何东西,它就会给出一个NPE。那么如何解决这个问题并在将来避免它。谢谢!

public Array(String x){
        if(x == "A" ){
            array = { { 1, 1 }, { 1, 1 }, { 1, 1 } };
        }
        if(x == "B"){
            array = { { 2, 2 }, { 2, 2 }, { 2, 2 } }; 
        } 
        if(x == "C"){
            array = { { 3, 3 }, { 3, 3 }, { 3, 3 } };
        }
    }

2 个答案:

答案 0 :(得分:2)

array可能总是null。有两个原因......

首先,比较逻辑是不正确的。请勿使用==来比较字符串use String.equals instead

其次,逻辑没有默认条件。如果没有满足任何条件会发生什么?永远不会初始化array。添加默认值:

if(x.equals("A") ){
    array = { { 1, 1 }, { 1, 1 }, { 1, 1 } };
} else if(x.equals("B")){
    array = { { 2, 2 }, { 2, 2 }, { 2, 2 } }; 
} else if(x.equals("C")){
    array = { { 3, 3 }, { 3, 3 }, { 3, 3 } };
} else {
    // set array to a default value?
    // throw an exception?
    // something else?
}

(注意:如果在构造函数中抛出异常在Java中是好的或坏的做法,我无法肯定地说。很容易就是JVM在不熟悉的事情上如何表现的细节。如果这是不好的做法,那么也许工厂方法而不是构造函数将是一个很好的方法。)

答案 1 :(得分:0)

public ArrayWrapper(String x){ //"Array" is a confusing name for a class
    if(x == null) {
        System.err.println("x is null! Please instantiate x before calling Array().");
        return;
    }
    //...
}