ホームページ >Java >&#&チュートリアル >Javaで現在のクラス名とメソッド名のインスタンスを取得する方法

Javaで現在のクラス名とメソッド名のインスタンスを取得する方法

黄舟
黄舟オリジナル
2017-07-22 15:45:363037ブラウズ

この記事では、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万回実行、

最初のメソッド: 1718ミリ秒

2番目のメソッド: 4843ミリ秒
3番目のメソッド: 47ミリ秒

4番目のメソッド: 648 4ミリ秒


比較:



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万回実行:


最初のタイプ: 4856ms

2番目のタイプ: 6337ms


説明:



1. 例外クラスは Throwable から継承するため、一部の場所では getStackTrace を呼び出すために Exception を使用します。実際には、getStackTrace を呼び出した後、jdk バージョンごとに異なる配列が取得されます。上記は jdk1 の下にあります。 6バージョン

以上がJavaで現在のクラス名とメソッド名のインスタンスを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。