我是Java编程新手,我不明白我的代码中发生了什么。
它告诉我:
Exception in thread "main" java.lang.NullPointerException
at Main.Country.addMine(Country.java:37)
at Main.Main.main(Main.java:21)
Java Result: 1
我的主要.java很简单:
Continent Europe = new Continent("Europe");
Country asd = new Country("asd", Europe);
Mine mine = new Mine(100,100,100,100);
System.out.println(mine == null);
asd.addMine(mine); //dies here
这是addMine方法:
public void addMine(Mine mine) {
System.out.println(mine == null);
this.mines.add(mine); //dies here
this.iron += mine.iron;
this.gold += mine.gold;
this.stone += mine.stone;
this.wood += mine.wood;
System.out.println("Mine has been successfully added to the country with the given values."
);
而我的.java是:
public class Mine implements Building { //Building is an empty interface :)
protected int iron;
protected int gold;
protected int stone;
protected int wood;
public Mine(int iron, int gold, int stone, int wood) {
this.iron += iron;
this.gold += gold;
this.stone += stone;
this.wood += wood;
}
}
如您所见,我写了 2 个 println-s,它们都是假的,所以对象存在!我不明白为什么它显示 NullPointerException :(
如果失败:
this.mines.add(mine); //dies here
。那么我怀疑mines
是一个空引用。您尚未显示任何声明或初始化 - 但这应该是您的第一个停靠港。很可能这只是一个改变的情况:
private List<Mine> mines;
自
private List<Mine> mines = new ArrayList<Mine>();
或类似的东西。
是的,mine
可能不是null
但是mines
呢?我想这是一个ArrayList<Mine>
或类似的东西,你把它想象成mines = new ArrayList<Mine>()
吗?(或任何集合)
当您在 null 的引用上调用方法时,将引发 Null 指针异常。
this.mines.add(mine); //dies here
this.mines
参考显然等于null
。
还要尝试使引用变量名称以小写字母开头。
Continent Europe = new Continent("Europe");
->
Continent europe = new Continent("Europe");
以大写字母开头的名称是为类"保留"的。
在Java中,它被认为是一种很好的风格。
您的代码在
this.mines.add(mine);
在县级。
为了绕过错误,您应该在 County 类中创建一个局部变量(如果您没有它),它将
private List<Mine> mines;
您将通过添加以下内容来初始化它
mines=new LinkedList<Mine>();
上面的东西可以用一行代码编写,但这取决于你。
private List<Mine> mines=new LinkedList<Mine>();
您可以使用 List 的任何其他实现。