2014-01-31 48 views
1

我是java中的新手,使用Google搜索並沒有幫助我。所以,忍耐與我...... P
我創建了一個包acs。該軟件包獲得Gets,該軟件的方法爲foo()從同一包中導入的java

現在,我在同一個包中創建了另一個類,並試圖調用方法foo()。當然這將工作 - (new Gets()).foo();

但我添加了一個導入import acs.Gets;,並試圖直接使用該方法 - foo();http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html中所述。但不幸的是,代碼沒有工作。請告訴我我哪裏錯了。任何幫助將不勝感激!

+2

你能顯示確切的代碼嗎? – BackSlash

+2

它給了什麼錯誤? –

+0

導入不會讓你直接調用方法 - 它只是意味着你不需要指定完整的包名稱。您仍然需要一個對象實例來調用該方法。或者如果它是一個靜態方法,則需要引用該類。 – Trenin

回答

9

如果該函數是靜態的,則只能從另一個類中導入函數;因此,例如,這將工作:

public class Gets { 
    public static void foo() {} 
} 

,然後將其導入:

import static acs.Gets.foo; 

如果它不是靜態的,但是你將無法將其導入。

編輯:正如在評論中指出的那樣,使用靜態導入可能會使代碼更難以閱讀,因此應謹慎使用它們。如果使用正確,它們可能很有用。

+1

靜態導入可能很容易導致混淆,必須避免使用接口或定期導入。 – ADTC

+0

他們是否必須避免是一個意見問題;不過,它們可能會導致混淆,所以我在我的答覆中加入了這個警告。 – blalasaadri

+0

嗨實際上已經得到了.. + 1爲解釋靜態方法。 – khandelwaldeval

0

無法訪問另一個沒有對象的類的方法,無論這個類是否存在於同一個包中。

0

Java是面向對象的。你需要爲你創建一個類的對象來調用這個類的方法。

因此,像

new Gets().myFunction();

勢必工作。 此規則的唯一例外是創建static方法。您可以瞭解何時創建靜態方法,以及它們是否符合您的要求,但要訪問類的方法,則需要一個對象。

0

你仍然需要創建一個對象來訪問非靜態方法:

(new Gets()).foo(); 

,你仍然需要聲明的類來訪問一個靜態方法:

Gets.staticFoo(); 

不需要需要從相同的包導入一個類。這是多餘的,因爲一個包中的所有類已經彼此可見。

另外,您也在混淆關於進口如何工作的問題。導入類不會意味着其方法或字段無需限定即可訪問。

另一個包導入一個類的原因是,使得人們不必在代碼中的任何地方聲明包。而是寫:

acs.anotherpkg.Blah testblah = new acs.anotherpkg.Blah(); 

你可以簡單的寫:

import acs.anotherpkg.Blah; 
... 
Blah testblah = new Blah(); 
1

化妝富()方法,靜態和使用classname.foo訪問它();