2012-06-30 40 views
0

我有一個門面發動機的方法方法和成分的Java

getOwner() 

我也有叫車另一間教室和另一主叫方所有者。 Car類也有一個getOwner()方法,而Owner類包含名字,車的費用和車主的預算。

所以我必須初始化發動機的方法,這就要求在newCARengine類的構造函數。

public static void iniEngine(String name, int cost) { 
    model = new newCARengine(name, cost); 
} 

組成。發動機班有車,車班有車主。爲了成功調用getOwner()方法,我需要使用實例變量(類級別變量)來保存對其他對象的引用,以便從該對象調用該方法。

我的引擎類:[下面]

public class engine{ 
    private String name; 
    private int cost; 
    public Car car; 

    public engine(String name, int cost){ 
     this.name = name; 
     this.cost = cost; 
    } 

    public Owner getOwner(){ 
     return car.getOwner(); 
    } 
} 

我用一個實例變量該類引用Car類「公共停車場的汽車;」然後允許我使用「car.getOwner();」方法。

我的車類:下面]

public class Car{ 
    public Owner owner //instance variable to reference the owner class 
    public Owner getOwner(){ 
     return owner; 
    } 
} 

現在我已經準備好去到創建所有者對象所有者類。

MY所有人類別:[下面]

public class Owner{ 
    private String name; 
    private int cost; 
    private int budget; 

    public Owner (String name, int cost){ 
     this.name = name; 
     this.cost = cost; 
    } 
    public Owner (String name, int cost, int budget){ 
     this.name = name; 
     this.cost = cost; 
     this.budget = budget; 
    } 
    public String getName(){return name;} 
    public int getCost(){return cost;} 
    public int getBudget(){return budget;} 
} 

現在我做錯了什麼,當我運行iniEngine()方法,我得到一個空指針異常,這個我相信是不是對象的結果被創建。錯誤從這裏產生:

return car.getOwner(); //from the ENGINE CLASS 

我需要返回一個對象作爲我的引擎類的結果。但該對象沒有被創建。任何援助將不勝感激。

+0

以我的想法,發動機的「所有者」是汽車本身,而不是汽車的擁有者。 –

+1

你在哪裏設置你的'engine'實例中的'car'字段? –

回答

0

我檢查了您的代碼幾次。我不明白你把車主和車主聯繫起來的地方。
這是什麼原因造成的NullPointerException異常
我建議你提供一個CTOR到汽車是得到業主的參數,此外,考慮有一個setCar方法。

考慮使用以下代碼汽車:

public class Car{ 
    public class Car(Owner owner) { 
     this.owner = owner; 
    } 
    private Owner owner //instance variable to reference the owner class 

    public void setOwner(Owner owner) { 
     this.owner = owner; 
    } 
    public Owner getOwner(){ 
     return owner; 
    } 
} 
0

樣式注意:在發動機,汽車或許應該也是private,就像其他領域,具有無論是二傳,或構造函數參數。

好像有些字段沒有得到設置。我在類似情況下使用的一種調試「技巧」是臨時編寫字段final,並查看編譯器抱怨的內容。例如,如果有人設置engine.car,它會抱怨。在這種情況下,這是一件好事 - 它應該是抱怨!而且,如果沒有人設置engine.car,這是一個紅旗,以在NPE的來源。

或者,如果你有制定者/吸氣,把斷點他們(或者,如果你喜歡,添加系統。out.prints)來驗證它們是否被調用。或者,暫時重命名它們(我在開頭添加「xxx」)以驗證編譯器是否抱怨,證明有人正在調用它們。

0

我從來沒有實例化對象,只挖掘了變量。

通過改變構造函數

public Engine(String name, int cost) { 
    car = new Car(new Owner(name, cost));  
} 

此創建的對象成功這反過來讓我打電話給getOwner()方法,並沒有得到任何NullPointerException異常。莫名其妙地肯定錯過了這部分。