Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在双大括号初始化中引用自身的对象不能给出NPE吗?_Java_Nullpointerexception_Ide_Static Code Analysis_Double Brace Initialize - Fatal编程技术网

Java 在双大括号初始化中引用自身的对象不能给出NPE吗?

Java 在双大括号初始化中引用自身的对象不能给出NPE吗?,java,nullpointerexception,ide,static-code-analysis,double-brace-initialize,Java,Nullpointerexception,Ide,Static Code Analysis,Double Brace Initialize,我这里有一段代码,它总是会抛出一个NPE: public class Test1 { private final static Object OBJECT = new Object() {{ System.out.println("OBJECT.toString() = " + OBJECT.toString()); }}; public static void main(String[] args) { } } 有没有方法可以在实例初始化块中初始化对象

我这里有一段代码,它总是会抛出一个NPE:

public class Test1 {
    private final static Object OBJECT = new Object() {{
        System.out.println("OBJECT.toString() = " + OBJECT.toString());
    }};
    public static void main(String[] args) { }
}
有没有方法可以在实例初始化块中初始化
对象
?或者实例初始化块中对
对象
的所有可能引用是否总是抛出一个NPE

对于西部最快的枪,请阅读以下内容:不,我不是要你解决我的错误。这是我在某处看到的一段简化代码,令我惊讶的是,它在Eclipse或Netbeans中都没有给出空警告,我希望它给出空警告。

只是一个带有实例初始化器的匿名内部类。 因此,适用于创建对象的规则

NPE是一个运行时异常,因此IDE使用启发式方法来查找罪魁祸首,而不是静态类型、声明的异常和静态代码分析提供的严格性和确定性。在这里,它必须执行代码才能发现运行时问题

发生的情况是: 正在通过为静态成员分配匿名内部类来初始化该成员。内部类的构造函数已完成,因为这是实例初始值设定项的规则。但是,只有在初始化器完成后才分配引用,而在您尝试取消引用
对象时,初始化器还没有完成


似乎是一种非常循环的解释,但这是因为所发生的是循环引用;)

为什么不能只使用
这个
?这是我在某处解决现有问题时发现的一个bug,Eclipse和Netbeans都没有给出空指针警告,您的字段是静态的,对静态字段的任何调用都不必有空检查警告。@Maas为什么静态字段不应该有空检查警告?我的2c(-):从代码分析器的角度来看,此字段是静态的最终字段,并获得分配的内容。如果对象的初始化块使用字段引用,则需要进行一些(广泛的?)分析。我的意思是,如果您要访问它,例如在toString或其他内容中,则该引用仅在构造函数和ini块中为null。