java - 为什么此代码会抛出 NullPointerException?

标签 java

我是 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)

最佳答案

AB 之前构造。在 A 构造函数中调用 printLength,它在类 B 中被覆盖。但是 B 类中的 str 还没有被实例化,并且会是 null

因此你得到一个空指针异常。

关于java - 为什么此代码会抛出 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316296/

相关文章:

java - Servlet 异常 - servlet.init()(UnsupportedClassVersion)

java - 将 double 值映射到颜色

java - 在 Java 中获取 JCombobox 中项目的正确位置

java - hadoop NaturalKeyGroupingComparator - Reducer 中发生了什么?

java - 如何实现一种算法来检查 Python 代码的缩进

java - org.hibernate.exception.SQLGrammarException : could not extract ResultSet

java - 如何将一维数组的元素打印到 N x N 框中

javascript - Play Framework 1.3.2 中的 Multi-Tenancy 特定国际化

java - 将音频文件插入Mysql数据库

java - 从 Thread-Object 访问 MainActivity 中的方法