为什么出现Exception in thread "main" java.lang.NullPointerException

packagecom.library;importjava.util.*;publicclassBookItem{privateArrayList<Book>books;... package com.library;
import java.util.*;
public class BookItem {
private ArrayList<Book> books;

public BookItem()
{
ArrayList<Book> books=new ArrayList<Book>();
}
public void addBook(Book book)
{
books.add(book); ///java.lang.NullPointerException
}
public Iterator<Book> iterator()
{
return books.iterator();
}
public String toString()
{
for(Book p:books)
{
return p.getId()+":"+p.getName();
}
return null;

}

public static void main(String[] args)
{

BookItem books=new BookItem();
Book book=new Book();
book.setId(1);
book.setName("English");
books.addBook(book); ///java.lang.NullPointerException
books.toString();
}
展开
 我来答
百度网友0eb7b4e
2015-06-08 · TA获得超过133个赞
知道小有建树答主
回答量:93
采纳率:0%
帮助的人:65.7万
展开全部
错误类型是空指针。
private ArrayList<Book> books;

这一句,books没有new,所以从头到尾一直是null,你用null调用对象方法,肯定是空指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5ebfa24
2015-06-08 · 超过34用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:66.7万
展开全部
构造函数中去掉 ArrayList<Book> 的声明。如果此处声明了,则认为books为局部变量,而不是你在类中声明的属性books。

构造函数修改后如下:
public BookItem()
{
books=new ArrayList<Book>();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
简讯快递
2015-06-08 · TA获得超过1202个赞
知道小有建树答主
回答量:1926
采纳率:33%
帮助的人:514万
展开全部
改成这样试试

private ArrayList<Book> books;

public BookItem()
{
books=new ArrayList<Book>();
}
这个地方也有问题。。。。
public String toString()
{
for(Book p:books)
{
return p.getId()+":"+p.getName();
}
return null;

}
---------------------------------
这样是返回不了所有book的,所有连起来再return吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式