有谁能告诉我为什么我的属性对象为空?我是否必须将其传递给方法,还是有更好的方法?如果我需要在包之间传递我的属性对象怎么办?谢谢!
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?
}
}
答案 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所回答的那样,在这里初始化全局变量:)