我正在为静态和非静态的概念而挣扎。我正在研究这个线程示例程序(修改过的,来自here originally),当我使用内部类时,我会得到错误:
Error: non-static variable this cannot be referenced from a static context以下是导致错误的代码:
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个类时,没有错误..即如果我成功了:
public class Main2 {
/* contents */
}
class SimpleTask implements Runnable {
/* contents */
}
class DaemonTask implements Runnable {
/* contents */
}然后它就编译得很好了。为什么我们把它分成另一个类很重要?
发布于 2013-03-23 01:01:15
要访问内部类实例(SimpleTask),需要一个外部类实例(Main2)。
试试这个:
Thread simple = new Thread(new Main2().new SimpleTask());检查上的内部类
发布于 2013-03-23 00:59:01
因为您的类是非静态内部类;它们隐式地需要外部类的相应实例。
将您的内部类声明为static,这样您的问题就会消失。
发布于 2013-03-23 00:59:13
SimpleTask和DemonTask类应该是静态的
Instance members(在本例中是SimpleTask和DemonTask)与class.And的特定对象相关联,因此您不能在静态方法中直接使用实例成员(因为静态成员没有任何关于类实例的信息,除非您将实例本身作为参数传递)。
您必须创建一个Main2对象并通过它的new Main2().new SimpleTask()访问SimpleTask和DemonTask
或
使这两个类成为静态类
https://stackoverflow.com/questions/15575918
复制相似问题