为什么IntelliJ告诉我这个变量还没有被初始化?

时间:2013-05-25 07:32:30

标签: java variables exception inner-classes

我正在开发一个内部类

的类

我的代码:

package com.solignis;
public class Config {
    public static final Target target;
    class Target {
        public void create(String targetName) {    
            System.out.println("Created" + targetName);   
        }

        public void destroy(String targetName) {    
            System.out.println("Destroyed" + targetName);    
        }
    }    
}

IntelliJ没有看到子类有什么问题,但它一直在抱怨我没有将静态变量target初始化。但是当我尝试使用像null这样的东西初始化它时,我得到一个空指针异常(这并不奇怪!)但是我不知道我可以初始化变量,因为到目前为止我可以理解它只是一个实例示例超类中的Target子类(这是对的吗?)。此外Target没有构造函数,因此我无法在new上声明target以初始化变量。

那我该怎么办?

如果我对此的理解不正确,请纠正我。我仍然试图围绕Java更“深入”的工作方式。

2 个答案:

答案 0 :(得分:2)

变量test确实未初始化: public static Test test;

初始化意味着将值放入变量,例如:test = SOMETHING;

SOMETHING可以是null,也可以是变量类型的实例。在你的情况下:

test = null;
test = new Test();

是有效的表达。

确实,如果你将null放到test,你就不能“使用”它,即调用它的方法或访问它的成员变量。

顺便说一句。您可能认为Test不是Example的子类。这是它的内在阶级。子类是一个扩展其他类的类。实际上Test是对象的直接子类。

答案 1 :(得分:1)

实际上你可以初始化一个你没有为它声明构造函数的类 它有一个没有参数的默认构造函数

    test = new Test();