Java'daki Zincirlenmiş İstisnalar, bir istisnanın diğeriyle ilişkilendirilmesine izin verir; yani bir istisna, başka bir istisnanın nedenini açıklar.
- Örneğin, bir yöntemin bir atış yaptığı bir durumu düşünün. Aritmetikİstisna sıfıra bölme girişimi nedeniyle.
- Ancak hatanın temel nedeni, bölenin sıfır olmasına neden olan bir G/Ç hatasıydı.
- Bu gibi durumlarda zincirleme istisnalar, hatanın hem birincil hem de temel nedenlerinin yayılmasına yardımcı olur.
Örnek : Aşağıdaki örnek, Java'da zincirleme istisnaların nasıl kullanılacağını gösterir.
Java// Working of chained exceptions public class Geeks { public static void main(String[] args) { try { // Creating an exception NumberFormatException ex = new NumberFormatException('Primary Exception'); // Setting the cause of the exception ex.initCause(new NullPointerException('Root cause of the exception')); // Throwing the exception with a cause throw ex; } catch (NumberFormatException ex) { // Displaying the primary exception System.out.println('Caught Exception: ' + ex); // Displaying the root cause of the exception System.out.println('Cause of Exception: ' + ex.getCause()); } } }
Çıkış
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Not: İç içe istisnalar olarak da bilinen zincirleme istisnalar, Java'da bir nedeni bir istisnayla ilişkilendirmemize olanak tanır. Bu, bir istisnanın orijinal nedeni hakkında bilgi yaymak istediğimizde kullanışlıdır.
İnşaatçılar
- Fırlatılabilir (Atılabilir sebep) : Burada neden, mevcut istisnaya neden olan istisnadır.
- Throwable(String msg Throwable nedeni) : Burada msg istisna mesajıdır ve sebep mevcut istisnaya neden olan istisnadır.
Atılabilir Zincirleme İstisnaları Destekleme Yöntemleri
- getCause() : Bu yöntem bir istisnanın gerçek nedenini döndürür.
- initCause(Atılabilir neden) : Bu yöntem çağıran istisnanın nedenini belirler.
Örnek: Zincirlenmiş İstisnalarla Özel Mesaj Kullanma
Java'da Throwable sınıfının yapıcısını kullanarak istisnaları zincirleyebiliriz.
Java// Use a custom message with chained exception public class Geeks { public static void main(String[] args) { try { // Code that might throw an exception int[] n = new int[5]; int divisor = 0; for (int i = 0; i < n.length; i++) { int res = n[i] / divisor; System.out.println(res); } } catch (ArithmeticException e) { // Creating a new exception with // the original as the cause throw new RuntimeException ('Error: Division by zero occurred' e); } } }
Çıkış:
veri yapısında karma
Açıklama: Bu örnekte bir tamsayı dizisi var ve böleni 0 olarak ayarlıyor.
- Try bloğunun içinde dizinin her öğesini 0'a bölmeye çalışır ve bu da bir ArithmeticException oluşturur.
- Bu ArithmeticException, orijinal istisnayla, yani nedeni olarak ArithmeticException ile yeni bir RuntimeException'ın oluşturulduğu catch bloğunda yakalanır.
- RuntimeException ve ArithmeticException dahil olmak üzere yığın izlemesini görüntüleyen RuntimeException yakalanmadığından.
Zincirlenmiş İstisnaların Avantajları:
Zincirleme istisnaların avantajları aşağıda listelenmiştir:
- Bu istisna, hem birincil hem de temel nedenlere ilişkin ayrıntılar sağlayarak hata ayıklamaya yardımcı olur.
- İstisna bağlamının tamamının yayılmasını sağlayarak hata işlemeyi basitleştirir.
- Bu, karmaşık uygulamalardaki hataların izlenebilirliğini artırır.
Zincirlenmiş İstisnaların Dezavantajları:
- Düzgün kullanılmazsa yığın izlemeyi daha uzun hale getirebilir ve okunmasını zorlaştırabilir.
- Aşırı kullanım, istisnaların gereksiz yere zincirlenmesi durumunda kafa karıştırıcı hata mesajlarına neden olabilir.
- Geliştiriciler anlamlı nedenlerin bağlantılı olduğundan emin olmalıdır; aksi takdirde hata ayıklama sırasında yanıltıcı olabilir.