构造函数调用中的Java空指针异常
如果在其他地方以某种方式回答了这个问题,我表示歉意,但我对java不够精通,无法从其他情况中识别类似的问题 这里可能很难获取所有信息,因此我将尝试获取基本信息 我正在编写一个日历程序,当我在demo类中调用构造函数时:构造函数调用中的Java空指针异常,java,nullpointerexception,Java,Nullpointerexception,如果在其他地方以某种方式回答了这个问题,我表示歉意,但我对java不够精通,无法从其他情况中识别类似的问题 这里可能很难获取所有信息,因此我将尝试获取基本信息 我正在编写一个日历程序,当我在demo类中调用构造函数时: System.out.println("Enter month (1 - 12)"); month = console.nextInt(); System.out.println("Enter year (> 1500)"); ye
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,因为我使用的是我已经编写的date类,对于日历,只需要月份和年份,所以我将day设置为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;'我会试试那些打印语句,也许会有帮助
伊迪丝2:好吧,我想我知道了。谢谢你的帮助。学习过程和所有这些。发生在您使用null
时,您应该在某个地方使用对象。(有关更多详细信息,请参阅参考资料)
简而言之:在代码中的某个地方有一个空引用而不是对象。您可能以前没有初始化它,这就是为什么会出现异常
关于错误声明,该对象可能是firstDate
。您可以使用System.out.println(firstDate)检查它代码>调用,在firstDate.setDate(m,1,y)之前代码>呼叫。当您在应该使用对象的某个地方使用null
时,它可能会打印出null
。(有关更多详细信息,请参阅参考资料)
简而言之:在代码中的某个地方有一个空引用而不是对象。您可能以前没有初始化它,这就是为什么会出现异常
关于错误声明,该对象可能是firstDate
。您可以使用System.out.println(firstDate)检查它代码>调用,在firstDate.setDate(m,1,y)之前代码>呼叫。可能它会打印出null
我的第一个猜测是firstDate
为null或控制台为null。从你发布的内容很难判断。你如何初始化firstDate
?我会添加System.out.println(firstDate)代码>和系统输出打印项次(每月第一天)在第一个现有方法调用之前,将code>发送到构造函数。您正在声明firstDate,但没有初始化它,因此它为null,从而导致异常。我的第一个猜测是firstDate
为null firstDate或console为null。从你发布的内容很难判断。你如何初始化firstDate
?我会添加System.out.println(firstDate)代码>和系统输出打印项次(每月第一天)在第一个现有方法调用之前,将代码>发送到构造函数。您正在声明firstDate,但没有初始化它,因此它为null,从而导致异常。因此在日历构造函数中,第一行应该是private ExtDate firstDate=new ExtDate()?还是应该在日历构造函数之外的其他地方初始化firstDate?因此在日历构造函数中,第一行应该是私有ExtDate firstDate=new ExtDate()?还是应该在日历构造函数之外的其他地方初始化firstDate?