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); }
Zweite Methode: 4843ms
Dritte Methode: 47ms
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;
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); }
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!