Witam wszystkich. :)
Mam takie krótkie pytanie... Mianowicie, czy jest w Javie jakiś odpowiednik catch(...) z C++?
Inaczej mówiąc, czy istnieje sposób na łapanie dowolnego wyjątku?
Z góry dziękuję za odpowiedź.
Witam wszystkich. :)
Mam takie krótkie pytanie... Mianowicie, czy jest w Javie jakiś odpowiednik catch(...) z C++?
Inaczej mówiąc, czy istnieje sposób na łapanie dowolnego wyjątku?
Z góry dziękuję za odpowiedź.
@ShookTea Bzdury opowiadasz. Exception wcale nie matchuje wszystkich wyjątków.
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html
Poza tym łapiesz tak też wszystkie RuntimeExceptions co może być niepożądane...
Przy ładowaniu sterowników bazy danych trafiłem parę razy na LinkageError, który nie dziedziczy po Exception.
Po Throwable dziedziczy Exception i Error. Error NIE JEST wyjątkiem, tylko błędem JVM, na który programista nie ma wpływu. Exception dzieli się na RuntimeException i całą resztę, RuntimeException to wyjątki, których można było uniknąć, gdyby programista uważał przy programowaniu, i jako tako nie powinny być przechwytywane, jednakże autor wyraźnie napisał:
"Inaczej mówiąc, czy istnieje sposób na łapanie dowolnego wyjątku? "
Przykro mi ale się nie zgodzę. Error to też "sytuacja wyjątkowa" (od której skrótem jest "wyjątek") i jak najbardziej wynika ona głównie z błędu programisty a nie JVMa. Bo to że leci ci jakiś OutOfMemoryError to znaczy że ty coś spieprzyłeś w aplikacji a nie że JVM coś robi źle, tak samo z jakimś AssertionError.
Z RuntimeExceptions to też nie do końca tak jest że nie powinny być przechwytywane, bo powinny byc :P Żeby klient nie zobaczył nagle stacktrace jak coś poszło nie tak :)
"Core Java" C. Horstmann, G. Cornell:
"Hierarchia Error opisuje błędy wewnętrzne oraz wyczerpanie się zasobów wewnątrz systemu wykonawczego Javy. Nie powinieneś zwracać obiektów tego typu"
I czego to dowodzi? Tylko tego że nie powinieneś ręcznie rzucać takich wyjątków co jest dość oczywiste. Zresztą dobre praktyki są takie żeby w ogóle nie rzucać ręcznie standardowych wyjątków tylko tworzyć własną hierarchię wyjątków biznesowych, tak żeby łatwiej było się zorientować co się stało.
Przypominam cały czas, że autorowi tematu chodzi o przechwycenie wszystkich WYJĄTKÓW, nie wszystkich sytuacji wyjątkowych (jak nazywacie Error) czy wszystkich klas dziedziczących po Throwable. Autor tematu napisał wyraźnie i cytuję go już drugi raz:
"Inaczej mówiąc, czy istnieje sposób na łapanie dowolnego wyjątku?"
http://translate.google.pl/?hl=pl&tab=wT&authuser=0#pl/en/b%C5%82%C4%85d
http://translate.google.pl/?hl=pl&tab=wT&authuser=0#pl/en/wyj%C4%85tek
http://translate.google.pl/?hl=pl&tab=wT&authuser=0#pl/en/rzuca%C4%87