Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaプログラムを開発する際、実行中のクラス名やメソッド名を取得したいことはありませんか?

本記事では、Javaでクラス名やメソッド名を出来るだけ簡単に取得する方法について、サンプルコードを掲載しながら解説していきます。

クラス名とメソッド名の取得方法


Javaではクラス名とメソッド名の取得方法として「実行中のクラスから取得」と「スタックトレースから取得」する2種類の方法が利用出来ます。

実行中のクラスから取得

実行中のクラスからクラス名を取得するには下記の下記「getName」メソッドを利用することで取得することが可能です。

new Object(){}.getClass().getEnclosingClass().getName() 

メソッド名を取得する場合は「getEnclosingMethod」を利用して下記のように記述します。

new Object(){}.getClass().getEnclosingMethod().getName()

スタックトレースから取得

クラス名をスタックトレースから取得する場合、Threadクラスから「getClassName」メソッドを利用することが出来ます。

Thread.currentThread().getStackTrace()[1].getClassName() 

メソッド名を取得する場合、「getClassName」メソッドを「getMethodName」メソッドに変更します。

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

クラス名とメソッド名の取得サンプル


実行中のクラスから取得する方法とスタックトレースから取得する方法をご紹介したので、実際にサンプルコードで確認していきましょう。

クラス名を実行中クラスから取得する

package sample;

public class Main {
	 
	public static void main(String[] args) {
		Sub sub = new Sub();
		sub.execute();
		System.out.println(new Object(){}.getClass().getEnclosingClass().getName());
	}
	
}

class Sub {
	public void execute() {
		System.out.println(new Object(){}.getClass().getEnclosingClass().getName());
	}
}

実行結果は下記です。

sample.Sub
sample.Main

8行目と15行目でそれぞれクラス名をコンソール出力していますが、実行されているクラスにより出力内容が変わっていることをご確認頂けます。

メソッド名を実行中クラスから取得する

package sample;

public class Main {
	 
	public static void main(String[] args) {
		Sub sub = new Sub();
		sub.execute();
		System.out.println(new Object(){}.getClass().getEnclosingMethod().getName());
	}
	
}

class Sub {
	public void execute() {
		System.out.println(new Object(){}.getClass().getEnclosingMethod().getName());
	}
}

実行結果が下記です。

execute
main

「getEnclosingMethod」を利用することで、メソッド名を取得することが出来ます。

8行目、15行目のコンソール出力結果からそれぞれのメソッドが取得出来ていることが確認出来ます。

クラス名をスタックトレースから取得する

package sample;

public class Main {
	 
	public static void main(String[] args) {
		Sub sub = new Sub();
		sub.execute();
		System.out.println(Thread.currentThread().getStackTrace()[1].getClassName() );
	}
	
}

class Sub {
	public void execute() {
		System.out.println(Thread.currentThread().getStackTrace()[1].getClassName() );
	}
}

実行結果が下記です。

sample.Sub
sample.Main

ちなみに「getStackTrace()[1]」の部分を「getStackTrace()[2]」にすると呼び出し元のクラスが取得出来ます。

package sample;

public class Main {
	 
	public static void main(String[] args) {
		Sub sub = new Sub();
		sub.execute();
		System.out.println(Thread.currentThread().getStackTrace()[1].getClassName() );
	}
	
}

class Sub {
	public void execute() {
		System.out.println(Thread.currentThread().getStackTrace()[2].getClassName() );
	}
}

実行結果が下記です。

sample.Main
sample.Main
ポテパンダの一言メモ

mainメソッドから出力している8行目で「getStackTrace()[2]」に設定すると、呼び出し元となるメソッドが存在しないためエラーとなるので注意が必要です。

メソッド名をスタックトレースから取得する

package sample;

public class Main {
	 
	public static void main(String[] args) {
		Sub sub = new Sub();
		sub.execute();
		System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
	
}

class Sub {
	public void execute() {
		System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
	}
}

実行結果が下記です。

execute
main

「getStackTrace()[2]」に変更することで、クラス名と同じく呼び出し元のメソッド名を取得出来ます。

さいごに: クラス名とメソッド名の取得は標準APIだけで出来る


本記事では、クラス名とメソッド名の取得方法をご紹介してきました。

クラス名とメソッド名は大きく「実行中のクラスから取得する方法」と「スタックトレースから取得する方法」の2種類の方法が利用可能です。

どちらもJava標準APIだけで出来る方法ですので、クラス名やメソッド名を取得したい際にはぜひ活用してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。