如果在某个地方已经以某种方式回答了这个问题,我很抱歉,但我不熟悉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:好吧,我想我已经明白了。谢谢您的帮助。学习过程等等。
答案 0 :(得分:3)
null
时,NullPointerException会出现,您应该使用对象。 (有关详细信息,请参阅参考资料)。
简而言之:在代码中的某处,您有一个空引用而不是一个对象。您之前可能没有初始化它,这就是您获得该异常的原因。
关于您的错误声明,该对象可能是firstDate
。您可以在System.out.println(firstDate);
来电之前通过firstDate.setDate(m, 1, y);
来电查看。可能会打印出null
。