Este artículo estudia principalmente el contenido relevante de StackTraceElement para obtener información de pila de llamadas de método, ya que la introducción detallada y los ejemplos son los siguientes.
StackTrace (pila de pila) almacena información sobre la pila de llamadas de método. PrintStackTrace () comúnmente utilizado en el procesamiento de excepciones está imprimiendo esencialmente la información de la pila de llamadas de excepción.
StackTraceElement representa un objeto de método en StackTrace (pila de pila), y sus propiedades incluyen el nombre de clase del método, el nombre del método, el nombre del archivo y el número de líneas llamadas.
Public Final Clase StackTraceElement implementa java.io.Serializable {// normalmente inicializado por vm (constructor público agregado en 1.5) cadena privada declaranClass; private string metodname; private string nombre de archivo; private int lino;}StackTraceElement se define como final, lo que muestra que no se permite ser heredado como una clase básica de Java.
Hay dos formas de obtener StackTraceElement, que devuelve la matriz StackTraceElement, que es la información de esta pila.
1. Thread.CurrentThread (). GetStackTrace ()
2. Nuevo lanzable (). GetStackTrace ()
La matriz StackTraceElement contiene el contenido de StackTrace (pista de pila). Al atravesarlo, puede obtener el proceso de llamada entre los métodos, es decir, puede obtener el método actual y el nombre del método de su persona que llama, número de líneas de llamadas y otra información.
public class testClass {public static void main (string [] args) {new testClass (). MethodA ();} private void métoda () {System.out.println ("-----------------------------------"); MethodB ();} Void privado methodB(){System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {StackTraceElement stackTraceElement = Elements [i]; string className = stackTraceElement.getClassName (); String MethodName = StackTRaceElement.getMethodName (); String fileName = stackTraceElement.getFilename; intenceuminume = stackTraceElement.getLinEnumber (); System.out.out.out.out.out (stAttAlEME ("); Array Subscript i = "+i+", filename = "+FileName+", classname = "+classname+", método = "+MethodName+", Linenumber = "+Linenumber);}}1. Podemos encapsular una biblioteca de registro. Al imprimir el registro de destino, también podemos imprimir el número de líneas donde el registro se encuentra a través de esta pila de llamadas. De esta manera, podemos localizar rápidamente la línea de salida del registro y ya no buscar a nivel mundial para buscar.
public static void d (etiqueta de cadena, string msg, objeto ... params) {stackTraceElement targetStackTRaceElement = getTargetStackTRaceElement (); Log.d (etiqueta, "(" + TargetStackTraceElement.getFileName () + ":" + TargetStackTRaceElement.GetLineEnumber () + ")"); Log.d (tag, string.format (msg, params));}2. Si escribimos un SDK y esperamos que se llame a un determinado método en una posición fija, también podemos verificar cuándo se llama a este método para ver si la posición de llamada de este método es correcta.
Por ejemplo, debe ejecutarse en actividades.
clase pública PVSDK {public static void onresume () {stackTraceElement [] stackTrace = thread.currentThread (). getStackTrace (); boolean result = false; for (stackTRaceElement StackTRaceElement: stackTrace) {String MethodName = StackTRaceElement.getMethodame (); stackTraceElement.getClassName (); try {boolean asignableFromClass = class.forname (className) .ISasSignableFrom (Activity.Class); if (AsignableFromClass && "OnResume" .Equals (MethodName)) {Result = true; Break;}} Catch (classNotFoundException E) RuntimeException ("Pvsdk.onresume debe en Activity.onresume");}}3. Cuando realizamos el análisis del código fuente, si queremos analizar el proceso de ejecución de todo el código, podemos obtener la información de la pila de impresión. Esto es bastante útil al analizar el código fuente.
Lo anterior es toda la explicación detallada de este artículo sobre el ejemplo de información de la pila de llamadas del método StackTraceElement , espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!