Cet article étudie principalement le contenu pertinent de StackTraceElement pour obtenir des informations sur la pile d'appels de méthode, car l'introduction et les exemples détaillés sont les suivants.
StackTrace (Stack Track) stocke des informations sur la pile d'appels de méthode. printStackTrace () couramment utilisé dans le traitement des exceptions est essentiellement l'impression des informations de pile des appels d'exception.
StackTraceElement représente un objet de méthode dans StackTrace (Stack Track), et ses propriétés incluent le nom de classe de la méthode, le nom de la méthode, le nom du fichier et le nombre de lignes appelées.
Classe finale publique StackTraceElement implémente Java.io.Serializable {// normalement initialisé par VM (constructeur public ajouté dans 1.5) Declateclass de chaîne privée; Méthode de chaîne privée; nom de fichier de chaîne privées; private int lineNumber;}StackTraceElement est défini comme final, ce qui montre qu'il n'est pas autorisé à être hérité en tant que classe de base Java.
Il existe deux façons d'obtenir StackTraceElement, qui renvoient le tableau StackTraceElement, qui est les informations de cette pile.
1. Thread.currentThread (). GetStackTrace ()
2. New Throwable (). GetStackTrace ()
Le tableau StackTraceElement contient le contenu de StackTrace (Stack Track). En le traversant, vous pouvez obtenir le processus d'appel entre les méthodes, c'est-à-dire que vous pouvez obtenir la méthode actuelle et le nom de la méthode de son appelant, le nombre de lignes d'appel et d'autres informations.
classe publique 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 (); int lininumber = stackTraceElement. i = "+ i +", filename = "+ filename +", classname = "+ classname +", méthodyname = "+ méthodyname +", lineNumber = "+ lineNumber);}}}1. Nous pouvons encapsuler une bibliothèque de journaux. Lors de l'impression du journal cible, nous pouvons également imprimer le nombre de lignes où le journal est situé via cette pile d'appels. De cette façon, nous pouvons rapidement localiser la ligne de sortie du journal et ne plus rechercher dans le monde pour rechercher.
public static void d (string tag, string msg, objet ... params) {stackTraceElement targetStackTraceElement = getTargetStackTraceElement (); Log.d (tag, "(" + cibleStackTraceElement.getFileName () + ":" + TargetStackTraceElement.getLineNumber () + ")"); Log.d (tag, string.format (msg, params));}2. Si nous écrivons un SDK et espérons qu'une certaine méthode sera appelée en position fixe, nous pouvons également vérifier quand cette méthode est appelée pour voir si la position d'appel de cette méthode est correcte.
Par exemple, il doit être exécuté dans Activity.onresume, pvsdk.onresume, donc lorsque nous appelons la méthode pvsdk.onresume, nous utilisons la méthode pvsdk.onresume pour détecter si cette méthode est appelée dans la méthode d'activité OnResume en obtenant les informations de la pile d'appels.
classe publique PVSDK {public static void onResume () {stackTraceElement [] stackTrace = Thread.currentThread (). GetStackTrace (); Boolean result = false; for (stackTraceElement stackTraceElement: stackTrace) {String MethodhName = EmplackTraceElement.getMethodName (); String className = stackTraceElement. {Booléen attribuablefromClass = class.forname (className) .isSIssignableFrom (activité.class); if (attribuableFromClass && "onresume" .equals (méthodnname)) {result = true; Break;}} catch (classnotfoundException e) {}} if (! Result) lance un nouveau RuntimeException ("PVSD. Activité.onresume ");}}3. Lorsque nous effectuons une analyse du code source, si nous voulons analyser le processus d'exécution de l'ensemble du code, nous pouvons obtenir les informations de la pile d'impression. Ceci est très utile lors de l'analyse du code source.
Ce qui précède est toute l' explication détaillée de cet article sur l'exemple d'informations sur la pile d'appels de la méthode StackTraceElement , j'espère qu'elle sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!