如果在其他地方以某种方式回答了这个问题,我深表歉意,但我不太精通Java,无法从其他情况中识别出类似的问题。

在这里获取所有信息可能很困难,因此我将尝试获取基本信息。

我正在编写一个Calendar程序,当我在演示类中调用构造函数时:

        System.out.println("Enter month (1 - 12)");
    month = console.nextInt();

    System.out.println("Enter year (> 1500)");
    year = console.nextInt();

    Calendar myCalendar = new Calendar(month, year);


我在调用构造函数的那一行得到了一个空指针异常。我在构造函数本身的第一个函数调用中也得到了一个:

    public Calendar(int m, int y)
{
    firstDate.setDate(m, 1, y);
    firstDayOfMonth();
}


setDate方法调用中的第二个数字是1,因为我使用的是已经编写的日期类,并且对于日历,只需要月份和年份,因此将日期设置为1。

之后,我的错误消息变得不太容易理解,如下所示:

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)


如果有任何区别,我正在使用DrJava来执行此操作。如果有人可以帮助我了解正在发生的事情,以便我可以解决此问题,那将是很好的。我知道这里可能没有足够的信息来提供实际的解决方案,但是如果我了解发生了什么,我可以通过一些额外的研究来弄清楚。我知道当使用尚未初始化的参数调用函数时会发生空指针异常,但是在方法调用之后,在代码中回溯,我找不到任何地方未定义的东西。我认为那些其他错误消息将帮助我知道空指针从何而来。

在此先感谢您,如果我违反了某些规则,我们深表歉意。

Edit1:我正在按以下方式初始化firstDate:`private ExtDate firstDate;'。我将尝试使用这些Print语句,也许会有所帮助。

Edit2:好吧,我想我明白了。谢谢您的帮助。学习过程以及所有这些。

最佳答案

当您在某个应使用对象的地方使用null时,会出现NullPointerException。 (有关更多详细信息,请参见参考资料)。

简而言之:在代码中的某个地方,您有一个空引用而不是一个对象。您可能之前没有初始化过,这就是为什么您遇到该异常的原因。

关于您的错误声明,该对象可能是firstDate。您可以在System.out.println(firstDate);调用之前通过firstDate.setDate(m, 1, y);调用进行检查。可能会打印出null

关于java - 构造函数调用中的Java Null指针异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15057203/

10-14 12:25
查看更多