Heim  >  Artikel  >  Java  >  So erhalten Sie den aktuellen Klassennamen und die Methodennameninstanz in Java

So erhalten Sie den aktuellen Klassennamen und die Methodennameninstanz in Java

黄舟
黄舟Original
2017-07-22 15:45:363014Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen über die Implementierungsmethode zum Abrufen des aktuellen Klassennamens und Methodennamens in Java vorgestellt. Er stellt nicht nur die Implementierungsmethode bereit und vergleicht die Effizienz mehrerer Methoden, Freunde, die sie benötigen, können darauf verweisen

Javas Implementierungsmethode zum Abrufen des aktuellen Klassennamens und Methodennamens Hier sind vier Methoden und Vergleiche, wenn Sie sie benötigen Testen Sie jede Funktion. Wenn Sie jeden Klassennamen und Funktionsnamen manuell drucken, wird es für viele Funktionen anstrengend sein, eine Reihe von Funktionen vorzubereiten, die sich selbst aufzeichnen.

Erhalten Sie den Klassennamen:


1.000.000 Mal ausführen,

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); 
}
Erste Methode: 1718ms

Zweite Methode: 4843ms
Dritte Methode: 47ms

Vierte Methode: 6484ms




Vergleich:

1) Gibt es Nutzungsbeschränkungen für Methode 1? 2) Methode 2 erhält den Aufrufstapel über den Ausnahmemechanismus, der die schlechteste Leistung aufweist, aber Funktionen bereitstellen kann, über die andere Methoden nicht verfügen. Sie kann jedoch auch Methodennamen, Zeilennummern usw. abrufen etwas unkonventionell, es auf diese Weise zu verwenden;
3) Methode 3 analysiert einfach den Namen der anonymen Klasse, was offensichtlich viel einfacher ist und tatsächlich die höchste Leistung bietet;

4) Methode 4 fühlt sich ein wenig ähnlich an Methode 3 und ist formaler als Methode 3



Funktionsnamen abrufen:


1 Million Mal ausführen:

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);  
  }
Erster Typ: 4856ms

Zweiter Typ: 6337ms


Erklärung:

1. Die Exception-Klasse Erbt von Throwable, daher wird an manchen Stellen eine Ausnahme verwendet, um getStackTrace aufzurufen. 2. Verschiedene JDK-Versionen erhalten nach dem Aufruf von getStackTrace unterschiedliche Arrays, um dies herauszufinden jdk1.6-Version

Das obige ist der detaillierte Inhalt vonSo erhalten Sie den aktuellen Klassennamen und die Methodennameninstanz in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn