问题描述
在jdk1.4下执行为什么会报错?publicclassTestInnerClass{TestInnerClassout;TestInnerClass.Innerin=null;publicvoidmainMethod(){out=newTestInnerClass();in=out.newInner();in.run();}classInner{publicvoidrun(){outerMethod();}voidinnerMethod(){System.out.println("innerMethod");}}voidouterMethod(){System.out.println("outerMethod");in.innerMethod();}publicstaticvoidmain(String[]args){newTestInnerClass().mainMethod();}}
解决方案
解决方案二:
in.run();程序执行到此方法时,在内部类调用了外部类的outerMethod();方法,而此时并没有外部类被实例化,导致外部类声明的变量TestInnerClassout;TestInnerClass.Innerin=null;都为null,导致空指针异常
解决方案三:
in=out.newInner()说明in是out的内嵌类对象,在in.run()中执行outerMethod()实际上是调用out.outerMethod()。执行outerMethod()过程中会执行in.innerMethod(),而对于out来说其属性in为空(TestInnerClass.Innerin=null),这样一来,执行到in.innerMethod()时就会报空置针异常(java.lang.NullPointerException)。