Java noķer vairākus izņēmumus

Šajā apmācībā mēs iemācīsimies rīkoties ar vairākiem Java izņēmumiem, izmantojot piemērus.

Pirms Java 7 mums bija jāraksta vairāki izņēmumu apstrādes kodi dažāda veida izņēmumiem, pat ja bija koda atlaišana.

Ņemsim piemēru.

1. piemērs: vairāki noķeršanas bloki

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException e) ( System.out.println(e.getMessage()); ) catch (ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Rezultāts

 / par nulli 

Šajā piemērā var būt divi izņēmumi:

  • ArithmeticException jo mēs cenšamies sadalīt skaitli ar 0.
  • ArrayIndexOutOfBoundsException jo mēs esam deklarējuši jaunu veselu skaitļu masīvu ar masīvu robežām no 0 līdz 9 un mēģinām piešķirt vērtību indeksam 10.

Mēs izdrukājam izņēmuma ziņojumu abos catchblokos, ti, koda dublikātā.

Piešķiršanas operatora asociativitāte =ir no labās uz kreiso pusi, tāpēc ArithmeticExceptionpirmais tiek izmests ar ziņojumu / ar nulli.

Rīkojieties ar vairākiem izņēmumiem ķeršanas blokā

Java SE 7 un jaunākās versijās mēs tagad vienā catchblokā varam noķert vairāk nekā viena veida izņēmumus .

Katrs izņēmuma veids, ko var apstrādāt ar catchbloku, tiek atdalīts, izmantojot vertikālu joslu vai cauruli |.

Tās sintakse ir:

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

2. piemērs: vairāku nozveju bloķēšana

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Rezultāts

 / par nulli 

Vairāku izņēmumu noķeršana vienā catchblokā samazina koda dublēšanos un palielina efektivitāti.

Baitkods, kas ģenerēts, sastādot šo programmu, būs mazāks nekā programmai ar vairākiem catchblokiem, jo ​​nav koda atlaišanas.

Piezīme: Ja catchbloks apstrādā vairākus izņēmumus, nozvejas parametrs ir netieši final. Tas nozīmē, ka mēs nevaram piešķirt nevienu vērtību parametru uztveršanai.

Nozvejas bāzes izņēmums

Uztverot vairākus izņēmumus vienā catchblokā, noteikums tiek vispārināts uz specializētu.

Tas nozīmē, ka, ja catchblokā ir izņēmumu hierarhija , mēs varam noķert tikai bāzes izņēmumu, nevis noķert vairākus specializētus izņēmumus.

Ņemsim piemēru.

3. piemērs: tikai pamata izņēmuma klase

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception e) ( System.out.println(e.getMessage()); ) ) ) 

Rezultāts

 / par nulli 

Mēs zinām, ka visas izņēmuma klases ir klases apakšklases Exception. Tātad, tā vietā, lai noķertu vairākus specializētus izņēmumus, mēs varam vienkārši noķert Exceptionklasi.

Ja catchblokā jau ir norādīta pamata izņēmumu klase , neizmantojiet bērnu izņēmumu klases tajā pašā catchblokā. Pretējā gadījumā mēs iegūsim kompilācijas kļūdu.

Ņemsim piemēru.

4. piemērs: bāzes un bērnu izņēmuma nodarbību ķeršana

 class Main ( public static void main(String() args) ( try ( int array() = new int(10); array(10) = 30 / 0; ) catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) ( System.out.println(e.getMessage()); ) ) ) 

Rezultāts

 Main.java:6: kļūda: Alternatīvas paziņojumā par vairāku nozveju nevar saistīt pēc apakšklases 

Šajā piemērā ArithmeticExceptionun ArrayIndexOutOfBoundsExceptionabas ir Exceptionklases apakšklases . Tātad, mēs saņemam kompilācijas kļūdu.

Interesanti raksti...