构造函数调用中的Java Null指针异常

时间:2013-02-24 22:05:02

标签: java nullpointerexception

如果在某个地方已经以某种方式回答了这个问题,我很抱歉,但我不熟悉java,以便在其他情况下找出类似的问题。

在这里获取所有信息可能很难,所以我会尝试获取必需品。

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

        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:好吧,我想我已经明白了。谢谢您的帮助。学习过程等等。

1 个答案:

答案 0 :(得分:3)

当您在某处使用null时,

NullPointerException会出现,您应该使用对象。 (有关详细信息,请参阅参考资料)。

简而言之:在代码中的某处,您有一个空引用而不是一个对象。您之前可能没有初始化它,这就是您获得该异常的原因。

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