бацање и бацање у Јави

У Јави руковање изузетцима је једно од ефикасних средстава за руковање грешкама током извршавања тако да се може очувати регуларни ток апликације. Он обрађује грешке у току извођења као што је НуллПоинтерЕкцептион АрраиИндекОутОфБоундсЕкцептион итд. Да би се ове грешке ефикасно обрадиле, Јава обезбеђује две кључне речи тхров и тхровс.

Јава бацање

Кључна реч тхров у Јави се користи за експлицитно избацивање изузетка из методе или било ког блока кода. Можемо да избацимо или проверени или непроверени изузетак. Кључна реч тхров се углавном користи за избацивање прилагођених изузетака. 

Синтакса:

бацити Инстанце

Где је инстанца објекат типа Тхровабле (или његове подкласе као што је Екцептион).

Пример:

тхров нев АритхметицЕкцептион('/ би зеро');

Али овај изузетак, тј. инстанца, мора бити типа Тхровабле или подкласу Тхровабле

Ток извршавања програма се зауставља одмах након што се изврши наредба тхров и најближи приложени покушајте блок се проверава да би се видело да ли има а ухватити изјава која одговара типу изузетка. Ако открије да је подударање контролисано, преноси се на ту изјаву, иначе следеће прилаже покушајте блок је проверен и тако даље. Ако нема подударања ухватити се пронађе онда ће подразумевани руковалац изузетком зауставити програм. 

Пример: Овај пример показује где се изузетак баци ухваћен и поново избачен унутар методе.

Java
   class   Geeks     {      static     void     fun  ()      {      try     {      throw     new     NullPointerException  (  'demo'  );      }      catch     (  NullPointerException     e  )     {      System  .  out  .  println  (  'Caught inside fun().'  );      throw     e  ;     // rethrowing the exception      }      }      public     static     void     main  (  String     args  []  )      {      try     {      fun  ();      }      catch     (  NullPointerException     e  )     {      System  .  out  .  println  (  'Caught in main.'  );      }      }   }   

Излаз
Caught inside fun(). Caught in main.  

Објашњење: Горњи пример показује употребу кључне речи тхров за експлицитно избацивање НуллПоинтерЕкцептион. Изузетак је ухваћен унутар забава() методу и поново баци тамо где је затим ухваћен у маин() методи.

Пример: Овај пример показује аритметички изузетак.

Java
   // Throwing an arithmetic exception   class   Geeks     {      public     static     void     main  (  String  []     args  ){      int     numerator     =     1  ;      int     denominator     =     0  ;      if     (  denominator     ==     0  )     {      // Manually throw an ArithmeticException      throw     new     ArithmeticException  (  'Cannot divide by zero'  );      }     else     {      System  .  out  .  println  (  numerator     /     denominator  );      }      }   }   

Излаз:

 Hangup (SIGHUP)   
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)

Објашњење: Горњи пример демонстрира изузетак који користи избацивање где се аритметички изузетак експлицитно баца услед дељења са нулом.

Јава баца

баца је кључна реч у Јави која се користи у потпису методе да укаже да овај метод може да изазове један од наведених изузетака типа. Позивалац ових метода мора да обради изузетак користећи блок три-цатцх. 

Синтакса:

тип метход_наме(параметерс) избацује листу изузетака

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

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

  1. Коришћењем три цатцх
  2. Коришћењем баца кључна реч

Можемо да користимо кључну реч тхровс да делегирамо одговорност за руковање изузетком позиваоцу (то може бити метод или ЈВМ), а онда је метода позиваоца одговорна за руковање тим изузетком.  

Пример 1: необрађени изузетак

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Thread  .  sleep  (  10000  );      System  .  out  .  println  (  'Hello Geeks'  );      }   }   

Излаз:

 error: unreported exception InterruptedException; must be caught or declared to be thrown  

Објашњење: У горњем програму добијамо грешку у времену компајлирања јер постоји шанса за изузетак ако главна нит спава, друге нити добију прилику да изврше маин() метод који ће изазвати ИнтерруптедЕкцептион. 

Пример 2: Коришћење throws за руковање изузетком

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      throws     InterruptedException      {      Thread  .  sleep  (  10000  );      System  .  out  .  println  (  'Hello Geeks'  );      }   }   

Излаз:

 Hello Geeks  

Објашњење: У горњем програму, користећи кључну реч тхровс обрадили смо ИнтерруптедЕкцептион и добићемо излаз као Хелло Геекс.

Пример 3: Додавање изузетка са throws

Java
   class   Geeks     {      static     void     fun  ()     throws     IllegalAccessException      {      System  .  out  .  println  (  'Inside fun(). '  );      throw     new     IllegalAccessException  (  'demo'  );      }      public     static     void     main  (  String     args  []  )      {      try     {      fun  ();      }      catch     (  IllegalAccessException     e  )     {      System  .  out  .  println  (  'Caught in main.'  );      }      }   }   

Излаз
Inside fun(). Caught in main.  

Објашњење: Горњи пример баца ИллегалАццессЕкцептион из методе и рукује њиме у главном методу помоћу блока три-цатцх.

Разлика између бацања и бацања

Главне разлике између бацања и бацања у Јави су следеће:

бацити

баца

Користи се за експлицитно избацивање изузетка.

Користи се за декларисање да метода може да избаци један или више изузетака.

Користи се унутар методе или блока кода.

Користи се у потпису методе.

Може да избаци и проверене и непроверене изузетке.

Користи се само за проверене изузетке. Непроверени изузеци нису потребни баца

Метод или блок избацује изузетак.

Позивалац методе је одговоран за руковање изузетком.

Одмах зауставља тренутни ток извршења.

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

тхров нев АритхметицЕкцептион('Еррор');

публиц воид миМетход() баца ИОЕкцептион {}