Java rzuca i rzuca słowo kluczowe

W tym samouczku nauczymy się używać słów kluczowych throw i throws do obsługi wyjątków z pomocą przykładów.

W Javie wyjątki można podzielić na dwa typy:

  • Wyjątki niesprawdzonych: nie są one sprawdzane w czasie kompilacji, ale w run-time.For przykład: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, wyjątki przewidziane w Errorklasie, itp
  • Zaznaczone wyjątki: są sprawdzane w czasie kompilacji. Na przykład IOException, InterruptedExceptionitd

Zapoznaj się z tematem Wyjątki Java, aby uzyskać szczegółowe informacje na temat zaznaczonych i niezaznaczonych wyjątków.

Zwykle nie musimy obsługiwać niezaznaczonych wyjątków. Dzieje się tak, ponieważ niezaznaczone wyjątki występują z powodu błędów programowania. I dobrą praktyką jest poprawianie ich zamiast zajmowania się nimi.

W tym samouczku skupimy się teraz na obsłudze zaznaczonych wyjątków przy użyciu throwi throws.

Java wyrzuca słowo kluczowe

Używamy throwssłowa kluczowego w deklaracji metody, aby zadeklarować typ wyjątków, które mogą w niej wystąpić.

Jego składnia to:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Jak widać z powyższej składni, możemy użyć throwsdo zadeklarowania wielu wyjątków.

Przykład 1: Java zgłasza słowo kluczowe

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Wynik

 java.io.FileNotFoundException: test.txt (Brak takiego pliku lub katalogu) 

Kiedy uruchamiamy ten program, jeśli plik test.txtnie istnieje, FileInputStreamwyrzuca a, FileNotFoundExceptionktóry rozszerza IOExceptionklasę.

Jeśli metoda nie obsługuje wyjątków, typ wyjątków, które mogą w niej wystąpić, musi być określony w throwsklauzuli, aby metody znajdujące się dalej w stosie wywołań mogły je obsłużyć lub określić za pomocą throwssamych słów kluczowych.

findFile()Metoda określa, że IOExceptionmoże zostać wyrzucony. main()Metoda nazywa tę metodę i obsługuje wyjątek jeśli jest wyrzucane.

Zgłaszanie wielu wyjątków

Oto jak możemy zgłosić wiele wyjątków za pomocą throwssłowa kluczowego.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Tutaj findFile()metoda określa, że można go wyrzucić NullPointerException, IOExceptioni InvalidClassExceptionna jego throwspunkcie.

Zauważ, że nie obsłużyliśmy NullPointerException. Dzieje się tak, ponieważ jest to niezaznaczony wyjątek. Nie ma potrzeby określania tego w throwsklauzuli i obsługi.

rzuca słowo kluczowe vs. spróbuj… złapać… wreszcie

Może istnieć kilka metod, które mogą powodować wyjątki. Pisanie try… catchdla każdej metody będzie żmudne, a kod stanie się długi i mniej czytelny.

throws jest również przydatne, gdy zaznaczyłeś wyjątek (wyjątek, który musi być obsłużony), którego nie chcesz przechwytywać w swojej aktualnej metodzie.

Słowo kluczowe throw w języku Java

Słowo throwkluczowe służy do jawnego zgłaszania pojedynczego wyjątku.

Gdy zostanie zgłoszony wyjątek, przepływ wykonywania programu przenosi się z trybloku do catchbloku. Używamy throwsłowa kluczowego w metodzie.

Jego składnia to:

 throw throwableObject;

Obiekt do rzucania jest instancją klasy Throwablelub podklasy tej Throwableklasy.

Przykład 2: słowo kluczowe throw w języku Java

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Wynik

 Wyjątek w wątku „main” java.lang.ArithmeticException: Próba podzielenia przez 0 w Main.divideByZero (Main.java:3) w Main.main (Main.java:7) status wyjścia 1 

W tym przykładzie jawnie rzucamy plik ArithmeticException.

Uwaga: ArithmeticException to niezaznaczony wyjątek. Zwykle nie ma potrzeby obsługi niezaznaczonych wyjątków.

Przykład 3: Zgłaszanie zaznaczonego wyjątku

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Wynik

 Nie znaleziono pliku 

findFile()Metoda wyrzuca IOExceptionz komunikatem mijaliśmy do jego konstruktora.

Zauważ, że ponieważ jest to sprawdzony wyjątek, musimy określić go w throwsklauzuli.

Metody, które wywołują tę findFile()metodę, muszą albo obsługiwać ten wyjątek, albo throwssame określać go za pomocą słowa kluczowego.

Obsługiwaliśmy ten wyjątek w main()metodzie. Przepływ wykonywania programu przenosi się z trybloku do catchbloku, gdy zostanie zgłoszony wyjątek. Zatem reszta kodu w trybloku jest pomijana, a instrukcje w catchbloku są wykonywane.

Interesujące artykuły...