1. Методы для печати дорожек стека
Активно позвоните в один из Throwable Object PrintStackTrace () = printStackTrace (System.err), PrintStackTrace (PrintStream) и PrintStackTrace (PrintWriter).
Если исключение не обрабатывается, бросается непосредственно после основного метода, метод исключения printStackTrace () будет вызван перед выходом программы, и в конечном итоге исключение в потоке «Main» + printStackTrace ()
2.
1. printStackTrace ()
Прежде всего, необходимо уточнить, что этот метод не исходит из класса исключений. За исключением определения нескольких конструкторов, все методы унаследованы от их родительского класса. Методы, связанные со исключениями, унаследованы от класса Java.lang.lowable. PrintStackTrace () - один из них.
Этот метод печатает информацию о треке стека о бросаемом объекте в стандартный выходной поток ошибок. Вывод выглядит так:
java.lang.nullpointerexception на myclass.mash (myclass.java:9) на myclass.crunch (myclass.java:6) на myclass.main (myclass.java:3)
Первая линия вывода - это выход метода ToString (). Мы поговорим об этом методе позже.
Давайте посмотрим пример ниже:
Общественный класс TestPrintstacktrace {public static void f () бросает исключение {бросить новое исключение («Есть что -то не так!»); ) {try {g ();Вывод этого примера заключается в следующем:
java.lang.exception: что -то пошло не так! в TestPrintStackTrace.f (TestPrintStackTrace.java:3) на testprintstacktrace.g (testprintstacktrace.java:6) на testprintstacktrace.main (testprintstack trace.java:10)
В этом примере исключение добавляется в метод f (), метод f () вызывается в методе g (), исключение залатывается в основном методе, и напечатана информация о дорожке стека. Поэтому выход показывает процесс f―> g―> main по очереди.
2. Метод getStackTrace ()
Этот метод обеспечивает программный доступ к информации, напечатанной методом printStackTrace (). Он возвращает массив элементов трека стека. Приведенный выше вывод является примером. Сохраните эти элементы трека стека в массиве. Каждый элемент соответствует кадре стека. Первый элемент массива сохраняет верхний элемент стека, который является F выше. Нижний элемент последнего элемента сохранил.
Вот пример использования getStackTrace () для доступа к этим элементам стека треков и распечатки вывода:
Общественный класс TestPrintstacktrace {public static void f () бросает исключение {бросить новое исключение («Есть что -то не так!»); ) {try {g (); ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ -------------------------------------------- ------ -"); for (stacktraceElement elem: e.getStackTrace ()) {System.out.println (elem);}}}}Такой выход в основном такой же, как и выходные данные printStackTrace () следующим образом:
java.lang.exception: что -то пошло не так! at testprintstacktrace.f (testprintstacktrace.java:3) на testprintstacktrace.g (testprintstacktrace.java:6) на testprintstacktrace.main (testprintstack Trace.java:10)testprintStacktrace.f(testprintPrintChtrace.java:3). Java: 6) testprintstacktrace.main (testprintstacktrace.java:10)
Three.FillinStackTrace Метод
Нативный метод FillinStackTrace () вернет бросаемый объект, который создается путем заполнения текущей информации о стеке вызовов в исходный объект исключения, поэтому возвращаемое исходное исключение по -прежнему остается исходным исключением.
Линия, которая вызывает этот метод, станет исключением нового местоположения, и информация об исходной точке возникновения исключений будет потеряна. Его эффект эквивалентен ловли исключения и переоборудования другого исключения. Разница между ними заключается в том, что исключение после FillinStackTrace по -прежнему остается исходным исключением (просто не хватает трека стека); Полем
Пакет com.jyz.study.jdk.exception; / ** * ); static void test2 () {test3 (); Информация о стеке исключений 1 и 2 показана на рисунке:
Разница - это сама информация.
1 информация о стеке
Исключение в потоке "Main" java.lang.nullpointerException: str null в com.jyz.study.jdk.exception.fillinstacktrace.test1 (filinstacktrace.java:2 0) на com.jyz.study.jdk.exception.fillinstacktrace. Main (filinstacktrace.java:13)
2 стека информации
Исключение в потоке "Main" java.lang.exception на com.jyz.study.jdk.exception.fillinstacktrace.test1 (filinstacktrace.java:21) на com.jyz.study.jdk. : 13)