获取NullPointerException,c1在main方法中初始化,稍后在class2中访问,但我得到NullPointerException
public class Test
{
static Class1 c1;
public static void main(String[] args)
{
c1 = new Class1(); //c1 is initialized, still null pointer exception
}
}
public class Class1
{
int a,b;
Class1()
{
class1();
}
void class1()
{
a = 5;
b = 10;
Class2 class2 = new Class2();
}
}
public class Class2
{
Class2()
{
Class1 c = Test.c1; //c1 is null here
System.out.println(c.a); //NullPointerException for Test.c1
System.out.println(c.b);
}
}
答案 0 :(得分:1)
要分配Test.c1的值,首先需要构建完全 Class1的实例。
但是,在构造Class1时,可以将Class2构造函数调用到class1()方法中,然后再打印一些东西。此时,您仍然没有完全构造Class1实例,因此,Test.c1尚未初始化
答案 1 :(得分:0)
这很简单:
加载Test
后,c1
会获得默认值null
。
main
被java
工具调用。
main
调用Class1
的构造函数。
Class1
的构造函数调用class1
。
class1
调用Class2
的构造函数。
Class2
的构造函数尝试取消引用Test.c1
null
,因此它会抛出。只有一次嵌套系列完成,c1
才会收到一个值。但是,由于代码在具有(非null
)值之前尝试使用它,它会失败。
使用调试器逐步调试代码可以使这些内容更加清晰。使用调试器不是一项高级技能,对初学者来说至关重要,作为学习工具的时间。