kiedy throw, a kiedy try - catch?

0

tak się zastanawiam kiedy używać throw a kiedy try catch? dostałem też takie pytanie na rozmowie

pozdrawiam bez odbioru

3

try catch uzywasz do wszystkich operacji ktorych nie mozesz przewidziec, np odczytywanie pliku, moze nie bedziesz miec dostpeu albo plik moze nie istniec, albo moze byc corrupted sam w sobie
throw robisz, gdy nie chcesz obsluzyc wyjatku. Np we frameworkach logujesz wyjatek i rzucasz dalej by ewentualny uzytkownik danej funkcji mogl sobie to obsluzyc tak jak chcial (tak jak funkcja o obsludze plikow rzuca wyjatki, bo sama nie wie jak osoba ktora uzywa tego kodu chce go obsluzyc)

0

dzieki wielkie,
mogli tak napisac w ksiazce, ale po co

0

o_O dziwne pytanie, skoro to są zupełnie różne rzeczy. Chyba ze chodzi o to kiedy zrobić throws a kiedy try catch, tzn kiedy przerzucać wyjątek dalej a kiedy go łapać?

  1. throw to rzucenie wyjątku, żeby przerwać wykonanie i zasygnalizować błąd. Zwykle oznacza to poważny bład który trzeba obsłużyc gdzieśtam kilka poziomów wyżej
  2. try catch to konstrukcja w której wywołuje się kod który moze rzucać wyjątki (czyli moze się wywalić) i w bloku catch daje sie operacje do wykonania jak sie coś posypało. Zwykle co najmniej wpisanie informacji do logów, ale często też jakieś próby "naprawienia" sytuacji
  3. throws to informacja że dana metoda rzuca wyjątek. Wyjątki checked muszą albo być obsłużone przez try catch albo rzucone dalej.
0
Uczynny Kaczor napisał(a):

dzieki wielkie,
mogli tak napisac w ksiazce, ale po co

A ogólnie jak oceniasz swoją rozmowę w takim razie?

0

throw można użyć w dowolnym miejscu, nie tylko w bloku catch, jednak częstym idiomem jest łapanie niskopoziomowych wyjątków w bloku catch, pakowanie ich w wysokopoziomowe błędy (dodając jakiś dobry opis błędu, w którym korzystamy z wiedzy na temat tego co robi funkcja w której łapiemy wyjątek) i rzucanie wyżej, np:

try {
  // kod
} catch (JavaLowLevelException ex) {
  throw new LibraryHighLevelException("can't lift a snowman", ex);
}
0

Ja tam wole throw.
Catch to dla fanow pokemonow: http://wiki.c2.com/?PokemonExceptionHandling

0
TT napisał(a):
Uczynny Kaczor napisał(a):

dzieki wielkie,
mogli tak napisac w ksiazce, ale po co

A ogólnie jak oceniasz swoją rozmowę w takim razie?

analityk, java mile widziana, a 90% pytan z javy, ciezko

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0