Este artigo estuda principalmente o conteúdo relevante do StacktraceElement para obter informações sobre a pilha de chamadas de método, pois a introdução e exemplos detalhados são os seguintes.
O StackTrace (pilha de pilha) armazena informações na pilha de chamadas do método. PrintStackTrace () comumente usado no processamento de exceção está imprimindo essencialmente as informações da pilha das chamadas de exceção.
O StackTraceElement representa um objeto de método no StackTrace (pilha de pilha), e suas propriedades incluem o nome da classe do método, o nome do método, o nome do arquivo e o número de linhas chamadas.
Public Final Classe StackTraceElement implementa Java.io.Serializable {// normalmente inicializado por VM (construtor público adicionado em 1.5) Private String Decareclass; Private String MethodName; String private FileName; private Int LineNumber;}O StackTraceElement é definido como final, o que mostra que não é permitido ser herdado como uma classe Basic Java.
Existem duas maneiras de obter o StacktraceElement, que retornam a matriz StacktraceElement, que é a informação dessa pilha.
1. Thread.CurrentThread (). GetStackTrace ()
2. Novo Throwable (). GetStackTrace ()
A matriz StackTraceElement contém o conteúdo do Stacktrace (pilha de pilha). Ao atravessá -lo, você pode obter o processo de chamada entre métodos, ou seja, você pode obter o método atual e o nome do método de seu chamador, o número de linhas de chamada e outras informações.
classe pública testclass {public static void main (string [] args) {new testClass (). Methoda ();} private void methodA () {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();int lineNumber=stackTraceElement.getLineNumber();System.out.println("StackTraceElement array Subscrito i = "+i+", filename = "+FileName+", ClassName = "+ClassName+", MethodName = "+MethodName+", linenumber = "+lineNumber);}}}1. Podemos encapsular uma biblioteca de log. Ao imprimir o log de destino, também podemos imprimir o número de linhas em que o log está localizado nessa pilha de chamadas. Dessa forma, podemos localizar rapidamente a linha de saída de log e não pesquisar mais globalmente para pesquisar.
public static void d (tag string, string msg, objeto ... params) {sTackTraceElement TargetStackTraceElement = getTargetStackTraceElement (); Log.d (tag, "(" + TargetStackTraceElement.getFileName () + ":" + TargetStackTraceElement.getLineNumber () + ")"); Log.d (tag, string.format (msg, params));}2. Se escrevermos um SDK e esperamos que um determinado método seja chamado em uma posição fixa, também podemos verificar quando esse método é chamado para verificar se a posição de chamada desse método está correta.
Por exemplo, ele deve ser executado em atividades.onResume, pvsdk.onResume; portanto, quando chamamos o método pvsdk.onResume, usamos o método pvsdk.onResume para detectar se esse método é chamado no método de atividade, obtendo as informações da pilha de chamadas.
public class PVSdk {public static void onResume() {StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();Boolean result = false;for (StackTraceElement stackTraceElement: stackTrace) {String methodName = stackTraceElement.getMethodName();String className = StackTraceElement.getClassName (); Try {boolean atribuívelFromClass = Class.ForName (ClassName) .isassignablefrom (Activity.class); if (atributableFromClass && "OnResume" .equals (MethodName) {resultado = true;}} Catchound " RunTimeException ("Pvsdk.onResume deve em atividades.onResume");}}3. Quando estamos conduzindo a análise do código -fonte, se quisermos analisar o processo de execução de todo o código, podemos obter as informações da pilha de impressão. Isso é bastante útil ao analisar o código -fonte.
O exposto acima é toda a explicação detalhada deste artigo sobre o método StackTraceElement Chamada de informações sobre pilha de informações , espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!