Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造函数调用中的Java空指针异常_Java_Nullpointerexception - Fatal编程技术网

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

构造函数调用中的Java空指针异常,java,nullpointerexception,Java,Nullpointerexception,如果在其他地方以某种方式回答了这个问题,我表示歉意,但我对java不够精通,无法从其他情况中识别类似的问题 这里可能很难获取所有信息,因此我将尝试获取基本信息 我正在编写一个日历程序,当我在demo类中调用构造函数时: System.out.println("Enter month (1 - 12)"); month = console.nextInt(); System.out.println("Enter year (> 1500)"); ye

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

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

我正在编写一个日历程序,当我在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,因为我使用的是我已经编写的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)
系统输出打印项次(每月第一天)发送到构造函数。您正在声明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?