0

我在一本 Java 书籍中阅读了以下代码。我知道主类默认继承 Thread 类,因此 currentThread(); 而不是 Thread.currentThread(); 也将完成这项工作。

但我不明白的是:Thread.currentThread() 中的线程是什么;或 Thread.sleep();-- 一个类还是一个对象?一个类和它的对象可以同名吗?

class Demo {

     public static void main(String args[]) {
          Thread t=Thread.currentThread();
          t.setName("My Thread");
          System.out.println("Current Thread: "+t);

          try {
              Thread.sleep(1000);
          }
          catch(InterruptedException e) {
              System.out.println(e);
          }
     }
} 
4

2 回答 2

5

我知道主类默认继承 Thread 类,因此 currentThread(); 而不是 Thread.currentThread(); 也将完成这项工作。

不,这是不对的。默认情况下,有一个运行该main方法的“主”线程,但这不会“继承”线程类。 Thread.currentThread()正在调用一个javastatic方法。它们不一样。

Thread.currentThread() 中的线程是什么;或 Thread.sleep();-- 一个类还是一个对象?

Thread.currentThread()并且Thread.sleep()都是静态方法。请参阅本教程关于静态方法。他们正在使用Thread类。这两个调用不涉及实例对象。

Thread.currentThread()返回类的一个实例Thread它是运行 main 方法的“主”线程。在您的示例中,tThread该类的一个实例。再次检查教程和其他 Java 文档,了解实例方法和静态方法之间的区别。

一个类和它的对象可以同名吗?

不幸的是。这就是为什么字段名称上的大写和小写对于让程序员更容易看到差异很重要的原因。

// this compiles unfortunately
Thread Thread = Thread.currentThread();

// leading lowercase field names is a much better pattern
Thread thread = Thread.currentThread();
于 2013-06-12T14:44:25.883 回答
1

Thread是一个类的名称。currentThread()并且sleep()是此类的静态方法,这就是为什么您可以在不创建该类的对象的情况下引用它们的原因。

您可以编写currentThread()而不是Thread.currentThread()仅当您执行了Thread类本身的静态导入。

于 2013-06-12T14:42:15.950 回答