Java NullPointException和对象数组的长度
我在处理一系列对象时遇到了很大的麻烦。基本上,我定义如下:Java NullPointException和对象数组的长度,java,arrays,oop,constructor,Java,Arrays,Oop,Constructor,我在处理一系列对象时遇到了很大的麻烦。基本上,我定义如下: public class PlayersList { private Player[] players; private int length; private int numPlayer = 0; } 在这种情况下,哪些播放器来自数据类型播放器: public class Player { public String UserName; public Player(String UserName) { this.UserName
public class PlayersList
{
private Player[] players;
private int length;
private int numPlayer = 0;
}
在这种情况下,哪些播放器来自数据类型播放器:
public class Player
{
public String UserName;
public Player(String UserName)
{
this.UserName = UserName;
}
}
现在,当我尝试调用涉及遍历对象数组或对象数组长度的方法时,我得到了一个NPE。我从一个3个成员的数组开始,我已经初始化了所有3个成员,所以我不会得到类似的结果。但是,如果我尝试使用以下内容:
public Player findPlayer(String Player)
{
for(int i = 0; i < players.length; i++)
{
if(Player.equals(players[i].UserName))
{
return players[i];
}
}
return null;
}
您正在这里初始化一个本地数组
Player[] players = new Player[3];
改为这样做
players = new Player[3];
构造函数中的
players
变量是字段
public class PlayersList
{
private Player[] players;
public PlayersList()
{
// shadows the field
Player[] players = new Player[3];
...
在构造函数中执行Player[]players
,将声明一个同名的新变量。删除该类型后,它将成为字段的赋值,而不是声明:
public PlayersList()
{
// now refers to the field
players = new Player[3];
你能告诉我们你在数组中初始化
Player
对象的代码吗?很抱歉,我现在添加了它。我想在“Player”类周围应该有另一组大括号。首先,重要的是,不要使用与类相同的名称命名局部变量-不要使用字符串播放器
,同时参考类播放器
。java代码约定总是以小写字母开头变量名:stringplayer
。这是一个很好的习惯,可以确保类和变量永远不会使用相同的名称。谢谢你的建议,我会记住的!非常感谢。这似乎一直是个问题。现在,出于好奇,这个本地数组到底发生了什么?在我创建它之后,它几乎丢失了,或者它有什么重要意义吗?当您使用构造函数时,您最终在堆内存中得到了数组,但是您没有对它的任何引用。因此,它可用于垃圾收集。当垃圾回收发生时,将从该对象中释放内存。
public PlayersList()
{
// now refers to the field
players = new Player[3];