java – 为什么我得到“非静态变量这不能从静态上下文引用”?

前端之家收集整理的这篇文章主要介绍了java – 为什么我得到“非静态变量这不能从静态上下文引用”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的类,我想用作另一个的子类.但是当我把它的代码放在父级的类中时,我得到:

non-static variable this cannot be referenced from a static context

另一方面,当我把GenTest子类的代码放在“父”的类代码之外 – JavaApp1时,我没有得到这个错误.

public class JavaApp1 {

    class GenTest {  
        @Deprecated
        void oldFunction() {
            System.out.println("don't use that");
        }
        void newFunction() {
            System.out.println("That's ok.");
        }
    }

    public static void main(String[] args) {
        GenTest x = new GenTest();
        x.oldFunction();
        x.newFunction();
    }
}

为什么会这样?

解决方法

您的嵌套类(不是子类,顺便说一下)没有标记为静态,因此它是一个内部类,它需要编码类(JavaApp1)的一个实例来构造它.

选项:

>使嵌套类静态化
>使它不是内部类(即根本不在JavaApp1中)
>创建JavaApp1的实例作为“封闭实例”:

GenTest x = new JavaApp1().new GenTest();

就我个人而言,第二种方法 – Java中的嵌套类在它们周围有一些怪异的东西,所以我会使用顶级类,除非你有一个很好的理由让它嵌套. (最后的选择是特别凌乱,IMO.)

有关内部类的更多信息,请参阅section 8.1.3 of the JLS.

猜你在找的Java相关文章