ホームページ >Java >&#&チュートリアル >Javaで現在のクラス名とメソッド名のインスタンスを取得する方法
この記事では、Java で現在のクラス名とメソッド名を取得する実装方法に関する関連情報を主に紹介します。実装方法を提供し、いくつかのメソッドの効率を比較するだけでなく、必要な友人はそれを参照できます
Java の現在のクラス名とメソッド 名前の実装メソッドをここに示します。必要に応じて、各カテゴリ名と関数名を出力して、各関数をテストするために参照できます。 、その場合、多くの関数は疲れすぎてしまう可能性があります。Java はすでに自身を記録するための関数を多数準備しています。
クラス名を取得:public static void testGetClassName() { // 方法1:通过SecurityManager的保护方法getClassContext() String clazzName = new SecurityManager() { public String getClassName() { return getClassContext()[1].getName(); } }.getClassName(); System.out.println(clazzName); // 方法2:通过Throwable的方法getStackTrace() String clazzName2 = new Throwable().getStackTrace()[1].getClassName(); System.out.println(clazzName2); // 方法3:通过分析匿名类名称() String clazzName3 = new Object() { public String getClassName() { String clazzName = this.getClass().getName(); return clazzName.substring(0, clazzName.lastIndexOf('$')); } }.getClassName(); System.out.println(clazzName3); //方法4:通过Thread的方法getStackTrace() String clazzName4 = Thread.currentThread().getStackTrace()[2].getClassName(); System.out.println(clazzName4); }100万回実行、
2番目のメソッド: 4843ミリ秒
3番目のメソッド: 47ミリ秒
比較:
1) 方法 1 には使用制限はありますか?
3) メソッド 3 は、匿名クラスの名前を簡単に分析するだけです。これは明らかにはるかに単純で、実際には最高のパフォーマンスを発揮します 4) メソッド 4 はメソッド 3 と少し似ていますが、もう少し形式的です。メソッド3より
public static void testGetFunctionName() { // 方法1:通过Throwable的方法getStackTrace() String funcName2 = new Throwable().getStackTrace()[1].getMethodName(); System.out.println(funcName2); //方法2:通过Thread的方法getStackTrace() String clazzName4 = Thread.currentThread().getStackTrace()[2].getMethodName(); System.out.println(clazzName4); }100万回実行:
2番目のタイプ: 6337ms
説明:
1. 例外クラスは Throwable から継承するため、一部の場所では getStackTrace を呼び出すために Exception を使用します。実際には、getStackTrace を呼び出した後、jdk バージョンごとに異なる配列が取得されます。上記は jdk1 の下にあります。 6バージョン
以上がJavaで現在のクラス名とメソッド名のインスタンスを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。