Java 为什么我得到空对象数组的NullPointerException,但该对象有一个默认构造函数?

Java 为什么我得到空对象数组的NullPointerException,但该对象有一个默认构造函数?,java,arrays,object,constructor,nullpointerexception,Java,Arrays,Object,Constructor,Nullpointerexception,对于我创建的尚未初始化的对象数组,我不断得到一个NullPointerException。但是我的player类有一个默认构造函数,所以我认为它可以。为什么我不能用这些对象调用实例方法 我的主代码块: public class Blackjack{ public static void main(String[] args){ Player[] p; p = new Player[6]; } } 这是我的播放器构造函数: public class Player {

对于我创建的尚未初始化的对象数组,我不断得到一个
NullPointerException
。但是我的player类有一个默认构造函数,所以我认为它可以。为什么我不能用这些对象调用实例方法

我的主代码块:

public class Blackjack{
  public static void main(String[] args){
    Player[] p;
    p = new Player[6];
  }
}
这是我的播放器构造函数:

public class Player {

    private int money;
    private int bet;
    private int handValue;

    // Player Constructor
    public Player() {
        handValue = 0;
        money = 100;
        this.bet = 0;
    }
}

实例化数组后,必须使用以下命令实例化数组的每个元素:

p[i] = new Player();

在您可以调用这些元素的方法之前,因为在您这样做之前,
p[i]
为每个
i
Player[]p;p=新玩家[6]
这将使
p
引用6个空元素的数组<代码>新玩家[6]不运行构造函数

您的代码创建了一个大小为
6

Player[] p;
p = new Player[6];
p
现在是:
{null,null,null,null,null}

相反,您希望用播放器对象填充此数组,请尝试以下操作:

Player[] p = new Player[6];
for (int i = 0; i < p.length; i++){
    p[i] = new Player();
}
Player[]p=新玩家[6];
for(int i=0;i

p
现在是:
数组是容器。在
对象
s的情况下,它们保存引用。您可以将代码与

class PlayerContainerWith3Elements {
    public Player element0; // default initialized with null
    public Player element1;
    public Player element2;
}

PlayerContainerWith3Elements p = new PlayerContainerWith3Elements();
p.element0.helloNullPointer();
不为每种长度和类型创建一个类,而是通过
newplayer[3]
创建一个容器,这样做更方便。但与手动容器一样,您必须分别为所有元素设置引用。通过初始值设定项语法在小数组中:

Player[] p = new Player[]{ new Player(), new Player(), new Player()};
// => makes a new Player[3] and puts the three objects in the 3 slots.
有大一点的环吗

Player[] p = new Player[3];
for (int i = 0; i < p.length; i++)
    p[i] = new Player();
Player[] p = Stream.generate(Player::new).limit(3).toArray(Player[]::new);