Java хвърля и хвърля Ключова дума

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

В Java изключенията могат да бъдат категоризирани в два типа:

  • Без отметка Изключения: Те не са проверени по време на компилация, но в навечерието time.For пример: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, изключения при Errorклас и т.н.
  • Проверени изключения: Те се проверяват по време на компилация. Например IOException, InterruptedExceptionи т.н.

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

Обикновено не е необходимо да обработваме непроверени изключения. Това е така, защото възникват непроверени изключения поради грешки в програмирането. И е добра практика да ги коригирате, вместо да ги боравите.

Този урок сега ще се съсредоточи върху това как да се справя с проверените изключения, използвайки 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 Java

В throwключовата дума се използва, за да се хвърлят изрично нито едно изключение.

Когато се хвърли изключение, потокът от изпълнение на програмата се прехвърля от tryблока в catchблока. Използваме throwключовата дума в даден метод.

Синтаксисът му е:

 throw throwableObject;

Хвърлимият обект е екземпляр на клас Throwableили подклас на Throwableкласа.

Пример 2: Ключова дума Java

 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се изпълняват оператори в блока.

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