1. |
İşlemci veya programın farklı bir rutine yönlendirilmesine yol açan bir durum ya da hata. Exception ve interrupt birbirine yakın kavramlardır. Şu kadar var ki; interrupt donanım tarafından bilinçli olarak oluşturulurken, exception bir hata durumunda oluşturulur.
|
2. |
C#da try..catch bloğu ile yakalanır.
//Kontrolsüz bölme yapılan fonksiyon.
public double Bol(Sayi1, Sayi2){
return Sayi1 / Sayi2;
}
public void Main(){
try{
Bol(5,0); // 0'a bölme hatası gerçekleşecek. Fakat Bol fonksiyonu bu hatayı yakalayamaz.
}
catch(Exception ex){
MessageBox.Show(ex.Message); //Hata yakalandı ve hata mesajı gösteriliyor.
}
}
bir exception gerçekleştiğinde ilk try..catch bloğuna gidilir ve gerekli işlemler yapılır. Eğer gözden kaçmışsa ve exception üreten fonksiyon try..catch bloğu içinde değilse programın çalışması sonlandırılır.
|
3. |
C# ve Java'da özel exception tipleri vardır. Bu tiplerin instanceları throw ile fırlatılılır, catch ile yakalanır.
C++ ve Javascript dillerinde ise exceptionlar için özel bir tip yoktur. Herhangi bir tipte değişkeni throw edip catch edebilirsiniz. Daha esnektir.
Örneğin aşağıdaki Javascript kodu çıktıya "Hata oluştu!" yazar:
try {
throw "Hata oluştu!";
} catch(hata) {
document.write(hata);
}
Java ve C#'taki özel tip kullanımı hataları özelden genele doğru yakalayabilmenizi sağlar. Bütün hatalar Exception tipinden türetilir. Mesela C#'da DevideByZeroException ArithmeticException'dan, o da SystemException'dan, o da Exception'dan türetilmiştir. Aynı şekilde OverflowException da ArithmeticException'dan türetilmiştir. Hem sıfıra bölme hem de taşma hatasını sadece ArithmeticException'ı kullanarak yakalayabilirsiniz. Özellikle sıfıra bölme hatasını yakalamak ve ona uygun kod yazmak istiyorsanız DivideByZeroException'ı kullanmalısınız.
Sonuç olarak bütün hatalar (istisnalar) bütün exception sınıflarının atası olan Exception sınıfı kullanılarak yakalanabilir. Ama özel bir hata ile ilgileniyorsanız o hataya ait exception sınıfını kullanmalısınız. Son bir söz söylemek gerekirse catch ifadeleri altalta sıralanırken en özelden en genele doğru sıralanmalıdır. Aksi durumda zaten derleyici hata verecektir.
|
|