Javada try catch Kullanımı
Javada İstisna Yakalama Mantığı
Ç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.
Matematiksel İstisna yakalayıcısı
public class Main {
public static void main(String[] args) {
try {
int a = 42 / 0;
} catch (ArithmeticException Hata) {
System.out.print(" Hata oluştu :" + Hata.getMessage());
}
}
}
Dizi indeks İstisna yakalayıcısı
public class Main {
public static void main(String[] args) {
try {
String Gunler[] = new String[3];
System.out.println(Gunler[5]);
} catch (ArrayIndexOutOfBoundsException HataDurumu) {
System.out.println(HataDurumu.getMessage());
}
}
}
Çoklu İstisna yakalayıcılar
public class Main {
public static void main(String[] args) {
try {
int array[] = new int[100];
//array[100] = 100; //1. Hata
//array[5]=40/0; //2. Hata
//sdfs //3. Hata
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Dizi elemanı fazla girildi");
} catch (ArithmeticException e) {
System.out.println("Matematiksel Hata: " + e);
} catch (Exception e) {
System.out.println("Bir Hata oluştu: " + e);
}
}
}
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
int a=0, b;
try {
//a string olursa hata oluşur
a = Integer.parseInt(JOptionPane.showInputDialog("lütfen integer bir sayı giriniz"));
//a 0 olursa bölme hatası oluşur
b=100 / a;
}
catch (ArithmeticException e){
JOptionPane.showMessageDialog(null, "Girilen değer 0 olunca bölünme hatası meydana geldiğinden işlem gerceklestirilmiyor");
//JOptionPane.showMessageDialog(null, e.getMessage()); //Hatanın mesajını yazar
//JOptionPane.showMessageDialog(null, e.getStackTrace()); //istisnaya kadar ki çağırma yığınlarını döndürür
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null, "Girilen değer rakam olmalı");
}
}
}
İç İçe yazılmış İstisna yakalayıcılar
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
try {
int array[] = new int[100];
//array[100]=1;
try {
//int i = 5 / 0;
try {
hebele hubele;
} catch (RuntimeException Hata) {
System.out.println("Saçmalanmış");
}
} catch (ArithmeticException Hata) {
System.out.println("0 a bölme hatası");
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Dizi elemanı fazla girildi");
}
}
}