Java'da, istisna bir programın yürütülmesi sırasında meydana gelen ve programın talimatlarının normal akışını bozan bir olaydır. İstemediğimiz ve programımızın normal kod yürütmesini kısıtlayan hatalara veya hatalara denir. istisnalar . Bu bölümde şu konulara odaklanacağız: Java'daki istisna türleri ve ikisi arasındaki farklar.
İstisnalar iki şekilde sınıflandırılabilir:
e-bankacılığın sınırlamaları
- Yerleşik İstisnalar
- Kontrol Edilen İstisna
- İşaretlenmemiş İstisna
- Kullanıcı Tanımlı İstisnalar
Yerleşik İstisna
İstisnalar zaten mevcut olan Java kitaplıkları olarak anılırlar yerleşik istisna . Bu istisnalar, hata durumunu tanımlayabildiğimiz için bu hatayı alma nedenini anlayabiliriz. İki geniş kategoriye ayrılabilir, yani, kontrol edilen istisnalar Ve işaretlenmemiş istisna .
Kontrol Edilen İstisna
Kontrol istisnalar denir Derleme zamanı istisnalar çünkü bu istisnalar derleme zamanında derleyici tarafından kontrol edilir. Derleyici, programcının istisnayı ele alıp almayacağını kontrol eder. Programcının istisnayı ele alması gerekir; aksi takdirde sistem bir derleme hatası göstermiştir.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
Yukarıdaki kodda okumaya çalışıyoruz. Merhaba.txt dosyalayın ve verilerini veya içeriğini ekranda görüntüleyin. Program aşağıdaki istisnaları atar:
- FileInputStream(Dosya dosya adı) yapıcı atar FileNotFoundException bu kontrol edilen istisnadır.
- Okumak() yöntemi Dosya Giriş Akışı sınıf fırlatır IOİstisnası .
- kapalı() yöntem ayrıca IOException'ı da atar.
Çıktı:
Hata nasıl çözülür?
Bu hataları çözmenin temel olarak iki yolu vardır.
1) Ana yöntemde istisnalar meydana gelir. Ana yöntemde istisnayı bildirerek bu derleme hatalarından kurtulabiliriz. atışlar Alt-üst ilişkisi nedeniyle FileNotFoundException'ı değil, yalnızca IOException'ı bildiririz. IOException sınıfı, FileNotFoundException'ın üst sınıfı olduğundan bu istisna otomatik olarak IOException tarafından kapsanacaktır. İstisnayı şu şekilde ilan edeceğiz:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Kodu derleyip çalıştırdığımızda hatalar ortadan kalkacak ve dosyanın verilerini göreceğiz.
2) Bu istisnayı şunu kullanarak da halledebiliriz: yakalamaya çalışmak Ancak yukarıda kullandığımız yol doğru değildir. Her istisna tipi için anlamlı bir mesaj vermemiz gerekiyor. Bunu yaparak hatayı anlamak daha kolay olacaktır. Try-catch bloğunu şu şekilde kullanacağız:
İstisna.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
Uygun bir hata mesajı göreceğiz 'Dosya bulunamadı!' Konsolda çünkü o konumda böyle bir dosya yok.
Denetlenmeyen İstisnalar
işaretlenmemiş istisnalar tam tersidir kontrol istisnalar. Derleyici bu istisnaları derleme zamanında kontrol etmeyecektir. Basit bir ifadeyle, eğer bir program denetlenmeyen bir istisna atarsa ve biz bunu işlememiş veya bildirmemiş olsak bile, program derleme hatası vermeyecektir. Genellikle kullanıcı programla etkileşim sırasında hatalı veriler sağladığında ortaya çıkar.
Not: RuntimeException sınıfı, alt-üst ilişkisi nedeniyle denetlenmeyen tüm istisnaları çözebilir.
İşaretlenmemişExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
Yukarıdaki programda 35'i 0'a böldük. Kod başarıyla derlenecek ancak çalışma zamanında ArithmeticException hatası verecek. Bir sayıyı 0'a bölmek, işareti kaldırma istisnası olan sıfıra bölme istisnasını atar.
Çıktı:
İşaretlenmemişException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Çıktı:
Yukarıdaki kodda, 7 konumunda bulunan öğeyi almaya çalışıyoruz, ancak dizinin uzunluğu 6'dır. Kod başarıyla derlenir, ancak çalışma zamanında ArrayIndexOutOfBoundsException'ı atar.
Kullanıcı Tanımlı İstisna
İçinde Java gibi bazı yerleşik istisna sınıflarımız zaten var ArrayIndexOutOfBoundsException , NullPointerException , Ve Aritmetikİstisna . Bu istisnalar, önceden tanımlanmış bazı koşullarda tetiklenecek şekilde sınırlandırılmıştır. Java'da Exception sınıfını genişleterek kendi istisna sınıfımızı yazabiliriz. Throw anahtar sözcüğünü kullanarak belirli bir koşula kendi istisnamızı atabiliriz. Kullanıcı tanımlı bir istisna oluşturmak için temel bilgilere sahip olmamız gerekir. the yakalamaya çalışmak bloke et fırlatmak anahtar kelime .
Hadi bir yazalım Java programı ve kullanıcı tanımlı istisna oluşturun.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Çıktı:
Tanım:
Yukarıdaki kodda iki sınıf oluşturduk; Kullanıcı Tanımlı İstisna Ve Yeniİstisna . Kullanıcı Tanımlı İstisna ana yöntemimiz var ve Yeniİstisna class, kullanıcı tanımlı istisna sınıfımızdır ve istisna . İçinde Yeniİstisna sınıfta bir değişken yaratıyoruz X integer yazın ve yapıcıda ona bir değer atayın. Bu değişkene bir değer atadıktan sonra istisna mesajını döndürüyoruz.
İçinde Kullanıcı Tanımlı İstisna sınıfa bir tane ekledik yakalamaya çalışmak engellemek. Try bölümünde istisnayı atıyoruz, yani, Yeni İstisna ve ona bir tamsayı iletin. Değer NewException sınıfına iletilecek ve bir mesaj döndürecektir. Bu mesajı catch bloğunda yakalayıp ekranda gösteriyoruz.
Kontrol Edilen ve Kontrol Edilmeyen İstisna Arasındaki Fark
Evet Hayır | Kontrol Edilen İstisna | İşaretlenmemiş İstisna |
---|---|---|
1. | Bu istisnalar derleme zamanında kontrol edilir. Bu istisnalar derleme zamanında da ele alınır. | Bu istisnalar, kontrol edilen istisnaların tam tersidir. Bu istisnalar derleme zamanında kontrol edilmez ve işlenmez. |
2. | Bu istisnalar, istisnanın doğrudan alt sınıflarıdır ancak RuntimeException sınıfından genişletilmemiştir. | Bunlar RuntimeException sınıfının doğrudan alt sınıflarıdır. |
3. | Bir yöntemin kontrol edilen bir istisna atması durumunda kod bir derleme hatası verir. Derleyicinin bu istisnayı tek başına ele alması mümkün değildir. | İstisnalar derleyicinin dikkatinden kaçtığı için kod hatasız derlenir. Bu istisnalar, programlama mantığında kullanıcı tarafından oluşturulan hataların sonucudur. |
4. | Bu istisnalar çoğunlukla başarısızlık olasılığının çok yüksek olduğu durumlarda ortaya çıkar. | Bu istisnalar çoğunlukla programlama hatalarından kaynaklanmaktadır. |
5. | Yaygın olarak işaretlenen istisnalar arasında IOException, DataAccessException, InterruptedException vb. yer alır. | Yaygın olarak denetlenmeyen istisnalar arasında ArithmeticException, InvalidClassException, NullPointerException vb. yer alır. |
6. | Bu istisnalar throws anahtar sözcüğü kullanılarak yayılır. | Bunlar otomatik olarak yayılır. |
7. | İşaretlenen istisnayı işlemek için try-catch ve try-finally bloğunun sağlanması gerekir. | Kontrol edilmeyen istisna durumunda zorunlu değildir. |
İstemediğimiz ve programların normal çalışmasını kısıtlayan hatalara veya hatalara denir. istisnalar .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions vb. kategorisine girmektedir. Yerleşik İstisna . Bazen yerleşik istisnalar belirli durumları açıklamak veya tanımlamak için yeterli olmayabilir. Bu durumları açıklamak için, sınıfın alt sınıfı olarak bir istisna sınıfı oluşturarak kendi istisnalarımızı oluşturmamız gerekir. İstisna sınıf. Bu tür istisnalar şu kategoriye girer: Kullanıcı Tanımlı İstisna .