我需要显式导入Thread类吗?

4

所以,下面这个非常基础的线程示例如果删除导入语句就无法编译。然而,之前我不必导入Thread类。有人经历过这种情况吗?请帮帮我。

import java.lang.Thread;
class Test {
 public static void main(String args[]) {
  Thread t = Thread.currentThread();

  System.out.println("current thread is "+t);

  t.setName("amar");
  System.out.println("after name change "+t);

  try {
   for(int n=5;n>0;n--) {
    System.out.println(n);
    Thread.sleep(1000);
   }
  }catch(InterruptedException e) {
   System.out.println("main interrupted");
  }
 }
}

4
你有另一个名为“Thread”的类吗? - user2357112
1
如果不导入 java.lang.Thread,会出现什么错误信息? - user2357112
编译器报错,说它找不到与Thread类相关的符号,比如currentThread(),sleep()和setName()等方法。 - amar9312
哦,我遇到了一个问题,当我在默认包中创建了一个名为Thread的类时,出现了这个错误。现在我已经删除了我自己创建的Thread.class。抱歉。 - amar9312
2
所以当你说你没有一个叫做Thread的类时,你应该说你有这个类。 - user207421
显示剩余3条评论
1个回答

9
您不需要导入java.lang中的任何类。在没有显式导入的情况下,java.lang中的类通常可供使用。
“编译单元自动具有对其包中声明的所有类型的访问权限,并自动导入预定义包java.lang中声明的所有公共类型。”- JLS Chapter 7
唯一需要显式导入java.lang类的情况是当您声明了另一个与java.lang类同名的类时。在某些情况下,类可能优先于java.lang中的类,强制您要么导入java.lang类,要么使用其完全限定名称。
最好避免声明与常用Java库类相同的类,特别是那些位于java.lang中的类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接