以下问题。我有一个静态成员的静态方法,一个应该包含我自己的表类的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切换为静态方法:(?
干杯
答案 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
修饰符。