У овом упутству ћемо научити о наредби три цатцх у Јави уз помоћ примера.
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 firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. 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 )
Покушај-са-ресурси изјава такође назива аутоматског управљања ресурсима . Ова изјава аутоматски затвара све ресурсе на крају изјаве.
Да бисте сазнали више, посетите јава изјаву о испробавању ресурса.