Java: wyjątek i jego przetwarzanie

Każdy program będzie działał stabilnie tylko wtedy, gdy jego kod źródłowy zostanie dostosowany i nie ma warunków, które mogłyby spowodować nieprzewidziane sytuacje. Proces wychwytywania ewentualnych awarii przeprowadzany jest na etapie programowania. W tym celu programista uwzględnia wszystkie możliwe do przewidzenia wyniki i próbuje ograniczyć błąd w taki sposób, aby nie mógł złamać programu lub spowodować awarię programu.

Gdy może być wymagana obsługa wyjątków

W języku Java wyjątki mogą być spowodowane nieprawidłowym wprowadzeniem danych przez użytkownika, brakiem zasobów zasobowych wymaganych do działania programu lub nagłym wyłączeniem sieci. Aby wygodnie korzystać z programu stworzonego przez programistę, konieczne jest kontrolowanie pojawiania się wyjątkowych sytuacji. Konsument nie powinien czekać, aż zamknięcie programu kurtynowego się zakończy, stracić dane w wyniku surowych wyjątków lub po prostu zauważyć, że coś poszło nie tak.


Obsługa wyjątków Java

Co należy wziąć pod uwagę? Język Java ma wbudowaną funkcję obsługi wyjątków. Oczywiście, duży procent błędów zostaje zatrzymany na etapie kompilacji, kiedy system automatycznie ogłasza, że ​​nie jest możliwe dalsze korzystanie z niego. Ale istnieje również typ wyjątku, który występuje, gdy program jest uruchomiony. Programista musi być w stanie to przewidzieć i zaprojektować kod w taki sposób, aby nie powodował błędu, ale obsługuje go w specjalny sposób lub przekazuje zarządzanie innymoddział W języku Java ten rodzaj wyjątku jest narzucany przez kompilator, więc typowe problemy są znane i mają własny standardowy schemat wykonywania.

Typowe wyjątki

Najprostszym przykładem wyjątku, który można uzyskać, jest podział. Mimo całej swojej prostoty, w wyrażeniu, jako dzielnik może wynosić zero, co doprowadzi do błędu. Cóż, jeśli jego wygląd można przewidzieć i zapobiec. Ale ta opcja nie zawsze jest dostępna, więc wyjątek powinien być zorganizowany natychmiast, gdy występuje "podział zerowy".


W języku Java mechanizm obróbki dla przechwytywania błędu wygląda następująco:
  • przedmiot wykluczenia jest tworzony w przedziale, jak również każdym innym;
  • naturalny przebieg programu został przerwany;
  • mechanizm wykluczenia próbuje znaleźć alternatywny sposób rozszerzenia kodu;
  • ustalenie bezpiecznej realizacji programu w procesorze, pracy lub zostanie przywrócone, lub wdrożenie wyjątku w specjalny sposób.
  • Najprostszy przykład błędu może wyglądać następująco: if (a == null) rzuca nowy NullPointerException (); Tutaj zmienna a jest sprawdzana pod kątem inicjalizacji, to znaczy nie jest równa wartości odniesienia do obiektu zerowego. Jeśli taka sytuacja wystąpi i wymaga specjalnego przetwarzania, wykluczenie jest wyrzucane za pomocą polecenia throw new NullPointerException ().

    Niektóre szczegóły dotyczące słów kluczowych

    W przypadku wyjątków często muszą używać słów kluczowych Java, aby określić działanie. W tym języku programowania jest pięć:
  • Spróbuj. To słowo kluczowe zostało już spełnione i oznacza przejście do obszaru kodu, który możewygenerować wyjątek. Blok to nawiasy klamrowe {}.
  • Złap. Przechwytuje wymagany typ wyjątku i odpowiednio go obsługuje.
  • Wreszcie. To słowo kluczowe jest opcjonalne i służy do wykonywania dowolnego obszaru kodu, który jest wymagany w każdym przypadku, nawet jeśli nie przechwycono wyjątku. Natychmiast po bloku spróbuj.
  • Throw - umożliwia tworzenie wykluczeń Java w dowolnym miejscu kodu.
  • Zgłasza - klucz wpisany do podpisu metody. Oznacza to, że poniższy kod może rzucić wyjątek na określony typ Java. Ta etykieta jest sygnałem dla programistów, o czym należy pamiętać - metoda może nie działać tak, jak się tego oczekuje.
  • Zrobione przy próbie

    Oczywiście wyjątek w Javie zakłada, że ​​będzie on specjalnie przetwarzany. Najwygodniej jest to zrobić, jeśli obszar kodu jest zablokowany w bloku. Które mogą zawierać wyjątek. Podczas wykonywania takiego kodu maszyna wirtualna znajdzie nieprzewidziane sytuacje, zrozumie, że znajduje się w krytycznym bloku i przekazuje kontrolę do obszaru z przetwarzaniem.
    Kod Java jest zawijany w specjalnym bloku try, w którym można wygenerować wyjątek. W związku z tym umieścił kilka nieprzewidzianych sytuacji naraz, które zostaną złapane w jednym miejscu, bez naruszania kodu. Najbardziej typowy kod z jednostką przetwarzania wygląda następująco: try {//To zidentyfikuje kod, który może wygenerować wyjątek} catch (Type_exclusion_1 identifier_1) {//To przetwarzanie wyjątku odbywa się zgodnie z jego typem i warunkami; } catch (wyjątek type_2)identifier_2) {//Tutaj przetwarzanie wyjątku odbywa się zgodnie z jego typem i warunkami; } Słowo kluczowe catch określa, że ​​kod wyjątku ma być przetwarzany w sposób opisany poniżej, pod warunkiem, że jest zgodny z jego typem. Identyfikator może być użyty wewnątrz bloku kodu przetwarzania jako argumenty.

    Wreszcie

    Jak stało się jasne w poprzednim rozdziale, należy zablokować wyjątki catch catch i je przetwarzać. Ale bardzo często pojawia się sytuacja, gdy kod musi przejść, niezależnie od tego, czy błędy zostały złapane. Do tego dochodzi słowo kluczowe. Służy do zwiększania wartości różnych liczników, zamykania plików lub połączeń sieciowych.
    W tej sekcji znajduje się kilka bloków połowowych z fikcyjnymi wyjątkami. Na przykład kod zawarty w try generuje nieprzewidywalny przypadek Cold. Następnie wyrażenia "Przyłapani na zimno!" I "Czy to jest coś, na kogo można pocieszyć?" Zostaną wyświetlone w konsoli. Oznacza to, że blok ostatecznie jest wykonywany w każdym przypadku. W rzeczywistości istnieje sposób uniknięcia wodowania. Jest to związane z ukończeniem maszyny wirtualnej. Znalezienie sposobu wdrożenia go można znaleźć w Internecie.

    Wrzucanie słów kluczowych

    Throw generuje wyjątek. Składnia wygląda następująco: throw new NewException (); Spowoduje to utworzenie nowego wyjątku z typem NewException (). Jako typ można już używać w standardowych klasach bibliotek Java i wcześniej definiowanych przez programistę własnej produkcji. Taka konstrukcja jest zawarta w opisie każdej metody, której wyzwanie powinno następnie wystąpić w bloku try, aby byćmożliwość przechwycenia go.

    Rzuty słów

    Co zrobić, gdy w procesie projektowania wystąpi sytuacja, gdy metoda może wygenerować wyjątek, ale nie może obsłużyć go poprawnie. W tym celu w metodzie podpisu wyszczególnione są wyrzucane słowa i rodzaj możliwego wykluczenia. Ta etykieta jest swoistym przewodnikiem dla programistów klienta, że ​​metoda nie jest w stanie przetworzyć własnego wyjątku. Ponadto, jeśli typ błędu zostanie zweryfikowany, kompilator zmusi go do jawnego określenia.

    Wypróbuj zasoby

    W języku Java 7 twórcy wprowadzili tak ważną innowację, jak przetwarzanie bloku try przy użyciu zasobów. Wiele utworzonych obiektów w Javie, po ich użyciu powinny być zamknięte, aby zapisać zasoby. Wcześniej musiał to wziąć pod uwagę i zatrzymać takie przypadki ręcznie. Teraz mają interfejs AutoClosable. Pomaga automatycznie zamknąć wcześniej używane obiekty znajdujące się w bloku try. Dzięki takiemu podejściu kod pisania stał się wygodniejszy, znacznie wzrosła jego czytelność.

    Własne klasy wyjątków Java

    Twórcy opisywanego języka programowania wzięli pod uwagę wiele aspektów przy projektowaniu rodzajów zdarzeń losowych. Jednak wszystkie warianty wyniku zdarzeń nie zapobiegną, więc Java ma możliwość zdefiniowania własnych wyjątków, które pasują dokładnie do potrzeb określonego kodu. Najprostszym sposobem tworzenia jest dziedziczenie z najbardziej odpowiedniego kontekstu obiektu.
    Po raz kolejny wystąpił wyjątek, klasa używana do definiowania własnych wyjątków. MyException ma dwa konstruktory - jeden domyślnie,drugi z argumentem msg typ String. Następnie klasa publiczna klasy FullConstructors implementuje metodę f, której podpis zawiera wyjątek MyException throw. To słowo kluczowe oznacza, że ​​f może zgłaszać wyjątek do języka Java typu MyException. Następnie w treści metody wypisz informacje tekstowe do konsoli i samego generowania MyException, za pomocą rzutowania. Druga metoda różni się nieco od pierwszej, która podczas tworzenia wyjątku przekazuje parametr ciąg, który będzie wyświetlany w konsoli podczas gwizdka. W zasadzie oczywiste jest, że f () i g () są umieszczane w bloku sprawdzania try, a słowo kluczowe catch jest skonfigurowane dla catchu MyException. Wynikiem przetwarzania jest wynik komunikatu o błędzie w konsoli:
    Możliwe było więc dodanie wykluczenia Java, stworzonego przez ciebie.

    Architektura wyjątków

    Podobnie jak wszystkie obiekty w Javie, wyjątki są również dziedziczone i mają strukturę hierarchiczną. Elementem głównym wszystkich błędów zgłaszanych w tym języku programowania jest klasa java.lang.Throwable. Z niego dziedziczą dwa typy - Błąd i wyjątek.
    Błąd - ostrzega o krytycznych błędach i nie sprawdza pod kątem wykluczenia Java. Przechwytywanie i przetwarzanie takich danych w większości przypadków jest w trakcie opracowywania i nie wymaga wprowadzenia do kodu końcowego programu. Najczęściej stosowaną klasą do tworzenia i analizy wyjątków jest wyjątek. Który z kolei jest podzielony na kilka gałęzi, w tym RuntimeException. RuntimeException zawiera wyjątki środowiska wykonawczego, które występują podczas działania programu. Wszystkie odziedziczone po nim klasy są nieporęczne.

    Często napotykanywyjątek

    W wyjątku Java, którego lista jest przedstawiona poniżej, jest najczęściej używany, warto więc szczegółowo opisać każdy z nich:
  • Wyjątek arytmetyczny. Obejmuje to błędy związane z operacjami arytmetycznymi. Najbardziej uderzającym przykładem jest podział na zero.
  • ArrayIndexOutOfBoundsException - Odwołanie do numeru elementu tablicy, który przekracza jego całkowitą długość.
  • ArrayStoreException - próba przypisania elementu tablicy niekompatybilnego typu.
  • ClassCastException jest próbą niepoprawnego przeniesienia jednego typu do drugiego.
  • IllegalArgumentException - użyj niewłaściwego argumentu podczas wywoływania metody.
  • NegativeArraySizeException jest wyjątkiem podczas tworzenia tablicy wymiarów ujemnych.
  • NullPointerException - użycie odwołania do wartości null jest niepoprawne.
  • NumberFormatException - występuje, gdy łańcuch jest niepoprawnie przekonwertowany na liczbę.
  • ​​
  • UnsupportedOperationException - operacja nie jest obsługiwana.
  • Te przykłady nie są sprawdzane pod kątem typów wyjątków Java. Ale wygląda to na sprawdzone:
  • ClassNotFoundException - klasa nie została znaleziona.
  • IllegalAcccessException - Ograniczanie dostępu do klasy.
  • InterruptedException - przerywa przepływ wątku.
  • NoSuchFieldException - nie ma wymaganego pola.
  • Interpretacja wyjątków

    Mówiąc o częstych wyjątkach, należy zauważyć, że ich interpretacja w trakcie rozwoju może zostać źle zrozumiana. Poniżej znajduje się mała lista, która wyjaśnia bardziej szczegółowo, kiedy może wystąpić nieplanowana sytuacja.
    NullPointerException. Pierwszy wyjątek, gdy występuje wyjątek, jest odniesieniem do odniesienia do obiektu, który jest równynull Dotyczy to również metod zerowej instancji klasy. Wywoływany jest wyjątek NullPointerException, a w przypadku uzyskania długości tablicy tablica ma wartość NULL. Unikanie takich sytuacji pomoże okresowo skanować obiekty o wartości zerowej. Wyjątek ArrayIndexOutOfBoundsException. Żaden program nie może istnieć bez użycia tablic. W związku z tym częste ich leczenie może powodować błędy. Istnieje wyjątek, gdy programista próbuje uzyskać dostęp do elementu tablicy, który nie znajduje się na liście indeksów. Na przykład żądana wartość jest większa od długości lub mniejsza od zera. Bardzo często wynika to z faktu, że faktura w tablicy zaczyna się od zera.

    Wnioski

    Przetwarzanie wyjątków Java - potężne środowisko narzędziowe, które znacznie ułatwia pracę programisty i pozwala mu stworzyć czysty i wolny od błędów kod. Status i reputacja firmy deweloperskiej zależą od tego, jak płynna i stabilna jest funkcjonalność aplikacji.
    Oczywiście, w mniej lub bardziej prostych programach, dużo łatwiej jest śledzić sytuacje outsourcingu. Ale w dużych zautomatyzowanych kompleksach na kilkaset tysięcy linii jest to możliwe tylko w wyniku długiego debugowania i testowania. W przypadku wyjątków Java, błędy, które pojawiają się w niektórych aplikacjach, poszczególne firmy oferują nagrody, gdy zostaną znalezione przez entuzjastów. Szczególnie cenione są te, które powodują naruszenie zasad bezpieczeństwa pakietu oprogramowania.

    Powiązane publikacje