Myślę, że na ostatnim wątku zakończymy temat biblioteki Swing i zerkniemy znowu na obsługę wyjątków. To nie będzie kolejna pogadanka o wyjątkach, a tylko o pewnej metodzie wykorzystywanej nałogowo przez wiele osób w programach, filmach czy poradnikach. Widzicie to tyle razy. Za każdym razem gdy ktoś na szybko pisze "try-catch", zwykle osadza to samo wyrażenie po nazwie instancji klasy "Exception". Bez przerwy w przeważającej większości przypadków ludzie zalecą Wam to samo. W książkach wielkimi wołami również jest o tym wspomnienie, a jednak można nie zdawać sobie sprawy co ta metoda robi takiego ekscytującego, że wszyscy to stosują. "printStackTrace". Co to takiego? Zapraszam do środka.

"PRINTSTACKTRACE". MOŻE ZAJRZEĆ DO ANGIELSKIEGO?

Z reguły zalecam wszystkim moim znajomym pytającym mnie o zdanie na temat jakiegoś programu, że jak nie potrafią niczego powiedzieć o jakimś słowie kluczowym czy metodzie, niech zaczną od tłumaczenia nazwy na język polski. Prześledźmy po kolei. "print" oznacza "drukowanie", aczkolwiek nie chodzi o takie drukowanie jak to rozumiemy przez drukarkę. Chodzi jedynie o wypisanie tekstu na strumień wyjściowy. Dalej, słowo "stack". To jest stos, czyli struktura danych na której się "kładzie" wszystkie dane i metody zgodnie z działaniem "LIFO" (ang. "Last In, First Out"). W celu dostania się do jakiejkolwiek danej, należy najpierw "zdjąć" wszystko to, co stoi wyżej, tak samo jakby się położyło stos talerzy. "trace" jest ostatnim słowem, to jest dosłownie "śledzenie". W tym kontekście akurat, mamy to rozumieć jako "zdanie relacji" punkt po punkcie co się działo ze stosem. Na to składa się w całości "printStackTrace".

W efekcie końcowym mamy tłumaczenie: "wydrukuj śledzenie stosu". Jakkolwiek by to nie brzmiało komicznie, chodzi o wypisanie wszystkich metod umieszczonych na stosie od momentu uruchomienia programu do momentu zgłoszenia wyjątku. Wypisywanie swoistego "raportu" o stosie jest jedną z często uprawianych technik debugowania w celu ustalenia kolejności wykonywania pewnych instrukcji przez aplikację. Dzięki temu, istnieje szansa samodzielnego zdiagnozowania przyczyny wystąpienia zgłoszenia wyjątku i ewentualnej eliminacji problemu.

TO NIE SĄ WSZYSTKIE MOŻLIWOŚCI "PRINTSTACKTRACE"

"printStackTrace" może być również określane jako lista wszystkich oczekujących wywołań metod w danym momencie wykonywania programu. Sama metoda jest popularna i często widziana w kodach źródłowych, aczkolwiek na tym świat się nie kończy. Na przykład tego już możecie nie wiedzieć, że pochodzi to od klasy "Throwable" i ma związek z klasą "StackTraceElement". Oraz że metoda jest przeciążona i można przekazać aktualny stan stosu do obiektu typu "PrintWriter" lub "PrintStream" i wypisać dane diagnostyczne do pliku tekstowego (w przypadku tego pierwszego). Takich manewrów często się nie praktykuje i stąd ograniczenie wiedzy tylko do tej metody.

Wypisanie aktualnego stanu stosu w chwili zgłoszenia wyjątku za pomocą "printStackTrace"

Przykładowy stos wywołań metod po wywołaniu funkcji "printStackTrace".


Zaskoczeni brakiem kodu? Ten jeden raz postanowiłem odejść od przyzwyczajeń i zakończyć tylko na teorii. Zresztą wystarczy tylko w klauzuli "try-catch" odwołać się do instancji typu "Exception" i wywołać metodę "printStackTrace". Na taką prostą rzecz już naprawdę nie potrzeba przykładu.

PODOBNE ARTYKUŁY