在Thread.currentThread()的方法调用中,Thread引用了什么; 和Thread.sleep();?

San*_*ati 0 java multithreading object

我在Java书中阅读了下面的代码.我明白主类默认继承Thread类,所以currentThread(); 而不是Thread.currentThread(); 也会做这个工作.

但我得不到的是:Thread.currentThread()中的Thread是什么; 或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);
          }
     }
} 
Run Code Online (Sandbox Code Playgroud)

Gra*_*ray 5

我明白主类默认继承Thread类,所以currentThread(); 而不是Thread.currentThread(); 也会做这个工作.

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

Thread.currentThread()中的Thread是什么; 或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();
Run Code Online (Sandbox Code Playgroud)