• ベストアンサー

Javaのメソッドについて

Javaの参考書を見ていて分からない点があります。 Kadaiクラスで使用したcurrentThreadメソッドは、 Thread.currentThread()と書いてもthis.currentThread()と書いても 実行結果が同じになります。 currentThreadメソッドは静的メソッドなのに、 なぜthis.currentThread()でも良いのか分かりません。 this.currentThread()も静的メソッドなのでしょうか? class SampleThread{ public static void main(String[] args){ Thread t1=new Kadai(); t1.setName("Minimum"); //スレッド名を設定 t1.setPriority(Thread.MIN_PRIORITY); //優先順位を設定 Kadai t2=new Kadai(); t2.setName("Normal"); t2.setPriority(Thread.NORM_PRIORITY); Kadai t3=new Kadai(); t3.setName("Maximum"); t3.setPriority(Thread.MAX_PRIORITY); t1.start(); //プライオリティが最低のスレッドを実行 t2.start(); //プライオリティが普通のスレッドを実行 t3.start(); //プライオリティが最優先のスレッドを実行 } } class Kadai extends Thread{ public void run(){ Thread t=this.currentThread(); //スレッド情報を取得 System.out.println("スレッド名:"+t.getName()+" プライオリティ:"+t.getPriority()); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

Thread thread = new Thread(); Thread.currentThread(); thread.currentThread(); この2つの実行結果は同じになるわ。 これはThreadに限らずすべてのstaticメソッドに言える事よ。 静的メソッドはインスタンス化しなくても使えるのが特徴。 でもインスタンス化した状態でも呼び出すことはできるのよ。 結果はご存知のとおり同じものが返るけどね。 やってはいけないことではないわ。 でも、インスタンス化した状態での利用は推奨できないわ。 Thread.currentThread(); こう書いてあれば、 ああ、静的メソッドを使っているんだな ってわかるけど thread.currentThread(); これだと判断できないわよね? また、親クラスと子クラスに同名のstaticメソッドがあった場合 インスタンス変数に対して呼び出すと どっちのを呼んでいるのかわかりにくい、という問題もあるわ。 まとめるわね。 ・静的メソッドは、インスタンス変数に対して実行しても、Javaとしては何の問題もない。 ・ただし、可読性・保守性に劣る。 こんなところね。

takerunago
質問者

お礼

ありがとうございます。 静的メソッドはインスタンス化しないで使った方がいいですね。 静的メソッドをインスタンスメソッドとして使っても良いことはなさそうですし。

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

this.currentThread()でもコンパイルできて静的メソッドのcurrentThread()を呼び出せてしまいますが、コンパイル時に警告が出ませんか? Eclipseで試すと下記のように警告されました。 The static method currentThread() from the type Thread should be accessed in a static way Thread.currentThread()の形で書くべきです。

takerunago
質問者

お礼

ありがとうございます。 私はEclipseではなくコマンドプロンプト上を使っていますが、 警告が出ずにコンパイルが通りました。 静的メソッドはインスタンスメソッドとして使わない方がいいということですね。

関連するQ&A