ArrayList的对象导致NullPointException

问题描述 投票:1回答:1

几年后我刚回到Java,并且在迁移应用程序时遇到问题。

我想将Book添加到类库中,并编写了该代码:

public class Book{
    String author;
    String title;
    String code;
    int num;
    int num2;

    public Book(String author, String title, String code, int num, int num2) {
        this.author = author;
        this.title = title;
        this.code = code;
        this.num= num;
        this.num2= num2;
    }

图书馆:

import java.util.ArrayList;


public class Library{
    ArrayList<Book> books;

    public void AddBook(String a, String b, String c, int ab, int ac) {
        books.add(new Book(a,b,c,ab,ac));
            }

    public void showBooks(){
        System.out.println(books);
    }

    public static void main(String[] args) {

        Library l1 = new Library();
        l1.AddBook("Adad", "dasdasd", "asdasdasdas", 2121, 31);
        l1.showBooks();
    }
}

但是我得到了NullPointException。用Library类中的AddBook方法指向行。即使经过研究,我也无法弄清楚。我认为这是一个简单的错误,但我看不到。可以看到我的错误的人解释我写错了什么吗?

java class
1个回答
2
投票

这是因为您从未初始化您的数组列表。试试这个:

public class Library{
ArrayList<Book> books = new ArrayList<>();

public void AddBook(String a, String b, String c, int ab, int ac) {
    books.add(new Book(a,b,c,ab,ac));
}

public void showBooks(){
    System.out.println(books);
}

public static void main(String[] args) {

    Library l1 = new Library();
    l1.AddBook("Adad", "dasdasd", "asdasdasdas", 2121, 31);
    l1.showBooks();
}
}

更好的做法是针对接口进行编码。因此更改此行:

List<Books> books = new ArrayList<>();

并且还将方法的第一个字母小写到addBook(...)

© www.soinside.com 2019 - 2024. All rights reserved.