Javada Try-catch-finally Ve Throw, Throws Kullanımı
Javada try-catch-finally ve throw, throws kullanımı detaylı anlatım
Javada try-catch-finally ve throw, throws kullanımı
Çalışma zamanında beklenmeyen bir hata oluşması durumuna exception; bir istisnanın yaratılıp program içerisine atılması işlemine throwing; oluşan bir istisnayı yakalayıp problemin çözülmesi adına belirtilen ifadeleri çalıştırma işlemine catching; istisna ile uğraşan kod bloğuna catch clause (catch block); istisnanın oluştuğu noktada kontrol sağlayan bir dizi metot çağırma işlemine stack trace denir.
İstisnalar için izlenen kod, bir try bloğu içerisinde tutulur. Bu bloğun anlamı ‘ bu kodu çalıştır ve istisna oluşacak mı gör ‘ şeklinde ifade edilebilir. Eğer try bloğu içerisinde bir istisna meydana gelirse, bir istisna nesnesi yaratılır ve kod içerisine atılır. Programımız bu istisnayı catch ifadesi ile yakalayabilir ve işleyebilir. Her catch bloğu ne tipte bir istisnayı yakalayabileceğini belirler ve içerisinde o tipte istisnayı işlemek üzere bir istisna işleyici bulunur. Eğer programcı bir istisnayı bizzat atmak istiyorsa throw ifadesini kullanacaktır. Bir metottan atılan her istisna bir throws kalıbı ile belirtilir. Son olarak finally ile belirtilen bloğun içindeki kod, istisna oluşsun oluşmasın kesinlikle çalışması gereken koddur. Yani bazı kodların her ne olursa olsun çalışması gerekiyorsa finally bloğunun içinde yer almalıdır.
Bazı İstisnalar ;
- ArithmeticException; Sıfıra bölme gibi aritmetik hata.
- ArrayIndexOutOfBoundsException; Dizi indeksi sınırların dışındadır.
- ArrayStoreException; Bir dizi elemanına, uyumsuz bir tipin atanması.
- ClassCastException; Geçersiz tip ataması.
- IllegalArgumentException; Bir metot çağırmak için geçersiz argüman kullanımı.
- IllegalMonitorStateException; Kilitlenmemiş bir kanalda bekleme gibi geçersiz izleme işlemi.
- IllegalStateException; Ortam veya uygulama yanlış durumdadır.
- IllegalThreadStateException; Talep edilen işlem geçerli kanal durumuyla uyumlu değildir.
- IndexOutOfBoundsException; Bazı indeks tipleri sınırın dışındadır.
- NegativeArraySizeException; Negatif boyutta oluşturulan dizi.
- TypeNotPresentException; Tip Bulunamadı.
Try - Catch
Bu örnekte iki tane catch(istisna) tanımladık, döngüde sadece tanımladığımız kadar istisna olur.
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
// TRY - CATCH
try {
int Bölünecek=0, Bölen=0;
Bölünecek = Integer.valueOf(JOptionPane.showInputDialog("Bölmek İstediğiniz Sayıyı Giriniz"));
Bölen = Integer.valueOf(JOptionPane.showInputDialog(Bölünecek + "Sayısını Kaça Böleceksiniz"));
long Sonuc = Bölünecek / Bölen;
} catch (ArithmeticException Hata) {
JOptionPane.showMessageDialog(null, "Matematiksel Hata");
} catch (NumberFormatException Hata) {
JOptionPane.showMessageDialog(null, "Girilen Değer Rakam Olmalı");
}
}
}
Ekran Çıktısı;
Try - Catch - Finally
Bu örnekte ise finally,tanımladığımız hatalar olmasa bile programın sonunda sanki bir hata varmış gibi ya da hata olsa bile sanki tanımlanmamış farklı bir hata varmış gibi davranır.
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
// TRY - CATCH - FİNALLY
try {
int Bölünecek=0, Bölen=0;
Bölünecek = Integer.valueOf(JOptionPane.showInputDialog("Bölmek İstediğiniz Sayıyı Giriniz"));
Bölen = Integer.valueOf(JOptionPane.showInputDialog(Bölünecek + "Sayısını Kaça Böleceksiniz"));
long Sonuc = Bölünecek / Bölen;
} catch (ArithmeticException Hata) {
JOptionPane.showMessageDialog(null, "Matematiksel Hata");
} catch (NumberFormatException Hata) {
JOptionPane.showMessageDialog(null, "Girilen Değer Rakam Olmalı");
} finally {
JOptionPane.showMessageDialog(null, "Finally");
}
}
}
Ekran Çıktısı;
Throw
Programımızın açıkça throw ifadesini kullanarak bir istisnayı fırlatmasıda mümkündür.
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
// THROW
try {
int Bölünecek=0, Bölen=0;
Bölünecek = Integer.valueOf(JOptionPane.showInputDialog("Bölmek İstediğiniz Sayıyı Giriniz"));
Bölen = Integer.valueOf(JOptionPane.showInputDialog(Bölünecek + "Sayısını Kaça Böleceksiniz"));
long Sonuc = Bölünecek / Bölen;
throw new ArithmeticException ("Hata");
} catch (ArithmeticException Hata) {
JOptionPane.showMessageDialog(null, "Matematiksel Hata");
}
}
}
Throws
Eğer bir metot yönetemediği bir istisnaya neden olursa, metot çağırıcılarının kendilerini bu istisnaya karşı koruyabilmeleri için, metodun bu davranışı belirtmesi gerekir. Bunu, metodun deklarasyonuna bir throws cümleciği ekleyerek yapabilirsiniz.
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) throws ArithmeticException, NumberFormatException {
// THROWS
try {
int Bölünecek=0, Bölen=0;
Bölünecek = Integer.valueOf(JOptionPane.showInputDialog("Bölmek İstediğiniz Sayıyı Giriniz"));
Bölen = Integer.valueOf(JOptionPane.showInputDialog(Bölünecek + "Sayısını Kaça Böleceksiniz"));
long Sonuc = Bölünecek / Bölen;
} catch (ArithmeticException Hata) {
JOptionPane.showMessageDialog(null, "Matematiksel Hata");
} catch (NumberFormatException Hata) {
JOptionPane.showMessageDialog(null, "Girilen Değer Rakam Olmalı");
}
}
}
Numan Bezaroğlu