logo

Java'da Zincirlenmiş İstisnalar

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

  1. getCause() : Bu yöntem bir istisnanın gerçek nedenini döndürür.
  2. 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
Çıkış' title=

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.