【问题标题】:Java; I initialize an array in a constructor but it only gives me back zero values, why?爪哇;我在构造函数中初始化了一个数组,但它只给了我零值,为什么?
【发布时间】:2014-10-23 09:37:15
【问题描述】:

我在构造函数中初始化了一个数组,但它只给了我零值,为什么? 我是在处理 2 思想中写的,但我认为这与问题无关。

另外,在构造函数之外初始化 this 的语法是什么? (创建对象时) 抱歉,如果我不清楚我的问题。

class ArrayInClass {
    String test;
    private int[] data = new int[3];

    // ---
    ArrayInClass(String TempTest) {
        test = TempTest;
    }

    // ---
    public ArrayInClass() {
        data = new int[] { 10, 20, 25 };
    }

}

ArrayInClass InsTArrayInClass = new ArrayInClass ("TEST" );
println( InsTArrayInClass.test);
println( InsTArrayInClass.data[0] + "  "  + InsTArrayInClass.data[1]);

【问题讨论】:

  • ` new ArrayInClass ("TEST" );` 调用ArrayInClass (String TempTest)constructor。

标签: java arrays class initialization


【解决方案1】:

您没有调用默认构造函数,在该构造函数中初始化数组。您正在调用一个仅初始化test 的构造函数。

要么改变:

InsTArrayInClass = new ArrayInClass ("TEST" );

到:

InsTArrayInClass = new ArrayInClass ();

或者从另一个构造函数调用你的默认构造函数:

ArrayInClass (String TempTest)
{
    this();
    test = TempTest;
}

【讨论】:

  • OP 的类没有默认构造函数。甚至认为一个看起来像default one
  • @Kent 那你怎么称呼无参数构造函数呢?是不是只有编译器生成的时候才叫默认?
  • 默认构造函数使用其默认值初始化字段。像 object=null, int=0 等等。没有别的了。和public SomeClass(){}一样。
【解决方案2】:

您在 nullary 构造函数中初始化数组,这不是您在测试代码中调用的那个。您可以通过委托给 nullary 构造函数来修复它:

ArrayInClass (String TempTest)
{this(); test = TempTest;}

请注意,在这种情况下,data 的初始化程序是多余的:

private int[] data = new int[3];

您在上面创建的数组将立即被在 nullary 构造函数中创建和初始化的数组替换。您可以随意删除该初始化程序:

private int[] data;

最后一点,您还必须花一些时间来学习和应用 Java 编码标准。

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2020-05-01
    • 2021-08-05
    • 2015-03-09
    • 2017-06-26
    相关资源
    最近更新 更多