从类调用方法时发生NullPointerExceptionError

时间:2019-02-15 10:33:25

标签: java class nullpointerexception

从main方法的Book类中调用dlete方法会产生NullPointerException。从Main类中运行delete方法时,效果很好。

线程“主”中的异常java.lang.NullPointerException     在algorithm / algorithms.Main.main(Main.java:20)

我想念什么?

主要:

private static Book book;

public static void main(String[] args) {

    Book[] bookArray = {new Book(123, "Book1"), 
            new Book(321, "Book2"), 
            new Book(456, "Book3"), 
            new Book(654, "Book4"), 
            new Book(789, "Book5")};

    System.out.println(bookArray.length);
    bookArray = book.removeBook(bookArray, 456);
    System.out.println(bookArray.length);

    }

Book类方法(不包括属性,getter和setter):

 public Book[] removeBook(Book[] books, int findISBN) {

    Book[] newArray = new Book[books.length - 1];
    int j = 0;

    for (int i = 0; i < books.length; i++) {
        if(books[i].getISBN() != findISBN) {
            newArray[j] = books[i];
            j++;
        }
    }
    return newArray;
}

2 个答案:

答案 0 :(得分:3)

您已将Book声明为静态变量,但尚未对其进行初始化...

private static Book book;

执行此操作时...

bookArray = book.removeBook(bookArray, 456);

booknull

看起来您需要...

  1. 为您的静态new Book()分配一个Book
  2. 您可以在static类中创建方法Book,并在Book.removeBook(...)方法中调用main

答案 1 :(得分:1)

您只用Book声明了对private static Book book;的引用。在调用任何方法之前,必须先实例化它。在book = new Book();方法中包含main

在同一个资源类中包含一个资源和对该资源执行的操作(在您的情况下,Book是该资源)是不好的设计,这也不值得。

最好创建另一个类似BookOperations的类,并在其中编写所有逻辑,以使您的Book资源整洁而简单。