throw InputMismatchException

0

Jestem poczatkujacym programista , zauwazylem ze kazdy program jaki widzialem z throw ma nad soba ifa , wiec jak rozumiem ze uzywajac throw musi to byc typ bledu ktory da rade ogarnac ifem a potem throw? np ArrayIndexOutOfBoundsException to po prostu robisz ifa ze musi byc index wiekszy badz rowny 0 i mniejszy niz tab.length , wiec nie da rady uzyc throw na bląd InputMismatchException?Bo w ifie chyba nie da rady tego ,, ogarnac,, zeby mogl byc rzucony? jesli sie myle to prosze o jakis PROSTY przyklad . Pozdrawiam :)

0

Rzucanie wyjątków (throw) służy do zgłaszania sytuacji która jest nie przewidziana; i nie wiadomo jak obsłużyć. If przed throw sprawdza czy sytuacjia wyjatkowa wystąpiła (i jeżeli wystąpiła to wykonywana jest instrukcja rzucania wyjątku).

Nazwy wyjątków nie mają znaczenia w kontekście tego co się da a co sie nie da. Nazwy mają sugerować co jest przyczyną przerwania operacji.

0

jak rozumiem ze uzywajac throw musi to byc typ bledu ktory da rade ogarnac ifem a potem throw?

Ogólnie to tak z tym że, użycie throw sugeruje, że programista wie co robi. :)

Natomiast jeśli chodzi o obsługę błędów itp.: zdecydowanie lepiej jest skorzystać z bloku try-catch i w tym bloku użyć if-else do np. logowania błędów z pomocą log4j. Można używać System.out lub System.err, z czego to drugie tylko koloruje w konsoli. Jeśli masz bardzo dużą i rozbudowaną web aplikację, to szukanie w logach jakiegoś System.out to jest oczopląs. Stąd wskazanie na log4j. To nie jest to samo co celowe użycie throw, tylko drobna wskazówka jak podchodzić do obsługi błędów.

0

ale nie da rady ifem sprawdzic czy wystapil blad InputMismatchException (jak programista ma wpisac np liczbe a wpisze litere) wiec nie da rady uzyc throw tutaj mam racje? i tylko try catch?

0

Tak masz rację. if-em nie sprawdzasz błędu, tylko zakładasz jaki błąd wyrzucić, jeśli on wystąpi w jakiejś sytuacji. Stąd moje określenie, że programista wie co robi :)

0

podsumowujac , throw jest zalezny od ifa , jesli nie da rady jakiegos bledu ,,ogarnac,, ifem to nie da rady go rzucic uzywajac throw i wtedy trzeba uzyc try catch , tak?

0

Nie rozumiem trochę twojej odpowiedzi.

Throw nie jest zależny od ifa.
To ortogonalna konstrukcja.

W szczególności możesz pisać programy tylko na ifach /while/for bez używania throw.
Albo możesz napisać cały program tylko korzystając tylko z throw http://www.99-bottles-of-beer.net/language-java-866.html
To drugie rozwiązanie jest oczywiście głupie.

Normalnie w programach miesza się obydwie konstrukcje.
To jest trochę jak ze światłami drogowymi:
Normalne sterowanie na skrzyżowaniu masz przez czerwone i zielone światła, i one decydują kto jedzie/idzie, a kto stoi. Tak działa if.
Ale czasem jedzie prawidłowo oznakowana kolumna pojazdów rządowych posługująca się sygnałami świetlnymi i dźwiękowymi
i ich te światełka generalnie nie obchodzą.

Ify obsługują to co jest normalne i jest twoim algorytmem / logiką.
Throw używasz tam gdzie ta logika się kończy - np. program ma znaleźć dane użytkownika w pliku (stałym)... a tu nie ma pliku.

Do tego warto jeszcze dodać, że o ile błąd nie jest "zupełnie/totalnie" niespodziewany to lepiej exceptionów i throw nie używać. (Konstrukcje Option/Either/List
są lepiej testowalne).

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