Java 类公司中的NullPointerException
有两类:工人和公司。 在公司级别中,有:Java 类公司中的NullPointerException,java,Java,有两类:工人和公司。 在公司级别中,有: public class Company { private worker[] p; private int currentID; private String nameCO; Company(String cNameCO){this.nameCO = cNameCO;} public boolean hireWorker(worker w){ p[this.currentID].setName
public class Company {
private worker[] p;
private int currentID;
private String nameCO;
Company(String cNameCO){this.nameCO = cNameCO;}
public boolean hireWorker(worker w){
p[this.currentID].setName(w.getName));
p[this.currentID].setSurName(w.getSurName));
return true;
}
最后出现了一个错误java.lang.NullPointerException
怎么了?请帮帮我。我认为有几件事你需要改变:
1. <代码>私人工作者[]p代码>未初始化。
2.
w.getName
和w.getName
是方法,应该以一对括号结束()
此外,请使用不断增长和收缩的数据结构,如
ArrayList
,因为不会有固定数量的员工。最有可能的p
是null
,因为您没有将其设置为任何值
private Worker[] p = new Worker[100];
然而,更好的选择是使用这样的列表
private final List<Worker> workers = new ArrayList<>();
public void hireWorker(Worker w) {
workers.add(w);
}
private final List workers=new ArrayList();
公共租赁工(工人w){
增加(w);
}
或者p
,p[this.currentID]
或者worker w
为空,调试肯定会有帮助。加上getName
和getName
看起来不像正确的方法调用,您确定提供的代码可以编译吗
我的选择是你没有用一个值初始化p
,导致默认值为null
(对象)。首先,对不起,我的英语很差。我将尝试向您解释此代码中的错误
在公共布尔函数hireWorker中,需要关闭whit'}'
然后修改向量p[],但在任何站点中初始化此数组。然后,当您执行p[1].setName('herius')时,java抛出java.lang.NullPointerException
您需要先初始化向量。您还没有初始化工作数组和currentID-因此,尝试使用int(=0)的初始值访问数组的字段实际上是non-但是您尝试访问其中的setName方法,因此在访问p[0]时实际抛出NPE。setName(…)因为那里没有worker对象。(顺便说一句,我刚刚在链接带有Java 8 int的数据类型时发现,在Integer.class:的帮助下,这些数据类型将能够保存无符号值。)感谢您描述我的观点,这就是我说的p[this.currentID]
为空-无论索引是否存在问题,就像在NPE之前发出ArrayIndexOutOfBoundsException一样-因为不是这种情况,我假定索引是有效的,无论是默认索引还是自定义索引。