2012-03-10 140 views
0

我們有自我註冊'Handler'的子類,我們想通過Subclass.me()訪問它。在Java中可能類似於這種情況:?在靜態Java方法中訪問類

public class Handler{ 
static Vector<Handler> register=new Vector<Handler>(); 
public static Handler me() { 
     return register.get(this.class);// TODO 
} 
} 

public class SubClass extends Handler{ 
    SubClass(){register.add(this);}// OK 
} 

澄清問題:調用靜態Java方法時是否可以檢索CLASS?這個類明顯不起作用,因爲'this'不可用。

回答

4

靜態方法屬於該類。它們不能被覆蓋。

MyClass.myStaticMethod() 

是訪問靜態方法的唯一正確方法。

+0

他們不需要被覆蓋,但第二部分回答了這個問題。 如果MyClass.myStaticMethod()是唯一正確的道路,如何來叫Subclass.myStaticMethod()甚至不給Eclipse的一個警告? – Anno2001 2012-03-10 13:31:24

+0

@ Anno2001 Eclipse允許您選擇,如果你想要得到一個錯誤/警告或忽略一個靜態成員的非靜態訪問。 下看Eclipse首選項,爪哇 - >編譯器 - >錯誤/警告 - >代碼樣式 - >靜態成員的非靜態訪問。 – ddelver 2014-01-11 23:02:13

0

在java中,您無法對非靜態方法/變量進行靜態引用。所以,

  • 如果你想訪問一個非靜態方法/變量,那麼你必須首先創建一個類的實例 。
  • 如果你要訪問一個靜態方法/變量,那麼你可以 直接訪問它通過類名,而無需創建 實例。

因爲,靜態方法和變量屬於Class而不屬於Instance,而非靜態方法和變量屬於Instance而不屬於Class。