加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:31:10 所属栏目:Java 来源:网络整理
导读:我有一个非常简单的类,我想用作另一个的子类.但是当我把它的代码放在父级的类中时,我得到: non-static variable this cannot be referenced from a static context 另一方面,当我把GenTest子类的代码放在“父”的类代码之外 – JavaApp1时,我没有得到这个错
我有一个非常简单的类,我想用作另一个的子类.但是当我把它的代码放在父级的类中时,我得到:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读