Jak rzucić wyjątek w Javie

Jak rzucić wyjątek w Javie
Wyjątkiem jest potencjalny błąd, którego system Java sygnalizuje program Java. Jeśli wyjątek (błąd) nie zostanie obsługiwany, dotykany wątek przestanie działać. Gdyby program był jednokierunkowy, program przestałby działać. Rozważ następujący program: klasa publiczna THlass
public static void main (string [] args)
System.na zewnątrz.println („widziane 1”);
int licznik = 6;
Int mianownik = 0;
int ilości = licznik / mianownik;
System.na zewnątrz.println („See 2”);
System.na zewnątrz.println (iloraz);

Ten program próbuje podzielić przez 0 w czwartym stwierdzeniu w metodzie Main (). W matematyce żadna liczba nie powinna być podzielona przez 0. Komputery również na to nie pozwalają. Ten program powinien wydrukować „Widziane 1”, to jeśli komputer jest możliwy podział zero, program powinien wydrukować „widziane 2”, a następnie wydrukować iloraz 6 podzielonych przez zero.

Ten program jest skutecznie kompilowany przez kompilator Javac. Jednak gdy program jest uruchamiany przez maszynę wirtualną Java (system operacyjny), „See 1” jest drukowane, a program zatrzymuje się w czwartym oświadczeniu, gdzie oczekuje się podziału zero, skąd (gdzie i następnie) jest komunikat o błędzie Wydane (wyświetlane). Program przestaje wykonywać w instrukcji Division przez zero, drukuje komunikat o błędzie i przestaje działać. Następnie dwa ostatnie instrukcje nie są wykonywane (nie działaj).

Gdyby jednak było to pomnożenie przez zero, co jest dozwolone, wówczas dwa ostatnie instrukcje zostałyby wykonane. Ten artykuł zawiera podstawy rzucania i obsługi wyjątku w Javie.

Błędy obsługi

Dzięki Javie można obsłużyć błąd, taki jak podział zero, z prostym kodem; tak, że instrukcje (kodowanie) po błędach (zostały wykonane). Jaki jest błąd tutaj? - Błąd tutaj jest podział po zero. Kod (rozwiązanie) przez programistę nie powinien zezwalać na wystąpienie błędu. Programista musi kodować tak zwane wrzucanie błędu, który jest nowym obiektem wyjątkiem. Obiekt wyjątku musi zostać złapany. Po złapaniu obiektu wyjątku program musi się z niego wyzdrowieć. Odzyskiwanie po błędach oznacza obsługę wyjątku.

Klasa biblioteki wyjątków obsługuje błąd bardziej niż programista. Klasa wyjątku nie musi być importowana na początku programu. To import odbywa się automatycznie, bez pomocy programisty.

Klasa wyjątku

Istnieją dwie główne klasy obsługi błędów w Javie: klasa wyjątku i klasa błędów. Ten artykuł dotyczy tylko klasy wyjątków. Jako postać klasa wyjątków zna zwykłe błędy, takie jak podział na zero i niechciane wartości zerowe w dosłownym ciągu.

Gdy nowy obiekt wyjątku zostanie wyrzucony, tuż po instrukcji, który spowodowałby błąd, biblioteka klas wyjątków zna błąd; Jeśli jest to zwykły błąd. Klasa wyjątku nie musi być importowana na początku programu. To import odbywa się automatycznie, bez pomocy programisty.

Oświadczenie Java próbuj

Oświadczenie TRY jest złożone, składające się z bloku próbnego i bloku łapania. W uproszczonej formie składnia to:

próbować
// stwierdzenie problemu;
Rzuć nowy wyjątek ();
* Instrukcje, jeśli nie wystąpi błąd *

Catch (wyjątek e)
System.na zewnątrz.println („Wiadomość wyjątku:” + e.getMessage ());

Try to słowo zastrzeżone; Catch to zarezerwowane słowo. Try-block ma problem z problemem. Stwierdzenie takiego jak,

int ilości = licznik / mianownik;

to stwierdzenie problemu. Jeśli mianownik nie jest zerowy, nie występuje błąd. Jeśli mianownik wynosi zero, to jest błąd. Oświadczenie o rzucie zwykle byłoby,

Rzuć nowy wyjątek ();

To oświadczenie powinno nadejść natychmiast po stwierdzeniu problemu. Jeśli wystąpi błąd, instrukcja rzutów rzuca nowy obiekt wyjątku. Zwróć uwagę na nawiasy. Jeśli mianownik wynosi 0, rzucany jest nowy obiekt wyjątku. Poniżej instrukcji rzutów znajdują się inne instrukcje, które zostałyby wykonane, jeśli nie wystąpił żaden błąd.

Powyższy blok z łapaniem ma jedno stwierdzenie. Może mieć więcej. Oświadczenie o rzucie w bloku TRY rzuca obiekt wyjątku, który jest złapany w nawiasach podpisu blokowego, w celu dalszego przetwarzania w jego bloku. Działanie to jest podobne do wywołania metody, z argumentem, które należy odbierać przez nawiasy wdrożenia metody w celu dalszego przetwarzania w bloku metody.

Pamiętaj, że obiekt wyjątku może rozpoznać różne typy zwykłych błędów i poradzić sobie z nimi. Obiekt wyjątku ma metodę, getMessage (). Ta metoda zwraca komunikat, który użytkownik może zrozumieć jako przyczynę błędu. To wywołanie metody jest stosowane wewnątrz bloku łapania.

Poniższy program wprowadza w praktykę oświadczenie próbne, z powyższym problemem Division-by-Zero:

Klasa publiczna THEClass
public static void main (string [] args)
System.na zewnątrz.println („widziane 1”);
int licznik = 6; Int mianownik = 0; Int ilorient;
próbować
if (mianownik == 0)
ilości = licznik / mianownik;
Rzuć nowy wyjątek ();

w przeciwnym razie
ilości = licznik / mianownik;
System.na zewnątrz.println („See 2”);
System.na zewnątrz.println (iloraz);

Catch (wyjątek e)
System.na zewnątrz.println („Wiadomość wyjątku:” + e.getMessage ());

System.na zewnątrz.println („kontynuuje”);

Block Try ma instrukcję IF-Compound. Część IF wykonałaby instrukcję problemu, gdy mianownik wynosi zero. W przeciwnym razie resztka wykonałaby instrukcję problemu, gdy nie wystąpiłby żaden błąd, gdy mianownik nie wynosi zero. Oznacza to, że programista musi poprowadzić zatrudnienie programu obsługi wyjątków. I tak w tym przypadku stwierdzenie problemu zostało wpisane dwukrotnie: raz w części IF i raz w części innej. Stwierdzenie problemu nie jest poprzedzone przez INT, ponieważ iloraz został zadeklarowany przed instrukcją złożoną próbę.

W blokie trybu jest tuż poniżej instrukcji problemu w części IF-COMPOUND. Nie znajduje się w innej części stwierdzenia if-powołania. Nie musi tam być, ponieważ elegancka część dotyczy sytuacji, gdy mianownik (operand) nie jest zerowy (nie ma problemu).

Przeczytaj powyższy program. Licznik to 6. Gdyby mianownik miał 2, wynik byłby:

widziałem 1
widziałem 2
3
Trwa

Oznacza to, że druga część instrukcji IF-Compound została wykonana, a nie część IF części instrukcji IF-Compound. W rzeczywistości część IF (kod) instrukcji if-powołania nie został wykonany, ponieważ mianownik nie wynosił zero. Reszta kodu w blokie próbnej została wykonana. Reszta kodu w bloku próbnym ma zostać wykonana.

Gdy mianownik wynosi 0, program wytworzy dane wyjściowe:

widziałem 1
Wiadomość wyjątku: / przez zero
Trwa

W tej sytuacji wykonano tylko kod w części if-blok. Oznacza to, że instrukcja rzutów została wykonana. Else, i kod poniżej instrukcji IF-Compound nie zostały wykonane. Nie są one zwykle wykonywane w tej sytuacji.

Blok złapania nie jest wykonywany, gdy nie ma problemu. Teraz blok złapania został wykonany. Oznacza to, że wykonano pojedynczy kod instrukcji w bloku łapania. Nowy obiekt wyjątku jest rzucany, został odebrany jako E. Metoda getMessage () obiektu, e, która zna zwykłe błędy (w tym błąd podziału po zeru) zwróciła komunikat „/ przez zero”.

Z tym błędem zwróconym komunikatem użytkownik wiedziałby, że wystąpił błąd podziału po zeru i został rozwiązany. Obsługa, tutaj oznacza, że ​​podział po zero nie wyrządził żadnej szkody dla programu i chociaż reszta kodu poniżej punktu błędu w instrukcji Try-Compound nie zostanie wykonana, kod poniżej tryku instrukcja złożona zostanie wykonana. Gdyby program obsługi nie był obecny, program byłby zakończony, a jaki.

Rzucanie wyjątku, metodą

W Javie stwierdzenie wyrzucania rzutu może rzucić wyjątek w blokie Try, jak pokazano powyżej. Metoda może również rzucić wyjątek, ale z inną składnią, nadal związaną z blokiem trybu. Rdzeń kodu blokowego jest teraz w ciele metody, a nie w blokie Try. Poniższy program powtarza powyższy, ale z metodą rzucającą wyjątek. Klasa z wdrożeniem metody to:

klasa Aclass
int Mthd (int nume, int deno) rzuca wyjątek
int quoti = nume / deno;
Zwrot cytowa;

Głównym kodem w metodzie jest instrukcja problemu. Stwierdzenie problemu nie jest już w blokie trybu (poniżej). Stwierdzenie problemu zostało wpisane raz, tutaj i dla całego programu (nie wpisane dwa razy). Wyrażenie rzutów jest teraz inne. To jest,

Rzuca wyjątek

przedłużenie podpisu metody po prawej stronie. „Rzuć” tutaj jest „Rzuty” z S. Wyjątek tutaj nie ma nawiasów.

W całym programie nie ma potrzeby instrukcji zawierającej IF. Ciało metody i „Wyjął wyjątek” służą celowi semantyki stwierdzenia złożonego IF-Else. Główna klasa staje się:

Klasa publiczna THEClass
public static void main (string [] args)
System.na zewnątrz.println („widziane 1”);
int licznik = 6; Int mianownik = 0; Int ilorient;
próbować
Aclasseobj = new aclass ();
ilorient = eobj.MTHD (licznik, mianownik);
System.na zewnątrz.println („See 2”);
System.na zewnątrz.println (iloraz);

Catch (wyjątek e)
System.na zewnątrz.println („Wiadomość wyjątku:” + e.getMessage ());

System.na zewnątrz.println („kontynuuje”);

Nadal ma oświadczenie złożone próbka. Jednak stwierdzenie problemu nie ma i nie jest wpisane dwa razy. Oświadczenie IF-Else również nie ma tutaj. Nie jest już potrzebny w miejscu programu. Dane wyjściowe z komunikatem o błędzie jest takie same jak poprzednio, ja.mi.

widziałem 1
Wiadomość wyjątku: / przez zero
Trwa

Zachowanie pełnego programu jest jak wcześniej.

Wreszcie klauzula

Oświadczenie TRY ma trzy klauzule: klauzula TRY, klauzula haby i wreszcie klauzula. Może być więcej niż jedna klauzula Catch - patrz później. Wreszcie blok pojawia się na końcu instrukcji TRY-COPIND, a programista przekazał użytkownikowi wiadomość, że możliwy błąd został obsługiwany. Kodowanie klauzuli wreszcie jest opcjonalne. Poniższy kod ilustruje użycie klauzuli ostatecznie dla powyższego programu:

System.na zewnątrz.println („widziane 1”);
int licznik = 6; Int mianownik = 0; Int ilorient;
próbować
Aclasseobj = new aclass ();
ilorient = eobj.MTHD (licznik, mianownik);
System.na zewnątrz.println („See 2”);
System.na zewnątrz.println (iloraz);

Catch (wyjątek e)
System.na zewnątrz.println („Wiadomość wyjątku:” + e.getMessage ());

Wreszcie
System.na zewnątrz.println („Każdy błąd był obsługiwany.");

Jeśli mianownik to 2, wyjściem byłoby:

widziałem 1
widziałem 2
3
Każdy błąd był obsługiwany.
Trwa

Jeśli mianownik wynosi 0, wyjściem byłoby:

widziałem 1
Wiadomość wyjątku: / przez zero
Każdy błąd był obsługiwany.
Trwa

Wreszcie blok jest wykonywany, niezależnie od tego, czy wystąpił błąd.

Wniosek

Wyjątek jest rzucany, z prostym instrukcją w bloku próbnym, prawdopodobnie zakodowanym za pomocą instrukcji IF-Compound i instrukcji problemu. Wyjątek może być nadal wyrzucony metodą w odniesieniu do instrukcji Try-Compound. Ten artykuł był podstawą rzucania wyjątkiem w Javie.