2014-03-26 55 views
0

我一直有問題,通過方法訪問私有變量下的一類到另一個類,比如現在我有這樣的問題:我如何解決這個非靜態和靜態變量通過一次性訪問方法?

我有發言權類Hello1這個變量:

private Item[][] bankTabs; 

和我想通過另一個類訪問它說hello2,所以我做的Hello1公共方法是這樣的:

public int amountOfItemInBank(int id) { 
    int amountInBank = 0; 

    for(int i = 0; i < bankTabs.length; i++) { 
     for(int i2 = 0; i2 < bankTabs[i].length; i2++) { 
       if (bankTabs[i][i2].getId() == id) 
        amountInBank = bankTabs[i][i2].getAmount(); 
     } 
    } 
     return amountInBank; 

}

,但是當我想通過Hello2訪問它時,它告訴我該方法不是靜態的,當我將其設置爲靜態時,amountOfItemInBank中的變量bankTabs不起作用,並且出現很多錯誤。

所以,當我去Hello2類,我嘗試調用此方法是這樣的:

Hello1.amountOfItemInBank(50); 

我怎麼能解決這個問題?

+0

向我們展示您調用該方法的代碼? – anirudh

+7

你明白'靜態'的含義嗎?你不應該爲了它而將事物設置爲靜態的(或非靜態的) - 考慮一個方法是否在邏輯上作用於一個實例。 –

+0

你可能在初始化'Hello1'類時填充'bankTabs'。看到它如何告訴你方法不是靜態的,你可能試圖在類上調用這個方法,而不是在一個不可用的對象上。 – gpgekko

回答

2

要麼讓Hello1類的一個對象,然後訪問該方法

Hello1 obj = new Hello1(); 
int returnValue = obj.amountOfItemInBank(50); 

或同時聲明變量bankTabs和方法amountOfItemInBankstaticHello1類,並使用Hello1.amountOfItemInBank(50);你先前做的。

另外,在這裏閱讀更多Understanding Class Members以清除您的理解,然後您可以解決問題for once and for all

+0

謝謝先生,這是我的答案,使用對象。 – Boolena

+0

很高興它符合你的期望。 – AKS

+1

@Boolena「這是我的答案,使用對象」。我不想說謊,但很容易理解,當你使用面向對象的編程語言時,使用對象解決了許多問題;) – Gimby

0

靜態方法可以在類中調用,而不是對象,像

Hello1.amountOfItemInBank(50); 

要調用非靜態方法,你需要一個類的對象:

Hello1 hello = new Hello1(); 
hello.amountOfItemInBank(50); 

的方法沒有按以這種方式使用靜態場必須是靜態的。聲明字段作爲靜態的,您可以使用它的值(如果它是公共的)未做一類對象:

Item[][] items = Hello1.bankTabs; 

或方法調用(如果它是私有的):

​​

如果你這樣做不需要在沒有實例化類的情況下訪問該字段,您可能不希望將該變量設爲靜態。

相關問題