Dieser Artikel untersucht hauptsächlich den relevanten Inhalt von StacktraceElement, um Methoden -Aufruf -Stapelinformationen zu erhalten, da detaillierte Einführung und Beispiele wie folgt sind.
StackTrace (Stack Track) speichert Informationen auf dem Methode Call Stack. PrintStackTrace (), das in der Ausnahmebereich häufig verwendet wird, druckt im Wesentlichen die Stapelinformationen von Ausnahmeaufrufen.
StackTraceElement repräsentiert ein Methodenobjekt in Stacktrace (Stack Track), und seine Eigenschaften enthalten den Klassennamen der Methode, den Methodennamen, den Dateinamen und die Anzahl der aufgerufenen Zeilen.
öffentliche endgültige Klasse StacktraceElement implementiert Java.io.Serializable {// Normalerweise initialisiert von VM (öffentlicher Konstruktor in 1.5) private String deklareClass; private String methodName; privater String -Dateiname; privat int linenumber;}StacktraceElement wird als endgültig definiert, was zeigt, dass es nicht als Java -Grundklasse vererbt werden darf.
Es gibt zwei Möglichkeiten, um StacktraceElement zu erhalten, die beide StacktraceElement -Array zurückgeben, was die Informationen dieses Stapels ist.
1. Thread.CurrentThread (). GetStacktrace ()
2. New Throwable (). GetStacktrace ()
Das StackTraceElement -Array enthält den Inhalt von Stacktrace (Stack Track). Durch das Durchqueren können Sie den Aufrufprozess zwischen den Methoden erhalten, dh die aktuelle Methode und den Methodennamen des Anrufers, die Anzahl der Anrufleitungen und andere Informationen.
public class testclass {public static void main (String [] args) {new TestClass (). methoda ();} private void methoda () {System.out.println ("-------------------------------"); methodb ();} Private Void methodB(){System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {StackTraceElement stacktraceElement = Elements [i]; String className = stacktraceElement.getClassName (); String methodname = stacktraceElement.getMethodname (); String Filename = StacktraceElement.getFilename (); Array -SubScript i = "+i+", fileName = "+Dateiname+", className = "+className+", methodname = "+methodName+", linenumber = "+linenumber);}}}}}1. Wir können eine Protokollbibliothek zusammenfassen. Beim Drucken des Zielprotokolls können wir auch die Anzahl der Zeilen ausdrucken, in denen sich das Protokoll über diesen Anrufstapel befindet. Auf diese Weise können wir schnell die Protokollausgangszeile finden und keine globale Suche nach der Suche mehr suchen.
public static void D (String -Tag, String msg, Objekt ... Params) {StackTraceElement targetStackTraceElement = GetTarGetStackTraceElement (); Log.d (tag, "(" + targetStacktraceElement.getFileName () + ":" + targetStacktraceElement.getLinumumn () + ")"); Log.d (tag, string.format (msg, params));};2. Wenn wir ein SDK schreiben und hoffen, dass eine bestimmte Methode in einer festen Position aufgerufen wird, können wir auch überprüfen, wann diese Methode aufgerufen wird, um festzustellen, ob die Aufrufposition dieser Methode korrekt ist.
Zum Beispiel muss es in Aktivität ausgeführt werden.
public class pvsdk {public static void onResume () {stacktraceElement [] stacktrace = thread.currentThread (). stackTraceElement.getClassName();try {Boolean assignableFromClass = Class.forName(className).isAssignableFrom(Activity.class);if (assignableFromClass && "onResume".equals(methodName)) {result = true;break;}}catch (ClassNotFoundException e) {}}if (!result) throw new RunTimeException ("pvsdk.onResume Must in Activity.onResume");}}3. Wenn wir die Quellcodeanalyse durchführen, können wir die Informationen aus dem Druckstapel erhalten, wenn wir den Ausführungsprozess des gesamten Code analysieren möchten. Dies ist bei der Analyse des Quellcodes sehr nützlich.
Das obige ist die detaillierte Erläuterung dieses Artikels über die StacktraceElement -Methode Call Stack Information Beispiel . Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!