オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 

そもそもJavaについてよく分からないという方は、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] 未経験からWebエンジニアを目指す方法とは

監修してくれたメンター

長屋雅美

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

TechAcademyでは、初心者でもJavaやServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。