2014-03-01 4 views
0

Я борюсь за понимание того, как работать с объектами Java из других объектов. У меня есть 3 простых классы: объекта 1) окружающей средыПонимание ссылок на другие классы в java - исключение нулевого указателя

public class Environment { 

protected String envName; 

public Environment(String envName){ 
    this.envName = envName; 
} 

// get and set methods 
public String getenvName(){ 
    return envName; 
} 

public void setenvName(String envName){ 
    this.envName = envName; 
} 

} 

2) Класс, который будет заполнить этот объект

public class FetchConfig { 

Environment environment; 

public FetchConfig() { 
} 

public void buildConfig() { 
    environment.setenvName("Steve"); 
} 
} 

3) класс с основным методом с будет работать со своими объектами окружающей среды:

public class WorkWithEnvironment { 

private FetchConfig config; 

public static void main(String[] args) throws FileNotFoundException, 
     IOException { 

    WorkWithEnvironment w = new WorkWithEnvironment(); 
    w.setupConfig(); 
    w.readEnvNames(); 
} 

private void setupConfig() throws FileNotFoundException, IOException { 
    config = new FetchConfig(); 
    config.buildConfig(); 
} 

private void readEnvNames() { 

    System.out.println("Environment name is: " 
      + config.environment.getenvName()); 
} 

} 

Но когда я запускаю его, я продолжаю получать NPE (NullPointerException) здесь -> environment.setenvName («Steve»);

+2

В классе 'FetchConfig' есть поле' Environment'. Если вы не инициализируете его для каждого экземпляра, он остается «null». –

ответ

0

Ваш второй класс пытается установить значения внутри вашего класса среды перед его созданием, и поэтому он имеет значение null, когда вы пытаетесь присвоить ему значение.

public class FetchConfig { 

Environment environment; 

public FetchConfig() { 
    environment = new Environment(null); 
} 

public void buildConfig() { 
    environment.setenvName("Steve"); 
} 
+0

Thx all - на самом деле это должно быть «Environment = new Environment (null), но я понимаю, что я делал неправильно. – stk123

+0

Отредактировал мой ответ. Рад бы мы могли помочь. – indivisible

1

Вы никогда не говорили FetchConfig, какую среду использовать. Я думаю, вы хотели иметь environment = new Environment(); или подобное в конструкторе по умолчанию FetchConfig.

Вы также можете инициализировать переменную среду аналогичной линией в методе buildConfig.

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