我是 Java 新手。我在一本书中找到了这个例子。我希望它打印“ab”或“abc”,但它却抛出异常。有人可以解释为什么会这样吗?提前致谢。
public class Test {
class A {
String str = "ab";
A() {
printLength();
}
void printLength() {
System.out.println(str.length());
}
}
class B extends A {
String str = "abc";
void printLength() {
System.out.println(str.length());
}
}
public static void main(String[] args) {
new Test().new B();
}
}
这里是异常(exception)
Exception in thread "main" java.lang.NullPointerException
at c.Test$B.printLength(Test.java:25)
at c.Test$A.<init>(Test.java:13)
at c.Test$B.<init>(Test.java:21)
at c.Test.main(Test.java:30)
最佳答案
A
在 B
之前构造。在 A
构造函数中调用 printLength
,它在类 B
中被覆盖。但是 B
类中的 str
还没有被实例化,并且会是 null
。
因此你得到一个空指针异常。
关于java - 为什么此代码会抛出 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316296/