Javaで実行中のメソッド名を取得する方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaで実行中のメソッド名を取得する方法について解説しています。ここではjava.lang.Threadクラスから取得する方法を解説します。取得の手順と実例を確認しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Javaで実行中のメソッド名を取得する方法について解説します。実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

実行中のメソッド名を取得する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

実行中のメソッド名を取得する方法

実行中のクラス名やメソッド名はjava.lang.Threadクラスから取得することができます。

以下の手順で実施します。

  1. 現在実行中のスレッド・オブジェクトを取得
  2. 現在実行中のスレッド・オブジェクトからStackTraceElementの配列を取得
  3. StackTraceElementの配列の1番目の要素から、メソッド名を取得

以下で詳細を解説します。

1.現在実行中のスレッド・オブジェクトを取得

java.lang.Threadクラスの以下のメソッドを使います。

public static Thread currentThread()

1つのプログラム上で動作するある特定の処理のことをスレッドと言います。Javaを実行する際は、mainメソッドを持つクラスのクラス名を指定してJava仮想マシンを起動しますが、その際Java仮想マシンによってスレッドがひとつ作成されます。

尚、Java仮想マシンでは、複数のスレッドを同時に実行することができます。currentThread()メソッドは現在実行中のスレッドを返却します。

2.現在実行中のスレッド・オブジェクトからStackTraceElementの配列を取得

同じく、java.lang.Threadクラスの以下のメソッドを使います。

public StackTraceElement[] getStackTrace()

現在実行中のスレッド・オブジェクトは、StackTraceElementオブジェクトの配列を保有しています。StackTraceElementオブジェクトは、呼び出されたメソッドの情報を保持しています。配列の先頭が呼び出された最新のメソッドで、最後尾が一番古いメソッドです。

3.StackTraceElementの配列の1番目の要素から、メソッド名を取得

java.lang.StackTraceElementクラスの以下のメソッドを使います。

public String getMethodName()

getMethodName()メソッドはメソッドの名前を返却します。2で取得したStackTraceElementオブジェクトの配列のうち、0番目はgetStackTrace()メソッドの情報を保有しているので、1番目の要素が取得したいメソッドの情報を保有しています。

1~3をまとめて記述すると

Thread.currentThread().getStackTrace()[1].getMethodName();

となります。

 

実際に書いてみよう

public class SampleClass {

  public static void main(String[] args) {

    System.out.println("main実行");
    method_A();

  }

  private static void method_A() {



    System.out.println("method_A実行");
    method_B();

  }

  private static void method_B() {

    System.out.println("method_B実行");

    int i = 0;

    for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {

      System.out.println("実行中のメソッド" + i + ":" + ste.getMethodName());

      i++;

    }



  }

}

 

StackTraceElementオブジェクトの配列の各要素からメソッド名を取得し確認するプログラムです。main()メソッドから呼び出されるmethod_A()メソッドが、さらにmethod_B()メソッドを呼び出します。

method_B()メソッドの中で、実行中のスレッドからStackTraceElementオブジェクトの配列を取得し内容をfor文で展開します。

実行結果は

main実行
method_A実行
method_B実行
実行中のメソッド0:getStackTrace
実行中のメソッド1:method_B
実行中のメソッド2:method_A
実行中のメソッド3:main

となります。

 

[PR] Javaで挫折しない学習方法を動画で公開中

監修してくれたメンター

長屋雅美

独立系SIerで7年勤務後、現在はフリーのエンジニアとして自宅をオフィスとして活動しています。
JavaやC♯、shellscriptを用いた開発を主に担当し、TechAcademyではJavaコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。