非常具体的java构造函数和Object类问题

时间:2011-09-26 10:51:22

标签: java class constructor superclass

我在actionTable.get(state)有一个数组。 当我向数组添加一个onject,即Reduce时,reduce的属性似乎不适合它。 该数组的类型为Action [],其中Action是Reduce的超类,这可能是原因吗?

将reduce添加到数组中:

actionTable.get(state)[t] = new Reduce(st.items.get(item).prod);

在添加之前检查字段头是否已定义:

System.out.println(Prod.prods.get(st.items.get(item).prod).head);

检查新添加的reduce是否具有正确的head字段:

System.out.println(actionTable.get(state)[t].prod.head);

最后一个print语句出现NullPointerException.prod部分已定义,但.prod.head为空,即使原始prod对象具有已定义的头部。 这是Reduce的构造函数:

Reduce(int pr) {
    p = pr;
    length = Prod.prods.get(pr).length;
    prod = Prod.prods.get(pr);

}

定义了构造函数中赋值的所有RHS。所以,我不明白为什么当你通过actionTable访问它时,没有定义新Reduce有权访问的prod对象中的head字段。

2 个答案:

答案 0 :(得分:0)

信任继承和所有。最有可能使用数组的是,涉及不同的数组实例(如果放大/复制数组引用)。一些更多的System.out.println将帮助那里。

答案 1 :(得分:0)

你应该做的第一件事是:在你的IDE中找到你的断点视图,检查“停止抛出异常”并且可能给出名称NullPointerException。 然后在调试器中运行代码,它将完全停止在抛出NullPointerException的位置。