Obsluga wyjatkow

Obsluga wyjatkow
0

Fragment kodu:

try{

cos tam
}

catch(Wyjatek 1)
{
cos co moze zwrocic wyjatek
}
catch(Exception x)
{
cos tam;
}

I teraz takie pytanie: w jaki sposob zrobic, by to co moze sie sypnac w pierwszym catchu przechwyci catch(Exception x)? Bo pisanie w catchu kolejnego try-catch strasznie mi sie nie podoba ;] Mam nadzieje, ze ktokolwiek rozumie o co mi chodzi

lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

nie można tak zrobić. catch wyłapuje wyjątki tylko z bloku try z którym jest związane.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

W catch raczej nie powinieneś robić ryzykownych instrukcji które mogą rzucić wyjątek, ale jeśli już musisz to musisz normalnie ten wyjątek obsługiwać za pomocą try i catch, nic na to nie poradzisz ze ci urośnie taka piramidka z tego.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Jest nawet gorzej. Rzucony w bloku catch wyjątek zastąpi wcześniej rzucony wyjątek (zwykle ten ważniejszy). A przynajmniej tak było do wersji 1.6. (bug javy 1.5 i wcześniejszych).
Generalna zasada jest taka aby kod zamknięty w catch nie mógł spowodować żadnego wyjątku, nawet banalnego.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
0
Olamagato napisał(a)

Generalna zasada jest taka aby kod zamknięty w catch nie mógł spowodować żadnego wyjątku, nawet banalnego.

To zapytam z ciekawości. Co mam zrobić, jeżeli złapałem wyjątek i teraz chcę zapisać informację o błędzie do pliku? Przecież zapisywanie też może rzucić przykładowo IOException.

Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Przecież wyjątek i zrzut stosu możesz zapisać do dowolnej lokalnej zmiennej lub dowolnego pola obiektu na stercie. I odpowiednio go wykorzystać lub ponownie rzucić w odpowiednim momencie.

Co prawda przy dużym pechu, w każdym momencie może się też zdarzyć OutOfMemoryException, ale to już sytuacja skrajna bo takie wyjątki łapią tylko paranoicy jak ja ;) lub tacy, którzy za swój soft biorą bardzo grubą kasę.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
0

Powiedz ze zartujesz z tym OutOfMemory, prosze...

Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0
Olamagato napisał(a)

OutOfMemoryException
Nie przypadkiem OutOfMemoryError ?

Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

A tak, oczywiście. "Exception" było z rozpędu. :)
@::. To oczywiście żart bo w przetestowanym sofcie nic takiego się nie sprawdza. Chociaż dobrze jest jak aplikacja jest w stanie monitorować ilość pamięci, którą ma do dyspozycji. Pomijając już to, że Errorów nie łapie się z założenia. :)


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
lipkerson
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0
Olamagato napisał(a)

Pomijając już to, że Errorów nie łapie się z założenia. :)

Oczywiście że się łapie z założeniem...niekiedy jedynym sposobem na "poprawne sterowanie" jest celowe wyłapywanie wyjątków. Najprostrzy przykład: masz sobie sockecik już po połączeniu i nagle klient się wyłącza i dostajesz java.net.SocketException: socket closed i już wiesz ze musisz znowu przejsć w stan nasłuchu. Jakbyś to zrealizował niby "nie łapiąc z założenia"? A różnicą jest, czy dostaniesz socket close czy connection reset i tak mozęsz sterować programem.

Pozdro

PS: No i jeszcze przeciez sami możemy sobie stworzyc klasę co będzie dziedziczyć po Exception i tam sobie możemy popisać różne bzdurki jakie chcemy. Np. bedzie metoda trescaOstatniegoBledu, która nam wyłapie czy błąd był w pierwszym catchu czy w drugim i napisze jego treść.


Another jam from the world for the jam from the voices of the world......
lemmiwink
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 12 lat
0

Olamagato nie chodziło o wyjątki (klasa Exception) tylko o "errory" (klasa Error), których rzeczywiście nie powinno się wyłapywać:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Error.html

@down poprawione :)

S3
  • Rejestracja:ponad 14 lat
  • Ostatnio:4 miesiące
0

NIE powinno się :P

lipkerson
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0
lemmiwink napisał(a)

Olamagato nie chodziło o wyjątki (klasa Exception) tylko o "errory" (klasa Error), których rzeczywiście nie powinno się wyłapywać:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Error.html

@down poprawione :)

Taaa, Po pierwsze errory i exceptiony dziedziczą i tak po tej samej klasie Throwable.
Po drugie Olamagato sam chyba do końca nie rozróżnia errorów od exceptionów, więc jak on sam nie wie to Ty tym bardziej nie wiesz co on wie:-)
Po trzecie i najważniejsze: autor postu dał tytuł "Obsluga wyjatkow" i zamieścił kod źródłowy try-catch-exception (wyjątek) więc mowa jest o wyjątkach a nie o errorach. A wyjątki należy łapać i obsługiwać na swój sposób.
A jak już chcecie o errorach przecież błąd braku pamięci jest do obsłuzenia i wybrnięcia. Przykłąd w apliakcji rozpoznawajacej i przetwarzajacej obrazy. Dostajesz błąd ale maszyna sie nie wysypie od razu i masz czas na "zerowanie" zapamiętanych a nie koniecznie wykorzystanych wzorców. Oczywiście o niebo lepszym byłoby monitorowanie zasobów pamięci.


Another jam from the world for the jam from the voices of the world......
lipkerson
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0
shooter3 napisał(a)

NIE powinno się :P

Nie, ze nie powinno się tylko z racji, ze mogą wystąpić gdziekolwiek w programie to ich wyłapanie jest bardzo trudne albo niemożliwe-a nie że się nie powinno.

Matematyczne obliczenia do wielowymiarowych tablic są przykładem na to iż można wyłapaći użyc takiego errora.


Another jam from the world for the jam from the voices of the world......

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.