0

谁能告诉我为什么我的属性对象为空?我必须将它传递给方法,还是有更好的方法?如果我需要在包之间传递我的属性对象怎么办?谢谢!

public class Test {
    private Properties properties = null;

    public static void main (String[] args) {
        testObject = new Test();
        Properties properties = new Properties(); // Then load properties from fileInputStream sucessfully

        utilityMethod(); 
    }

    private void utilityMethod() {
        properties.getProperty("test"); // Why do I get a null pointer exception?
    }
}
4

4 回答 4

3

在 main() 中,您对“属性”的赋值是局部变量,而不是实例字段。

如果你想设置字段,你可以这样做:

private Properties properties = new Properties();

或者在这样的构造函数中:

 public Test() {
    properties = new Properties();
 }

或者,如果您想要 Test 类的所有实例的单个值,如下所示:

 private static Properties properties = new Properties();
于 2013-05-29T03:47:55.867 回答
1

在这里Properties properties = new Properties();你正在使用另一个。所以这次使用全局 properties

public class Test {
    private Properties properties = null;

    public static void main (String[] args) {
        testObject = new Test();
        properties = new Properties(); // Now you are using global `properties` variable

        utilityMethod(); 
    }

    private void utilityMethod() {
        testObject .properties.getProperty("test"); // access by using testObject  object
    }
} 

或者您可以将其声明为静态的

 private static Properties properties = new Properties();
于 2013-05-29T03:47:32.817 回答
1

因为你已经在你的主目录中再次重新声明了它......

public static void main (String[] args) {
    testObject = new Test();
    // This is local variable whose only context is within the main method
    Properties properties = new Properties(); // Then load properties from fileInputStream sucessfully

    utilityMethod(); 
}

ps-您的示例不会编译,因为utilityMethod不是static也不能从方法的上下文中调用main;)

于 2013-05-29T03:47:42.060 回答
0

这是一个简单的错字。

您正在创建 Properties 的本地实例,“Properties properties = new Properties();”

正如@PSR 回答的那样,在这里初始化全局变量:)

于 2013-05-29T03:49:42.050 回答