在我的程序周围传递私有实例属性对象

时间:2013-05-29 03:46:04

标签: java

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

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 个答案:

答案 0 :(得分:3)

在main()中,您对"属性的分配"是一个局部变量,而不是实例字段。

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

private Properties properties = new Properties();

或者像这样的构造函数:

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

或者,如果您想为Test类的所有实例提供单个值,请执行以下操作:

 private static Properties properties = new Properties();

答案 1 :(得分: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();

答案 2 :(得分: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方法的上下文中调用;)

答案 3 :(得分:0)

这是一个简单的错字。

您正在创建属性的本地实例,“属性属性=新属性();”

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