2013-10-02 61 views
-2

以下問題。我有一個靜態成員靜態方法和應該包含我自己的表類的一個JTable實例:將對象實例分配給靜態變量

public class MyTable extends JTable

但這

private static MyTable configTable = new MyTable();

會導致non-static variable this cannot be referenced from a static context

但是爲什麼? 如果我會寫

private static JTable configTable = new JTable();

它將編譯沒有任何問題。區別在哪裏? 反正無論如何實現它,除了我的所有班級中改變非靜態或切換到MyTable的靜態方法:(?

乾杯

+2

你的班級MyTable是一個內部類嗎?嘗試發佈[SSCCE](http://www.sscce.org) – nachokk

+0

這不是一個編碼問題,這是一個關於java如何處理靜態成員的常見問題。沒有什麼可以「執行」,也沒有意義提交SSCCE。沒有理由在這裏下臺。我搜索了一下,沒有人說過關於內部類的東西。所以非常感謝-.- – MushyPeas

回答

3

唯一可能的解釋是,您已聲明MyTable爲「內部類」 :。屬於封閉類的實例類在靜態情況下沒有這樣的情況存在,這就是爲什麼編譯器會抱怨爲了解決這個問題,聲明類爲static

public static class MyTable extends JTable { 
    ... 
} 
+0

工作,添加靜態和編譯器很高興,歡呼:) – MushyPeas

1

看來你MyTable類是該cl的非靜態內部類屁股你試圖聲明該靜態變量。 通常,要構造一個非靜態內部類的實例,您必須提供它將綁定到的外部類的實例。就像:

Outer outer = new Outer(); 
Inner inner = outer.new Inner(); 

如果你實例Inner電流(this)對象 - 你寫

Inner inner = this.new Inner();

但Java的語法讓你不要在這樣的情況下,明確地使用this關鍵字,所以你可以只寫

Inner inner = new Inner();

由於您試圖在靜態上下文中使用動態參考(this),因此會出現具體問題。因此,如果您不需要InnerOuter進行動態引用 - 只需爲Inner類聲明添加static修飾符即可。

相關問題