2013-05-29 1 views
0

Может ли кто-нибудь сказать мне, почему мой объект свойства имеет значение null? Должен ли я передать его методу, или есть лучший способ? Что делать, если мне нужно передать объект свойств между пакетами? Благодаря!Передача объекта частной экземпляры объекта вокруг моей программы

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

Вы должны прочитать - http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html –

+0

, потому что вы не сделали установите Test.properties на что-нибудь еще. –

ответ

3

В main() ваше присвоение «свойствам» относится к локальной переменной, а не к полю экземпляра.

Если вы хотите, чтобы установить поле, вы можете сделать это так:

private Properties properties = new Properties(); 

Или в конструкторе, как это:

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

Или, если вы хотите, одно значение для всех экземпляров класса Test, например:

private static Properties properties = new Properties(); 
1

Здесь Properties properties = new Properties(); вы используете другой one.So использовать глобальный 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(); 
+0

Можете ли вы объяснить, что вы сделали (я вижу), но видели, как OP не удалось, это может быть более полезно тогда просто бросать на них ответ;) – MadProgrammer

+0

@MadProgrammer Спасибо за предложение. Вы правы. Я сделаю это – PSR

+1

Это не статично. Я думаю, что это будет 'testObject.properties'. –

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;)

+0

main() не является конструктором. –

+0

@ AndyThomas-Cramer С технической точки зрения - он «конструирует» что-то;) – MadProgrammer

0

Это простая опечатка.

Вы создаете локальный экземпляр свойств «Свойства properties = new Properties();»

Как ответил @PSR, инициализировать глобальную переменную здесь :)

Смежные вопросы