try catch finally
У овом упутству ћемо размотрити разне кључне речи које се користе у Јави за руковање изузецима, као што су Три, Цатцх, Финал, Тхров и Тхровс са примерима:
У нашим претходним водичима видели смо основе руковања изузецима на Јави, заједно са разним изузецима које подржава класа Јава Екцептион. Такође смо детаљно разговарали о НуллПоинтерЕкцептион.
Изузетке можемо укључити у наш програм користећи одређене кључне речи које се пружају на Јави. Ове кључне речи дефинишу различите блокове кода који олакшавају дефинисање и руковање изузецима.
=> Посетите овде за ексклузивну серију лекција за Јава тренинг.
Шта ћете научити:
Покушајте, ухватите, коначно у Јави
Кључне речи доле се користе у Јави за руковање изузецима.
- Покушати
- Улов
- Коначно
- Баци
- Баца
Следећа табела укратко описује ове кључне речи.
Кључна реч | Опис |
---|---|
Покушати | Блок кода који може довести до изузетака наводимо у посебном блоку са кључном речи „Три“. |
Улов | Када се покрене изузетак, програм га треба ухватити. То се ради помоћу кључне речи „цатцх“. Дакле, цатцх блок следи блок три који покреће изузетак. Кључну реч цатцх увек треба користити са покушајем. |
Коначно | Понекад у програму имамо важан код који треба извршити без обзира на то да ли је изузетак избачен или не. Овај код је смештен у посебан блок који започиње са кључном речи „Напокон“. Блок Коначно следи блок Покушај-ухвати. |
Баци | Кључна реч „бацити“ користи се за изричито бацање изузетка. |
Баца | Кључна реч „Баца“ не доноси изузетак, али се користи за пријављивање изузетака. Ова кључна реч служи за указивање на то да се у програму или методи може догодити изузетак. |
У овом упутству детаљно ћемо размотрити све горе наведене кључне речи заједно са примерима програмирања.
Покушајте да блокирате у Јави
Кад год пишемо програм, може постојати код за који сумњамо да би могао изузети. На пример, могли бисмо сумњати да би у коду могла постојати операција „дељење с нулом” која би довела до изузетка.
Овај код који може створити изузетак затворен је у блок са кључном речи „покушај“. Дакле, блок три садржи код или скуп изјава који могу створити изузетак.
Општа синтакса блока три је следећа:
try{ //set of statements that can raise exception }
Стога, ако програмер мисли да ће одређене изјаве створити изузетке, затворите их у блок три. Имајте на уму да се остатак кода не извршава када се изузетак догоди код одређене наредбе у блоку три.
Када се у блоку три појави изузетак у одређеном изразу, тада контрола излази и програм се нагло прекида. Да бисмо спречили овај нагли прекид програма, требало би да „обрадимо“ овај изузетак. Ово руковање се врши помоћу кључне речи „цатцх“. Дакле, блок три увек прати блок цатцх.
Цатцх Блоцк у Јави
За обраду изузетака користимо цатцх блок. Ово је блок са кључном речи „цатцх“. Блок цатцх следи блок три.
Кад год се у блоку три појави изузетак, тада се извршава код у блоку цатцх који одговара изузетку.
Општа синтакса цатцх блока је:
catch (Exception e){ //code to handle exception e }
Генерално, декларисани изузетак мора бити родитељска класа свих изузетака, тј. Екцептион. Али ако постоји више од једног изузетка, такође можемо написати одређене типове изузетака или генерисане изузетке.
Даље ћемо разговарати о блоку три-цатцх. Имајте на уму да за сваки блок три можемо имати више блокова цатцх.
Три-Цатцх Јава
Општа синтакса блока три-цатцх приказана је испод:
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
Блок три може имати више линија кода који може створити вишеструке изузетке. Сваки од ових изузетака обрађује се независним блоком улова.
Генерички обрађивач изузетака, објекат е класе Екцептион може се носити са свим изузецима, али ако желимо да се бавимо одређеним изузецима, тада је препоручљиво навести генерички обрађивач изузетака као задњи блок улова.
Јава Три Цатцх Пример
Сада ћемо демонстрирати блок три-цатцх на Јави. Овде у блоку три дефинишемо операцију дељења. Делитељ је нула. Стога изјава која дели два броја доводи до аритметичког изузетка. Имамо блок цатцх који дефинише обрађивач за Аритхметиц изузетак.
Доље је дат пример Јава програма.
class Main { public static void main(String args()) { int val1, val2; try { //this block will contain statements that may raise exceptions System.out.println('Try Block:: Start'); val1 = 0; val2 = 25 / val1; System.out.println(val2); System.out.println('Try Block:: End'); } catch (ArithmeticException e) { //handler for ArithmeticException System.out.println('ArithmeticException :: Divide by Zero!!'); } System.out.println('Outside try-catch:: Rest of the code.'); } }
Оутпут
како исписати низ у обрнутом редоследу
Хватање вишеструких изузетака
Као што је већ поменуто, блок три може садржати код који покреће више од једног изузетка. У овом случају требат ће нам више од једног блока цатцх да бисмо обрадили сваки изузетак. Након једног блока покушаја може се пратити више блокова улова. Сваки блок цатцх обрађује независне изузетке.
У случају више блокова улова, морамо запамтити следеће тачке:
- У Јава програму, у било ком тренутку времена, може се десити само један изузетак. Такође, у било ком тренутку се извршава само један блок цатцх.
- Вишеструки блокови улова требају бити поредани на такав начин да блок улова за најспецифичнији изузетак треба да буде на првом месту, а затим општи.
На пример, ако имамо АритхметицЕкцептион и општи изузетак, тада ће на прво мјесто доћи обрада блока цатцх АритхметицЕкцептион, а затим следи изузетак који обрађује блок цатцх.
Пример у наставку приказује више блокова улова.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); myArray (5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Оутпут
У горњем програму се подиже АритхметицЕкцептион који је ухваћен у првом блоку цатцх. Да овај блок улова није наведен, тада би се изузетак проширио на генерализирани блок улова.
Хајде да мало модификујемо горњи програм тако да блок три покрене два изузетка. Сада да видимо резултат.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); System.out.println('Array element 10 : ' + myArray(10)); myArray(5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Оутпут
Ако видимо овај излаз, приказује се бачен АрраиИндекОутОфБоундсЕкцептион. То је зато што се прво извршава наредба која покреће АрраиИндекОутОфБоундсЕкцептион. Изнимка се баца и контрола иде у одговарајући блок цатцх.
Угњежђена проба
Блок покушај у другом блоку покушаја назива се угнежђени блок покушаја. Такве структуре су нам потребне у одређеним ситуацијама када део кода садржан у три коду може бити такав да неки редови покрећу одређене изузетке, а други део кода потпуно другачији изузетак.
У случају угњежђених покушајних блокова, прво се извршава најунутарњи покушајни блок и обрађује се изузетак. Ако најунутарњи покушај блока нема одговарајући блок хватања, он се шири за један ниво до надређеног блока покушаја. На овај начин се изузетак шири према горе док се не пронађе одговарајући обрађивач изузетака.
Ако не постоји обрађивач изузетака који се подудара са изузетком, тада се програм нагло прекида системски генерисаном поруком.
Општа синтакса угнежђеног блока покушаја дата је у наставку:
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
Имплементирајмо програм за демонстрацију угнежђеног блока три-цатцх.
class Main{ public static void main(String args()){ //Main try block try{ //try block1 try{ System.out.println('Try Block1'); int num =15/0; System.out.println(num); } catch(ArithmeticException e1){ System.out.println('Block1 Exception: e1'); } //try block2 try{ System.out.println('Try Block2'); int num =100/0; System.out.println(num); } catch(ArrayIndexOutOfBoundsException e2){ System.out.println('Block2 Exception: e2'); } System.out.println('General statement after Block1 and Block2'); } catch(ArithmeticException e3){ System.out.println('Main Block Arithmetic Exception'); } catch(ArrayIndexOutOfBoundsException e4){ System.out.println('Main Block ArrayIndexOutOfBoundsException'); } catch(Exception e5){ System.out.println('Main Block General Exception'); } System.out.println('Code after Nested Try Block'); } }
Оутпут
У горњем програму имамо два покушајна блока затворена у главном покушајном блоку. Оба унутрашња три блока имају код који подиже АритхметицЕкцептион. Али обезбедили смо одговарајући блок цатцх само за први блок, а не и за други блок покушаја.
Стога други блок шири свој изузетак на главни покушај блока, а затим га обрађује. Ово је видљиво из резултата.
Коначно блокирање у Јави
До сада смо видели блок три-цатцх и угњежђени три. Знамо да је код за који се очекује да ће изузетак ставити у блок покушаја. Када се догоди изузетак, тада се остатак кода у блоку три не извршава.
Или се програм нагло прекида ако се изузећем не рукује или се контрола проследи обрађивачу изузетака.
У таквој ситуацији, јавља се потреба за укључивањем кода који се извршава без обзира да ли се изузетак јавља или не. То значи да ћемо извршити део кода чак и када се догоди изузетак, а такође и када се изузетак не догоди.
Али како блок три излази након подизања изузетка, овај код не можемо ставити у блок три. Слично томе, цатцх блоцк има обрађивач изузетака, па не можемо и ово ставити у цатцх блоцк.
Стога нам је потребан засебан блок који садржи код који се извршава без обзира да ли се изузетак јавља или не. Јава пружа блок „коначно“ који садржи овај део кода.
Отуда коначно блок у Јави може садржати критичне изјаве које треба извршити у програму. Извршење ових изјава треба извршити чак и када се догоди изузетак или не.
Стога ћемо у блок коначно ставити код попут затварања веза, објеката у току итд. Или било којег кода за чишћење, тако да се могу извршити чак и ако се догоди изузетак.
Коначни блок у Јави обично се ставља након покушаја или хватања блока. Имајте на уму да блоцк коначно не може постојати без блока три. Када је коначно блок укључен у функцију три-цатцх, он постаје „ покушај-ухвати-коначно ' блокирати.
Можемо прескочити коначно блокирање у коду за руковање изузетцима. То значи да је коначно блокирање опционо.
Ако блок три не изазове никакав изузетак, коначно блок ће се извршити након блока три. Ако постоји изузетак у покушају блока, тада ће контрола прво прећи на блок цатцх, а затим коначно блоцк.
Изузетак који се јавља у коначно блоку понаша се на исти начин као и било који други изузетак. Чак и ако блок три садржи наредбу ретурн или изјаве о гранању попут бреак анд цонтинуе, тада ће напокон блок и даље бити изведен.
Имајући ове тачке на уму, наставимо са општом синтаксом и примерима коначно блоцк.
Општа синтакса закључног блока је следећа:
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
Иако се коначно блок увек извршава, постоје одређене ситуације или случајеви у којима се не извршава.
Ово су следећи случајеви:
- Кад је нит мртва.
- Када се користи метода Систем.екит ().
- Када се изузме изузетак у коначно блоку.
Применимо неколико програма да демонстрирамо коначно блокирање.
class Main { public static void main (String args()) { //try block try { System.out.println ('::Try Block::'); int data = 125 / 5; System.out.println ('Result:' + data); } //catch block catch (NullPointerException e) { System.out.println ('::Catch Block::'); System.out.println (e); } //finally block finally { System.out.println (':: Finally Block::'); System.out.println ('No Exception::finally block executed'); } System.out.println ('rest of the code...'); } }
Оутпут
Горњи програм приказује блок три-цатцх-коначно. У блоку три извршава се важећа операција и стога није изузетак. Стога се контрола не преноси да би се ухватило из покушаја већ да би се коначно блокирала.
Следећи програм је још један пример блока три-цатцх-коначно, али у овом случају изузетак се убацује у блок три док изводимо операцију поделе са нулом. Тако се коначно извршава блок након покушаја блока цатцх.
class Main { public static void main(String args()) { //try block try{ System.out.println('::Try block::'); int num=67/0; System.out.println(num); } //catch block catch(ArithmeticException e){ System.out.println('::Catch block::'); System.out.println('ArithmeticException::Number divided by zero'); } //finally block finally{ System.out.println('::Finally block::'); } System.out.println('Rest of the code continues...'); } }
Оутпут
Баците изузетак у Јави
Јава нуди кључну реч „бацање“ помоћу које изричито можемо избацити изузетке у коду. На пример, ако проверавамо аритметичке операције и желимо да направимо неке изузетке након провере операнда, то можемо учинити помоћу кључне речи ‘тхров’.
Коришћењем кључне речи тхров можемо да бацимо потврђене или непроверене изузетке. Кључна реч тхров се такође користи за бацање прилагођених изузетака.
Општа синтакса кључне речи тхров је:
throw exception; or throw new exception_class('error message');
Доље је дат пример програма за демонстрацију кључне речи тхров.
public class Main{ static void validate_Age(int age){ //if specified age is <18, throw ArithmeticException if(age<18) throw new ArithmeticException('Not eligible to vote and drive!!'); else //print the message System.out.println('Eligible to vote and drive!!'); } public static void main(String args()){ //call validate_Age method validate_Age(10); System.out.println('rest of the code...'); } }
Оутпут
У горе наведеном програму користимо методу за потврђивање старости. Ако је старост<18, then an exception is thrown to indicate the age is not valid.
Клаузула о бацању
Видели смо покушај блока за пријављивање изузетака. Садржи код који може створити изузетке. Постоји још један начин да се пријави изузетак, а то је употреба кључне речи „баца“.
Изјава о изузетку помоћу кључне речи „тхровс“ говори програмеру да можда постоји изузетак наведен након кључне речи „тхровс“ и програмер треба да обезбеди одговарајући код руковаоца за овај изузетак како би одржао нормалан ток програма.
Међутим, поставља се питање зашто нам је потребна кључна реч „бацања“ када имамо поузданији блок три-цатцх за декларисање и руковање изузецима?
Један од разлога је што се повећава број изузетака који би се могли догодити, тако се повећава и број блокова улова који обрађује изузетке јер један блок улова може да обради само један изузетак.
Слично томе, ако у програму постоји много метода и свака метода има бројне изузетке, тада ће код постати непотребно дугачак и њиме се не може управљати.
Стога се чини да је извођење одрживог решења декларисање кључне речи тхровс у потпису методе, а затим руковање позивом методе користећи три-цатцх.
Још једна предност декларисања изузетака помоћу кључне речи тхровс је та што смо приморани да се носимо са изузецима. Ако не пружимо обрађивач за декларисани изузетак, програм ће покренути грешку.
Општа синтакса кључне речи тхровс је следећа:
return_type method_name() throws exception_class_name{ //method code }
Применимо сада Јава програм за демонстрацију кључне речи „баца“.
У овом програму имамо класу Екампле_тхров у којој имамо методу тестМетход. У потпису ове тестМетход декларишемо два изузетка ИОЕкцептион и Аритхметиц Екцептион помоћу кључне речи тхровс. Тада се у главној функцији, избаченим изузецима обрађује блок цатцх.
import java.io.*; class Example_Throw { //declare exception using throws in the method signature void testMethod(int num) throws IOException, ArithmeticException{ if(num==1) throw new IOException('IOException Occurred'); else throw new ArithmeticException('ArithmeticException'); } }class Main{ public static void main(String args()){ try{ //this try block calls the above method so handle the exception Example_Throw obj=new Example_Throw(); obj.testMethod(1); }catch(Exception ex){ System.out.println(ex); } } }
Оутпут
Често постављана питања
П # 1) Када користити бацање ВС три-цатцх у Јави?
Одговор: Кључна реч „тхровс“ користи се за декларисање изузетка са потписом методе. Кључна реч тхров користи се за изричито бацање изузетка. Блок три-цатцх се користи за руковање изузецима које су бацили други.
П # 2) Можемо ли користити бацања, покушати и ухватити на један начин?
Одговор: Не. Не можете избацити изузетак и такође га ухватити на исти начин. Изузетак који је декларисан коришћењем бацања треба обрађивати у позивајућој методи која позива методу која је избацила изузетак.
бесплатна апликација за преузимање музике за мп3 за андроид
П # 3) Шта се дешава када цатцх блок баци изузетак?
Одговор: Када се изузетак убаци у блок цатцх, програм ће зауставити извршење. У случају да програм мора да се настави, онда мора постојати засебни покушај-цатцх блок за обраду изузетка подигнутог у цатцх блоку.
П # 4) Шта је три-цатцх-коначно у Јави?
Одговор: Блок три-цатцх-коначно садржи три блока, тј. Три блоцк, цатцх блоцк и коначно блоцк.
Блок проба садржи код који може довести до изузетка. Блок хватања садржи руковатељ изузецима за изузетке у блоку проба. Коначни блок садржи критични код који ће се извршити без обзира да ли се изузетак догодио или не.
П # 5) Може ли се коначно блокирати покушај улова?
Одговор: Да, ако имамо код за чишћење који би могао убацити изузетак у коначно блок, онда можемо имати блок три-цатцх. Међутим, изгледа ружно.
Закључак
У овом упутству смо разговарали о разним кључним речима које се користе у руковању изузецима на Јави. Разговарали смо о кључним речима попут три, цатцх, коначно, бацање и бацање.
Код који ће евентуално избацити изузетак приложен је у блоку три, а цатцх нуди руковалац изузетком. Коначни блок извршава код који је у њему затворен, без обзира на то да ли је изузетак избачен или не. Коначни блок генерално следи блок три или три-цатцх.
Користимо кључну реч тхровс да бисмо декларисали изузетке са потписом методе, а тхров се експлицитно користи за бацање изузетака. За бацање прилагођених изузетака обично користимо кључну реч тхров.
=> Овде погледајте савршен водич за обуку за Јава.
Препоручено читање
- Јава изузеци и руковање изузецима са примерима
- Како поступати са АрраиИндекОутОфБоундсЕкцептион у Јави?
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Руковање изузецима ЈДБЦ - Како се рукује СКЛ изузецима
- Водич за руковање изузецима за Ц # са примерима кода
- Комплетан водич за руковање изузецима ПЛ СКЛ-а са примерима
- Руковање изузецима у Ц ++
- Питхон Три Екцепт - Питхон рукује изузетком са примерима