Java直接修改一个类,空引用?

标签 java class dynamic null

我刚开始使用 Java 的新 CLASS_NAME() { STUFF } 功能,但我遇到的情况似乎很奇怪。 考虑以下代码:

class Test
{
    public String a;
    public static void main( String[] args ) throws java.lang.Exception
    {
        String j = "abc";
        //Emulating passing an argument as I did in my code.//
        final String s = j;
        Test v = new Test();
        v.a = s;
        Test e = new Test() {
            public String a = s;
        };
        Test g = new Test();
        g.a = s;
        System.out.println( v.a );
        System.out.println( e.a );
        System.out.println( g.a );
    }
}

我认为这个程序的输出是:

abc

abc

abc

相反,它是:

abc

null

abc

我真的很困惑为什么会这样。 我自学了这个功能,所以我真的不太了解它。 任何帮助表示赞赏。 谢谢!

最佳答案

These are called anonymous classes.

多态性不适用于字段。当你这样做的时候

System.out.println( e.a );

字段 a 正在根据 e 的声明/静态类型解析,即 Test。由于您没有显式初始化它,它默认为 null

你在匿名类中声明了一个名为a的字段

Test e = new Test() {
     public String a = s;
};

正在隐藏其父类中的同名字段。

您可以改用初始化 block

Test e = new Test() {
    {
        a = s;
    }
};

因为子类可以访问该字段。

关于Java直接修改一个类,空引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259432/

相关文章:

java - 服务器遇到内部错误,导致其无法满足此请求 - 在 servlet 3.0 中

java - 无法加载servlet过滤器类: com. sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter(SCP Neo)

java - 对数组列表进行排序和搜索

css - 为什么 CSS 类声明不适用于标记的 <div>?

class - 如何在 AOP(面向方面​​的编程)中使用单例类?

jquery - 引用嵌套类让 JQuery 点击工作

amazon-web-services - 如何从我的步骤函数工作流中调用动态事件?

c++ - 在没有对象参数的情况下调用非静态成员函数会发生错误

java - 如何使用 Stemmer 或 Lemmatizer 来提取特定单词的词干

arrays - 从 Dll 返回 TCollection 或对象数组