【问题标题】:java stack NullPointerExceptionjava 堆栈 NullPointerException
【发布时间】:2013-01-12 11:30:14
【问题描述】:

我有一个 Floor 类,它有一个 Stack 块,我不知道如何初始化它。我试过这样:

public class Floor {
    private Stack<Block> stack;
    private static int size;
    public void setStack(Stack<Block> stack) {
        this.stack = stack;
    }
    public void addBlock(Block b){
        stack.push(b);
    }
}

public class InputDevice {
    Block a0=new Block('I',false);
    Floor [] floor=new Floor[5];
    Stack<Block> stack=new Stack<Block>();
    floor[0].setStack(stack);
    floor[0].addBlock(a0);
}

【问题讨论】:

  • 为什么要使用static 修饰符作为大小字段?

标签: java null nullpointerexception stack


【解决方案1】:
Floor [] floor=new Floor[5];

你声明了数组,但你没有初始化元素,那么:

floor[0].setStack(stack); floor[0] 为空,npe!

另外我建议在你的FlooraddBlock(Block b)方法中,检查堆栈是否为空,如果为空,否则如果有人初始化Floor会出现问题(NPE),直接使用floor.addBlock(乙)。

【讨论】:

    【解决方案2】:

    您还没有初始化数组中的任何 Floor 对象。当您创建一个对象数组时,就像创建一个鸡蛋盒一样。在您先将一些鸡蛋放入纸箱之前,您不能使用任何鸡蛋。在初始化数组之前,您不能使用数组中的任何对象,这通常在 for 循环中完成。即,

    Floor [] floor=new Floor[5];
    for (int i = 0; i < floor.length; i++) {
      floor[i] = new Floor();
    }
    

    【讨论】:

    • 谢谢!我认为通过 new Floor[5] 我正在创建 5 个 Floor 对象,而实际上我只有一个指向 5 Floor 内存空间的指针。
    • @AlexandruCimpanu:完全正确!我喜欢使用的另一个比喻是将数组比作停车场。您首先必须在里面装满汽车才能驾驶。
    【解决方案3】:

    试试这个代码

    public class Floor {
        private Stack<Block> stack;
        private static int size;
        public void setStack(Stack<Block> stack) {
            this.stack = stack;
        }
        public void addBlock(Block b){
            stack.push(b);
        }
    }
    
    public class InputDevice {
        Block a0=new Block('I',false);
        Floor [] floor=new Floor[5];
        floor[0] = new Floor();
        Stack<Block> stack=new Stack<Block>();
        floor[0].setStack(stack);
        floor[0].addBlock(a0);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 2013-09-23
      • 1970-01-01
      • 2011-03-27
      • 2012-10-16
      • 2012-02-06
      • 1970-01-01
      • 2012-03-27
      • 2015-06-07
      相关资源
      最近更新 更多