Java Birden Fazla İstisnayı yakalar

Bu eğitimde, örnekler yardımıyla Java'da birden çok istisnayı ele almayı öğreneceğiz.

Java 7'den önce, kod fazlalığı olsa bile farklı istisna türleri için birden fazla istisna işleme kodu yazmamız gerekiyordu.

Bir örnek alalım.

Örnek 1: Birden çok yakalama bloğu

 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()); ) ) ) 

Çıktı

 / sıfıra göre 

Bu örnekte iki istisna ortaya çıkabilir:

  • ArithmeticException çünkü bir sayıyı 0'a bölmeye çalışıyoruz.
  • ArrayIndexOutOfBoundsException çünkü 0 ile 9 arası dizi sınırlarına sahip yeni bir tamsayı dizisi tanımladık ve dizin 10'a bir değer atamaya çalışıyoruz.

Her iki catchbloktaki istisna mesajını, yani yinelenen kodu yazdırıyoruz .

Atama operatörünün ilişkilendirilebilirliği =sağdan sola doğrudur, bu nedenle ArithmeticExceptionilk önce mesajla / sıfırla atılır.

Bir Yakalama Bloğunda Birden Fazla İstisnayı Yönetin

Java SE 7 ve sonrasında, artık tek bir catchblokta birden fazla istisna türü yakalayabiliriz .

catchBlok tarafından ele alınabilen her istisna türü, dikey bir çubuk veya boru kullanılarak ayrılır |.

Sözdizimi şöyledir:

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

Örnek 2: Çoklu yakalama bloğu

 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()); ) ) ) 

Çıktı

 / sıfıra göre 

Tek bir catchblokta birden çok istisnayı yakalamak, kod kopyalamasını azaltır ve verimliliği artırır.

Bu programı derlerken üretilen bayt catchkodu, kod fazlalığı olmadığı için birden fazla bloğa sahip programdan daha küçük olacaktır .

Not: Bir catchblok birden fazla istisnayı işliyorsa, catch parametresi örtük olarak yapılır final. Bu, parametreleri yakalamak için herhangi bir değer atayamayacağımız anlamına gelir.

Temel İstisna Yakalama

Tek bir catchblokta birden fazla istisna yakalanırken, kural özel olarak genelleştirilir.

Bu, catchblokta bir istisnalar hiyerarşisi varsa, birden fazla özel istisnayı yakalamak yerine yalnızca temel istisnayı yakalayabileceğimiz anlamına gelir .

Bir örnek alalım.

Örnek 3: Yalnızca temel istisna sınıfını yakalama

 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()); ) ) ) 

Çıktı

 / sıfıra göre 

Tüm istisna sınıflarının sınıfın alt sınıfları olduğunu biliyoruz Exception. Böylece, birden fazla özel istisnayı yakalamak yerine, Exceptionsınıfı yakalayabiliriz .

Temel istisna sınıfı catchblokta zaten belirtilmişse , aynı catchblokta alt istisna sınıflarını kullanmayın . Aksi takdirde bir derleme hatası alacağız.

Bir örnek alalım.

Örnek 4: Temel ve alt istisna sınıflarını yakalama

 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()); ) ) ) 

Çıktı

 Main.java:6: hata: Çoklu yakalama ifadesindeki alternatifler alt sınıflandırma ile ilişkilendirilemez 

Bu örnekte ArithmeticExceptionve ArrayIndexOutOfBoundsExceptionher ikisi de sınıfın alt Exceptionsınıflarıdır. Yani bir derleme hatası alıyoruz.

Ilginç makaleler...