Јава три ... цатцх (са примерима)

У овом упутству ћемо научити о наредби три цатцх у Јави уз помоћ примера.

try… catchБлок у Јави се користи за руковање изузетака и спречава ненормалан прекид програма.

Ево синтаксе try… catchблока у Јави.

 try( // code ) catch(exception) ( // code )

tryБлок садржи код који може генерисати изузетак.

catchБлок садржи код који се извршава када се дође до изузетак унутар tryблока.

Пример: Јава три… цатцх блоцк

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )

Оутпут

 АритхметицЕкцептион => / нула

У горњем примеру, обратите пажњу на ред,

 int divideByZero = 5 / 0;

Овде покушавамо да број поделимо са нулом . У овом случају се јавља изузетак. Стога смо овај код затворили у tryблок.

Када програм наиђе на овај код, ArithmeticExceptionјавља се. И, изузетак захваћа catchблок и извршава код унутар catchблока.

catchБлок се извршава само ако постоји изузетак унутар tryблока.

Напомена : У Јави можемо да користимо tryблок без catchблока. Међутим, не можемо користити catchблок без tryблока.

Јава покушај … коначно блокирај

Такође можемо користити tryблок заједно са коначно блоком.

У овом случају, коначно блок се увек извршава без обзира постоји ли изузетак унутар блока три или не.

Пример: Јава покушај … коначно блокирај

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Оутпут

 Напокон се блок увек извршава Изузетак у нити "маин" јава.ланг.АритхметицЕкцептион: / по нули код Маин.маин (Маин.јава:4)

У горњем примеру, користили смо tryблок заједно са finallyблоком. Видимо да код унутар tryблока изазива изузетак.

Међутим, код унутар finallyблока се извршава без обзира на изузетак.

Јава покушај … ухвати … коначно блокирај

У Јави можемо да користимо и блоцк коначно након try… catchблока. На пример,

 import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Оутпут

 Уношење изјаве за покушај Изузетак => Индекс 5 ван граница за дужину 5 Затварање ПринтВритер

У горњем примеру смо креирали низ са именом листа и датотеку која се зове оутпут.ткт. Овде покушавамо да читамо податке из низа и складиштимо их у датотеку.

Обратите пажњу на код,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Овде је величина низа 5и последњи елемент низа је list(4). Међутим, покушавамо да приступимо елементима на a(5) и a(6).

Стога код генерише изузетак који је захваћен блоком цатцх.

Будући да се finallyблок увек извршава, укључили смо код да затворимо PrintWriterунутрашњост коначно блока.

Добра је пракса користити коначно блок за укључивање важног кода за чишћење, попут затварања датотеке или везе.

Напомена : Постоје неки случајеви када се finallyблок не изврши:

  • Употреба System.exit()методе
  • Изузетак се јавља у finallyблоку
  • Смрт нити

Више блокова улова

За сваки tryблок може бити нула или више catchблокова. Више catchблокова омогућава нам да сваки изузетак радимо другачије.

Тип аргумента сваког catchблока указује на врсту изузетка који се њиме може руковати. На пример,

 class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )

Оутпут

 ИндекОутОфБоундсЕкцептион => Индекс 10 ван граница дужине 10

У овом примеру смо креирали целобројни низ именован arrвеличине 10 .

Будући да индекс низа почиње од 0 , последњи елемент низа је ат arr(9). Обратите пажњу на изјаву,

 arr(10) = 11;

Овде покушавамо да индексу 10 доделимо вредност . Отуда IndexOutOfBoundExceptionсе јавља.

Када се у tryблоку догоди изузетак ,

  • The exception is thrown to the first catch block. The first catch block does not handle an IndexOutOfBoundsException, so it is passed to the next catch block.
  • The second catch block in the above example is the appropriate exception handler because it handles an IndexOutOfBoundsException. Hence, it is executed.

Catching Multiple Exceptions

From Java SE 7 and later, we can now catch more than one type of exception with one catch block.

This reduces code duplication and increases code simplicity and efficiency.

Each exception type that can be handled by the catch block is separated using a vertical bar |.

Its syntax is:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )

To learn more, visit Java catching multiple exceptions.

Java try-with-resources statement

Покушај-са-ресурсима изјава је изјава покушај да има један или више декларација ресурса.

Његова синтакса је:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

Ресурс је објекат који се затвара на крају програма. Мора се декларисати и иницијализовати у исказу три.

Узмимо пример.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

Покушај-са-ресурси изјава такође назива аутоматског управљања ресурсима . Ова изјава аутоматски затвара све ресурсе на крају изјаве.

Да бисте сазнали више, посетите јава изјаву о испробавању ресурса.

Занимљиви Чланци...