Ява бросает и бросает ключевое слово

В этом руководстве мы научимся использовать ключевое слово throw и throws для обработки исключений с помощью примеров.

В Java исключения можно разделить на два типа:

  • Unchecked Исключение: Они не проверяются во время компиляции , но при обкатке time.for например: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, исключений по Errorклассу, и т.д.
  • Проверенные исключения: они проверяются во время компиляции. Так , например, IOException, InterruptedExceptionи т.д.

Обратитесь к Исключениям Java, чтобы подробно узнать о отмеченных и непроверенных исключениях.

Обычно нам не нужно обрабатывать непроверенные исключения. Это потому, что непроверенные исключения возникают из-за ошибок программирования. И рекомендуется исправлять их, а не обрабатывать их.

В этом руководстве мы сосредоточимся на том, как обрабатывать проверенные исключения с помощью throwи throws.

Java бросает ключевое слово

Мы используем throwsключевое слово в объявлении метода, чтобы объявить тип исключений, которые могут возникнуть в нем.

Его синтаксис:

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

Как видно из синтаксиса выше, мы можем использовать throwsдля объявления нескольких исключений.

Пример 1: Java выдает ключевое слово

 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); ) ) ) 

Вывод

 java.io.FileNotFoundException: test.txt (нет такого файла или каталога) 

Когда мы запускаем эту программу, если файл test.txtне существует, FileInputStreamвыдает a, FileNotFoundExceptionкоторый расширяет IOExceptionкласс.

Если метод не обрабатывает исключения, тип исключений, которые могут возникнуть внутри него, должен быть указан в throwsпредложении, чтобы методы, расположенные дальше в стеке вызовов, могли их обрабатывать или определять их с помощью самого throwsключевого слова.

findFile()Метод определяет , что IOExceptionможет быть выброшен. main()Метод вызывает этот метод и обрабатывает исключение , если она брошена.

Выбрасывание нескольких исключений

Вот как мы можем создать несколько исключений, используя throwsключевое слово.

 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()); ) ) ) 

Здесь findFile()метод определяет , что он может бросить NullPointerException, IOExceptionи InvalidClassExceptionв своей throwsстатье.

Обратите внимание, что мы не обрабатывали NullPointerException. Это потому, что это непроверенное исключение. Нет необходимости указывать это в throwsпредложении и обрабатывать его.

выбрасывает ключевое слово Vs. попробуй … поймай … наконец

Может быть несколько методов, которые могут вызывать исключения. Написание try… catchдля каждого метода будет утомительным, а код станет длинным и менее читаемым.

throws также полезно, когда вы проверили исключение (исключение, которое необходимо обработать), которое вы не хотите перехватывать в вашем текущем методе.

Ключевое слово Java throw

throwИспользуется ключевое слово явно бросить один исключение.

При возникновении исключения поток выполнения программы переходит от tryблока к catchблоку. Мы используем throwключевое слово внутри метода.

Его синтаксис:

 throw throwableObject;

Выбрасываемый объект - это экземпляр класса Throwableили подкласса Throwableкласса.

Пример 2: ключевое слово Java throw

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

Вывод

 Исключение в потоке «main» java.lang.ArithmeticException: попытка разделить на 0 в Main.divideByZero (Main.java:3) в Main.main (Main.java:7) статус выхода 1 

В этом примере мы явно бросаем ArithmeticException.

Примечание: ArithmeticException это непроверенное исключение. Обычно нет необходимости обрабатывать непроверенные исключения.

Пример 3: выбрасывание проверенного исключения

 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()); ) ) ) 

Вывод

 Файл не найден 

findFile()Метод бросает IOExceptionс сообщением мы передали в конструктор.

Обратите внимание: поскольку это проверенное исключение, мы должны указать его в throwsпредложении.

Методы, вызывающие этот findFile()метод, должны либо обработать это исключение, либо throwsсами указать его с помощью ключевого слова.

Мы обработали это исключение в main()методе. При возникновении исключения поток выполнения программы переходит от tryблока к catchблоку. Таким образом, остальная часть кода в tryблоке пропускается, а операторы в catchблоке выполняются.

Интересные статьи...