В этой статье в основном изучается соответствующее содержание StackTraceElement, чтобы получить информацию о стеке вызовов метода, поскольку подробное введение и примеры заключаются в следующем.
Stacktrace (Stack Track) хранит информацию в стеке вызовов метода. PrintStackTrace (), обычно используемое в обработке исключений, по сути печатает информацию о стеке вызовов исключений.
StackTraceElement представляет собой объект метода в StackTrace (трек стека), а его свойства включают имя класса метода, имя метода, имя файла и количество вызванных строк.
Публичный окончательный класс StackTraceElement реализует java.io.serializable {// обычно инициализируется виртуальной машиной (публичный конструктор, добавленный в 1.5) Private String DeclareClass; Private String Methodname; Private String FileName; Private Int LineNumber;}StackTraceElement определяется как окончательный, что показывает, что его не разрешают унаследовать как базовый класс Java.
Есть два способа получить StackTraceElement, оба из которых возвращают массив StackTraceElement, который является информацией этого стека.
1. Thread.currentThread (). GetStackTrace ()
2. new Throwable (). GetStackTrace ()
Массив StackTraceElement содержит содержимое StackTrace (трек стека). Пройдя его, вы можете получить процесс вызова между методами, то есть вы можете получить текущий метод и имя метода его вызывающего абонента, количество линий вызовов и другую информацию.
открытый класс 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 lineNumber = stackTraceElement.getLineMumber (); i = "+i+", filename = "+filename+", classname = "+classname+", methodname = "+methodname+", lineNumber = "+lineNumber);}}}1. Мы можем инкапсулировать библиотеку журналов. При печати журнала Target мы также можем распечатать количество строк, в которых журнал находится через этот стек вызовов. Таким образом, мы можем быстро найти строку вывода журнала и больше не искать глобально для поиска.
public static void d (String Tag, String msg, Object ... Params) {StackTraceElement TargetStackTraceElement = getTargetStackTraceElement (); Log.d (Tag, "(" + targetStackTraceElement.getFilEname () + ":" + targetStackTraceElement.getLineNumber () + ")"); Log.d (Tag, string.format (msg, params));}2. Если мы напишем SDK и надеемся, что определенный метод будет вызван в фиксированном положении, мы также можем проверить, когда будет вызван этот метод, чтобы увидеть, является ли вызывное положение этого метода верным.
Например, он должен быть выполнен в Activity.onresume, Pvsdk.onresume, поэтому, когда мы называем метод pvsdk.onresume, мы используем метод pvsdk.onresume для определения того, вызывается ли этот метод в методе активности OnResume, получая информацию стека вызовов.
открытый класс pvsdk {public static void onresume () {stackTraceElement [] stacktrace = thread.currentThread (). getStackTrace (); Boolean result = false; for (stackTraceElement stackTraceElement: stackTrace) {string methodname = stackTraceElement.getMethodMate (); string classname = stachtraceName. {Boolean agsemblefromclass = class.forname (classname) .isassignablefrom (antivic.class); if (recessablefromclass && "onresume" .equals (methodname)) {result = true; break;}} catch (classnotfoundexception e) {}} if (! Relude) thress runtexception (resresexception e) {}} if (! Activity.onresume ");}}3. Когда мы проводим анализ исходного кода, если мы хотим проанализировать процесс выполнения всего кода, мы можем получить информацию из стека печати. Это весьма полезно при анализе исходного кода.
Выше приведено все подробное объяснение этой статьи о примере информации о методе стека StackTraceElement. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!