-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 切换为静态方法:(?

干杯

4

2 回答 2

3

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

public static class MyTable extends JTable {
    ...
}
于 2013-10-02T23:21:19.327 回答
1

似乎您的MyTable类是您尝试声明该静态变量的该类的非静态内部类。通常,要构造非静态内部类的实例,您必须提供将绑定到的外部类的实例。就像 :

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

如果你实例化Innerfor current ( this) 对象 - 你写

Inner inner = this.new Inner();

但是java语法允许你在这种情况下不显式使用this关键字,所以你可以写

Inner inner = new Inner();

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

于 2013-10-02T23:26:28.767 回答