2014-03-01 28 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)類main方法將與我的環境對象的工作:

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(「史蒂夫」);

+2

您的'FetchConfig'類具有'Environment'字段。如果你沒有爲每個實例初始化它,它仍然是'null'。 –

回答

0

您的第二個類正在嘗試在實例化它之前在您的環境類中設置值,因此當您嘗試爲其分配值時它是空的。

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使用哪個環境。我想你的意思是在FetchConfig的默認構造函數中有environment = new Environment();或類似的。

您也可以使用buildConfig方法中的類似行來初始化變量環境。