我的程序将运行此异常:
以下是示例:
case 3:
//display contact
cList.displayContacts();
public void displayContacts(){
int i;
for(i=0; i < myContacts.length; i++){
Contact c = myContacts[i];
System.out.println("Name: " + c.getName());
System.out.println("Number: " + c.getNumber());
System.out.println("Email: " + c.getEmail());
System.out.println("------------------------------------");
}
}
atlog atlog:
线程“main”中的异常java.lang.NullPointerException
在ContactList.displayContacts(ContactList.java:45) 在ContactListDriver.main(ContactListDriver.java:67)
答案 0 :(得分:1)
显然c
为空。您需要检查数组myContacts
是否在从i = 0到myContacts.length的整个范围内初始化
修改
根据您的上一条评论我的猜测是正确的,myContacts[]
数组中的一些引用是null
。
您可以打印整个数组并查看哪些元素为空:
System.out.println(Arrays.toString(myContacts));
另一种可能性是myContacts
本身为空,因此它会提前NPE
抛出,如 T.J中所述。克劳德的答案。
答案 1 :(得分:1)
有两种可能性:
由于myContacts
为null
,此行会抛出,因此尝试访问length
会导致NPE:
for(i=0; i < myContacts.length; i++){
由于c
为null
,此行会抛出,因此尝试访问其getName
方法会导致NPE:
System.out.println("Name: " + c.getName());
如果myContacts
中的至少一个条目为null
,就会发生这种情况。
通过查看第45行,你会知道哪一个。(这可能是提供问题的有用信息!)
您可以通过调试器中的代码来调试这些类型的东西。
答案 2 :(得分:0)
我的Contacts单元格中的一个未初始化(默认值为null), 这就是你得到一个NULL点异常的原因。
添加空检查:
Contact c = myContacts[i];
if (null != c) {
...
}