2010-02-16 137 views
1
import static com.example.hello.Tools.*; 
public class MAINCLASS{ 
    public void run(){ 
     runtools(); // this works 
    } 
    private class People{ 
     public void runpeople(){ 
      runtools(); // this does not work. 
     } 
    } 
} 

裏面工具...爲什麼我不能在Java中調用這個函數?

編輯:當我翻身runtools()在People.runpeople()...我得到這個:

方法runtools()是不確定的type MAINCLASS.People

public class Tools { 
    public void runtools() { 
    .... 
    } 
} 

有誰知道爲什麼?

+2

你能解釋一下這是行不通的?編譯器錯誤,運行時異常等? – 2010-02-16 00:56:02

+0

如果您刪除導入語句的「靜態」位,它會工作嗎? – glasnt 2010-02-16 00:57:14

+0

更喜歡_does_它如何工作?它不會按照書面進行編譯。 – 2010-02-16 00:57:53

回答

7

您需要聲明Tools#runtools()static才能夠import static它。

public class Tools { 
    public static void runtools() { 
     // ... 
    } 
} 

要麼,實例化Tools然後調用它runtools()

new Tools().runtools(); 
1

runtools()呼叫不應在任的這兩種情況下工作,因爲runtools不是一個靜態方法 - 它需要Tools對象的實例被調用的。

1

由於您只導入了Tools的靜態成員,因此該代碼不應起作用(完全),而runtools()是一種實例方法。如果你要使runtools()成爲靜態的,那麼兩個runtools()的調用都應該工作,因爲它在兩種情況下都在範圍內。

1

這不會編譯。您無法使用static關鍵字導入軟件包。導入需要是一種特定的方法。

所以你需要寫這樣的事情,使之編譯和工作:

import static com.example.hello.Tools.someMethod; 

此外,你需要導入的方法是靜態的。

這使得你調用一個靜態方法就像是在這個類的範圍內聲明:

someMethod(); 
相關問題