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メソッドを実行する「メイン」スレッドがありますが、これはスレッド クラスを「継承」しません。 JavaメソッドThread.currentThread()を呼び出しています。staticそれらは違う。

Thread.currentThread(); の Thread とは または Thread.sleep();-- クラスまたはオブジェクト?

Thread.currentThread()Thread.sleep()は両方とも静的メソッドです。静的メソッドに関するこのチュートリアルを参照してください。彼らはThreadクラスを使用しています。これら 2 つの呼び出しに関連するインスタンス オブジェクトはありません。

Thread.currentThread()main メソッドを実行する「メイン」スレッドであるクラスのインスタンスを返します。Threadあなたの例では、クラスtのインスタンスです。Thread繰り返しになりますが、インスタンス メソッドと静的メソッドの違いについては、チュートリアルと他の 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 に答える