为什么我为null对象数组获取NullPointerException但该对象具有默认构造函数?

时间:2015-12-04 08:33:41

标签: java arrays object constructor nullpointerexception

我一直在为我创建的尚未初始化的对象数组获得<?php $url = $_GET['url']; echo '"'.$url.'"'.'is the requested page'; ?> 。但是我的播放器类有一个默认的构造函数,所以我认为它会没问题。为什么我不能用这些对象调用实例方法?

我的主要代码块:

NullPointerException

这是我的玩家构造函数:

public class Blackjack{
  public static void main(String[] args){
    Player[] p;
    p = new Player[6];
  }
}

4 个答案:

答案 0 :(得分:1)

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

p[i] = new Player();

之前,您可以调用这些元素的方法,因为在您执行此操作之前,p[i]每个null都包含i

答案 1 :(得分:1)

Player[] p; p = new Player[6];这将使p引用一个包含6个null元素的数组。 new Player[6];没有运行构造函数

答案 2 :(得分:1)

数组是容器。在costumer_entity s的情况下,他们持有引用。您可以将代码与

进行比较
Object

不为每个长度和类型创建一个类,而是通过class PlayerContainerWith3Elements { public Player element0; // default initialized with null public Player element1; public Player element2; } PlayerContainerWith3Elements p = new PlayerContainerWith3Elements(); p.element0.helloNullPointer(); 创建一个容器,这样更方便。但是像手动容器一样,您必须单独设置所有元素的引用。在小数组中通过初始化语法:

new Player[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.

或者在Java 8中你可以做到

Player[] p = new Player[3];
for (int i = 0; i < p.length; i++)
    p[i] = new Player();

答案 3 :(得分:0)

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

的空数组
Player[] p;
p = new Player[6];

p现在是:{ null, null, null, null, null, null }

相反,你想用Player-objects填充这个数组,所以试试这个:

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

p现在是:{ aPlayerInstance1, aPlayerInstance2, aPlayerInstance3, aPlayerInstance4, aPlayerInstance5, aPlayerInstance6 }