package org.java.thread;
public class Thread3 {
public static void main(String[] args) {
 MyThread r=new MyThread();//此行显示错误,错误提示:没有任何类型 Thread3 的外层实例可访问。必须用类型 Thread3 的外层实例(例如,x.new A(),其中 x 是 Thread3 的实例)来限定分配。
Thread t=new Thread(r);
t.start();
for (int i = 0; i < 5; i++) {
System.out.println("b");
}
}
class MyThread implements Runnable{
int i=0;
@Override
public void run() {
while(true){
System.out.println("a"+i++);
if(i==3){
break;
}
}
}
}
}我是照着书上敲的代码啊,完全一摸一样,不知道怎么就出错误了!另外,我的jdk是1.6的,应该不是jdk的问题吧,求教!!

解决方案 »

  1.   

    class MyThread implements Runnable{
    前面加上static或者MyThread r=new MyThread();
    改成: MyThread r=new Thread3().new MyThread();这就是嵌套类和内部类的区别
    加static的是嵌套类,创建实例的时候不需要外部类的实例
    而不加static的是内部类,必须通过外部类对象才能new
      

  2.   

    public class Thread3 {
    public static void main(String[] args) {
    MyThread r = new MyThread();//此行显示错误,错误提示:没有任何类型 Thread3 的外层实例可访问。必须用类型 Thread3 的外层实例(例如,x.new A(),其中 x 是 Thread3 的实例)来限定分配。
    Thread t = new Thread(r);
    t.start();
    for (int i = 0; i < 5; i++) {
    System.out.println("b");
    }
    }
    }class MyThread implements Runnable {
    int i = 0; public void run() {
    while (true) {
    System.out.println("a" + i++);
    if (i == 3) {
    break;
    }
    }
    }
    }
      

  3.   

    除非是在“宿主类(outer class)”的非static方法里面,否则无论在哪里创建内部类对象,都必须使用OuterClassName.InnerClassName 的形式来表示这个对象。详细的可以参考《Thinking in java》.
      

  4.   

    汗,原来我定义的是嵌套类,不是内部类,我一直把类MyThread当做内部类在看...十分感谢大家的指教!