Java現在のクラス名とメソッド名を取得する実装方法
2220 ワード
Javaが現在のクラス名とメソッド名を取得する実装方法ここでは4つの方法を提供し、比較します.必要なものは参考にしてください.
各関数をテストするために、各クラス名、関数名を手動で印刷すれば、多くの関数が疲れるので、Javaはすでに自分の関数を記録する準備ができています.
クラス名の取得:
100 w回実行し、
第1の方法:1718 ms第2の方法:4843 ms第3の方法:47 ms第4の方法:6484 ms
比較:
1)方法1何か使用制限はありますか? 2)メソッド2は異常メカニズムによって呼び出しスタックを取得し、性能が最も悪いが、他のメソッドが持たない機能を提供することができ、メソッド名、行番号などを取得することができる.しかし、このように使うのは多少一般的ではありません. 3)方法3匿名クラスの名前を簡単に分析しただけで、明らかに簡単で、実際には性能も最も高い. 4)方法4感覚と方法3は少し似ていて、方法3より正規化されている
関数名の取得:
100 w回実行:
1つ目:4856 ms 2つ目:6337 ms
説明:
1.ExceptionクラスはThrowableに継承されているので、そのgetStackTraceをExceptionで呼び出すところもあるが、実際に呼び出すのはThrowableの2.異なるjdkバージョンでgetStackTraceを呼び出すと得られる配列が異なるので、下付きで何度か試してみるとわかるが、以上はjdk 1.6バージョンである
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
各関数をテストするために、各クラス名、関数名を手動で印刷すれば、多くの関数が疲れるので、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 w回実行し、
第1の方法:1718 ms第2の方法:4843 ms第3の方法:47 ms第4の方法:6484 ms
比較:
1)方法1何か使用制限はありますか? 2)メソッド2は異常メカニズムによって呼び出しスタックを取得し、性能が最も悪いが、他のメソッドが持たない機能を提供することができ、メソッド名、行番号などを取得することができる.しかし、このように使うのは多少一般的ではありません. 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 w回実行:
1つ目:4856 ms 2つ目:6337 ms
説明:
1.ExceptionクラスはThrowableに継承されているので、そのgetStackTraceをExceptionで呼び出すところもあるが、実際に呼び出すのはThrowableの2.異なるjdkバージョンでgetStackTraceを呼び出すと得られる配列が異なるので、下付きで何度か試してみるとわかるが、以上はjdk 1.6バージョンである
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!