Łapanie wszystkich wyjątków

Łapanie wszystkich wyjątków
QK
  • Rejestracja: dni
  • Ostatnio: dni
0

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ź.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

@Patryk27 nie bądź niemiły :)

@Qkartka, w Javie każdy wyjątek jest klasą dziedziczącą po Exception, więc zamiast np.

Kopiuj
try {
...
}
catch (IOException ex) {
...
}

podajesz po prostu:

Kopiuj
try {
...
}
catch (Exception ex) {
...
}

Wychwytuje to wszystkie wyjątki.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

@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...

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
2

Przy ładowaniu sterowników bazy danych trafiłem parę razy na LinkageError, który nie dziedziczy po Exception.

ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

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? "

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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 :)

ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

"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"

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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.

ShookTea
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 629
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.