程序里面出现了这样的语句:
 Thread thread = new Thread (){};
在后面的{}里面是run()方法,那么后面的{}是什么意思,还有{}后面还有一个分号,又是什么意思?

解决方案 »

  1.   

    那是一个匿名内部类的声明
    也就是说你可以在大括号里面写run方法使thread成为一个可执行线程比如Thread   thread   =   new   Thread   ()   //注意这里没有分号
    {
        public void run()
        {
            System.out.println("the thread is running");
            //在这里写你想处理的内容
        }};    ////注意这里的分号 至于为什么要这样做以及匿名内部类的好处(比如方便访问成员变量等)这些就多看看书吧,现在java基础类的书好多啊!~!
      

  2.   


    public class Test{
      class MyThread extends Thread{
        public void run(){
          //some code here
        }
      }
      public void test(){
        Thread thread = new MyThread();
        //some other code
      }
    }上面这个容易理解些,把匿名类变成了内部类。
      

  3.   


    class TestAnonymityClass
    {
    public static void main(String [] args)
    {
    //Ano ano = new Ano();
    //1:没有大括号,就是用接口本身,接口是没有构造方法的,所以不能new.

    Ano ano = new Ano(){};
    //2:有大括号,就是给出了方法体,编译器会自动添加默认的构造方法.
    ////构造时,因为prt()方法没有方法体,所以也不能构造.编译时报错:要求覆盖方法prt()
    ////更准确点说应该是:实现方法prt()

    //Ano ano = new Ano(){public void prt(){System.out.println(i);}};
    //3:实现了接口中的方法.所以构造成功.new成功了.返回一个对象句柄.

    //Ano ano = new Ano(){int i = 51;public void prt(){System.out.println(i);}};
    //4:覆盖了接口中的字段,实现了接口中的方法.

    ano.prt();
    }
    }
    interface Ano
    {
    int i = 50;
    public void prt();
    }//总结:1.语句以分号结束,所以最后会有个分号.
    ///////2.匿名类不是真正的"匿名",只是用大括号中的代码来覆盖"原"类中的代码,来临时覆盖(实现)方法或者其他的功能.
    ///////3.Thread类要求覆盖run()方法.所以这里就临时覆盖一下.
    ///////4.不覆盖也没有问题,只不过什么也不做.