首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么只有当我有内部类时,我才会得到"non-static variable this non be referenced from a static context“错误?

为什么只有当我有内部类时,我才会得到"non-static variable this non be referenced from a static context“错误?
EN

Stack Overflow用户
提问于 2013-03-23 00:57:16
回答 5查看 3.3K关注 0票数 3

我正在为静态和非静态的概念而挣扎。我正在研究这个线程示例程序(修改过的,来自here originally),当我使用内部类时,我会得到错误:

代码语言:javascript
复制
Error: non-static variable this cannot be referenced from a static context

以下是导致错误的代码:

代码语言:javascript
复制
public class Main2 {
    public static void main(String[] args) {
        Thread simple = new Thread(new SimpleTask());
        simple.start();
    }


    class SimpleTask implements Runnable {
        public void run() {

        }

        ;
    }

    class DaemonTask implements Runnable {
        public void run() {
            int i = 0;
        }
    }

}

但是,当我将它分解为3个类时,没有错误..即如果我成功了:

代码语言:javascript
复制
public class Main2 {  
   /* contents */  
}

class SimpleTask implements Runnable {
   /* contents */
}

class DaemonTask implements Runnable {
   /* contents */
}

然后它就编译得很好了。为什么我们把它分成另一个类很重要?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-23 01:01:15

要访问内部类实例(SimpleTask),需要一个外部类实例(Main2)。

试试这个:

代码语言:javascript
复制
    Thread simple = new Thread(new Main2().new SimpleTask());

检查上的内部类

票数 4
EN

Stack Overflow用户

发布于 2013-03-23 00:59:01

因为您的类是非静态内部类;它们隐式地需要外部类的相应实例。

将您的内部类声明为static,这样您的问题就会消失。

票数 3
EN

Stack Overflow用户

发布于 2013-03-23 00:59:13

SimpleTaskDemonTask类应该是静态的

Instance members(在本例中是SimpleTaskDemonTask)与class.And的特定对象相关联,因此您不能在静态方法中直接使用实例成员(因为静态成员没有任何关于类实例的信息,除非您将实例本身作为参数传递)。

您必须创建一个Main2对象并通过它的new Main2().new SimpleTask()访问SimpleTaskDemonTask

使这两个类成为静态类

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15575918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档