我们都知道,创建线程的两个方法:1. 继承Thread借口;2. 实现Runnable接口就拿实现Runnable接口来说吧,一个程序如下:class PrintRunnable implements Runnable {
      private String name;
      private int sleepTime;
      public PrintRunnable( String name ) {
         this.name = name;
         sleepTime = (int) ( Math.random() * 5000 );
         System.out.println( "Name: " + name
                                     + ";  sleep: " + sleepTime );
      }
      public void run() {
         try {
            System.out.println( name + " going to sleep" );
            Thread.sleep( sleepTime );
         }
         catch ( InterruptedException ie ) {
            System.err.println( ie.toString() );
         }
         System.out.println( name + " done sleeping" );
      }
}public class RunnableTester {
    public static void main( String args[] )       {
        PrintRunnable thread1, thread2, thread3, thread4;
        thread1 = new PrintRunnable ( "thread1" );
        thread2 = new PrintRunnable ( "thread2" );
        thread3 = new PrintRunnable ( "thread3" );
        thread4 = new PrintRunnable ( "thread4" );
        System.out.println( "\nStarting threads" );
        new Thread(thread1).start();
        new Thread(thread2).start();
        new Thread(thread3).start();
        new Thread(thread4).start();
        System.out.println( "Threads started\n" );
    }
}能够编译,也能够执行。但是我有一个疑问:一般我们编写程序时,如果要用到除Object类外,都要用关键字import来引用这个类或包,但是上面这个程序照样能够运行,不出现错误,按道理说,应该在程序的上面加上:import java.lang.Runnable; 这样的语句才能运行,那么为什么上面的程序我没有加上这样的语句也照样能够编译呢?请求解释

解决方案 »

  1.   

    java.lang.*不用我们导入,编译器会自动给我们导入的,,,这个包是默认导入的。
      

  2.   

    java.lang是系统自动导入的不需要手工导入。比如System类,基本类型。都在java.lang下。
      

  3.   

    同2楼。lang包是默认导入的。
      

  4.   

    java.lang.* ;这个包是默认导入的,所以不使用import 也可以用了
      

  5.   

    多谢各位,明白了,一直把Object类作为自动import的,但忘记了lang包中的所有类都是自动导入的。我就平均给分了
    感谢!