将对象实例分配给静态变量

时间:2013-10-02 23:15:48

标签: java swing static jtable

以下问题。我有一个静态成员的静态方法,一个应该包含我自己的表类的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 个答案:

答案 0 :(得分:3)

唯一可能的解释是您已将MyTable声明为“内部类”:属于封闭类的实例的类。在静态上下文中不存在这样的实例,这就是编译器抱怨的原因。要解决此问题,请将类声明为static

public static class MyTable extends JTable {
    ...
}

答案 1 :(得分:1)

看起来你的MyTable类是那个类的非静态内部类,你试图声明那个静态变量。 通常,要构造非静态内部类的实例,必须提供要绑定到的外部类的实例。就像:

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

如果您为当前(Inner)对象实例化this - 您可以写

Inner inner = this.new Inner();

但java语法允许您在这种情况下不显式使用this关键字,因此您只需编写

Inner inner = new Inner();

您遇到的具体问题是因为您尝试在静态上下文中使用动态引用(this)。因此,如果您不需要使用Inner动态引用Outer - 只需为static类声明添加Inner修饰符。