Java Eğitimi 35- Hata Ayıklama(Try-Catch)

Herkese merhabalar,

Bu yazımda Java’da hata yakalamadan bahsedeceğim. Bu olaya exception handling de denilmekte. Sizce ne tür hatalardır bunlar?

Diyelim ki bir anket programı yazdınız. Ad-soyad yerine rakam girilmesini istemezsiniz değil mi? Veya hesap makinesi programı için kullanıcıdan işlem yapmasını istediniz. Rakamdan başka bir şey girilirse ya da ortada mantık hatası varsa programınız çalışmaz duruma gelir. Bunu bir de kullanıcı açısından düşünün. Yanlış bir şey girmesi durumunda karşısındaki program hata veriyor ve onun yapabileceği bir şey yok. Böyle bir durumun oluşmaması için yazılımcılara büyük bir görev düşer. Program ne kadar basit olursa olsun kullanıcıların anlayabileceği kadar kullanışlı ve açıklayıcı olmalıdır. İşte bu tarz durumlarda hata yakalayıcı bir kod yazarak nerede hatanın meydana geldiğini bulabilirsiniz. 

Exception, istisna anlamına gelir. İstisna sınıflarının tamamı java.lang.Exception sınıfının alt türüdür. Exception sınıfı ise Throwable sınıfının alt sınıfı olarak yerini alır. Throwable sınıfının alt sınıflarını özet bir hiyerarşi şeklinde gösterirsek;

şeklini elde ederiz. O halde basit bir örnekle başlayarak hataların nasıl yakalandığını görelim. Bir sayıyı 0’a böldüğümüzde sonuç ne olur? Normalde böyle bir durum söz konusu olamaz değil mi? Çünkü sonuç tanımsız olacaktır. Try-catch’in genel yapısı şöyledir:

try {
//Hata oluşması beklenen kod bloğudur.
}
catch(hata tipi){
//Hatanın yönetilmesi için gerekli kod burada yer alır
}
finally{
//Hata olsa da olmasa da çalışan bloktur
}

Şimdi bu yapıyı program yazarak nasıl görelim.

public class islem {
public static void main(String[] args){
int pay=15;
int payda=0;

int bolme=pay/payda;
System.out.println("Bölme işleminin sonucu= " + bolme);
}
}

Yukarıdaki kodu çalıştırdığımızda;

tarzında bir hata ile karşılaşırız. Yani program direkt hata verdi ve çalışmadığı için kapandı. İşte bu problemi try-catch kullanarak çözebiliriz. İşlemi kontrol etmek istediğimiz için try{} kısmının içine işlemi yazarız. catch{} kısmında ise bize uyarı vermesini sağlarız. Yani hatayı bastırırız.

public class islem {
public static void main(String[] args){
int pay=15;
int payda=0;

try {
int bolme=pay/payda;
}
catch(Exception i) {
System.err.println("Programda bir hata var,tekrar kontrol ediniz..: " + i);
}
}
}

Şimdi de rakam girilmesi gerekirken metinsel bir ifade girildiğinde karşılaştığımız hatayı bize veren farklı bir kod üzerinden ilerleyelim.

import java.util.Scanner;

public class not {
public static void main(String[] args) {
Scanner sınav=new Scanner(System.in);
System.out.print("Sınav notunuzu giriniz: ");
try {
int not=sınav.nextInt();
}
catch(Exception e){
System.out.println("Dikkat!Programın hatası: " + e);
}
finally {
System.out.println("Lütfen sadece 0 ile 100 arasında bir not giriniz.");
}
}
}

Fark ettiyseniz, yukarıdaki örnekte ilk örnekten farklı olarak finally bloğunu ekledik. Bu bloğu eklediğimizde, hata olsun ya da olmasın her durumda, bize ne gibi bir giriş yapmamız gerektiğini hatırlatır. 

public class dizi {
public static void main(String[] args){
int sayı[] = {10,20,30,40,50,60};

for (int s=0 ; s < 7 ; s++) {
System.out.println("Sayı: " + sayı[s]);
}
System.out.println("Program bitti");
}
}

Yukarıdaki kodlarda nasıl bir hata ile karşılaşırız dikkat edebildiniz mi? 6 elemandan oluşan bir dizi belirledik ama for döngüsünün içinde olmayan bir elemanı daha çağırıyoruz. Bu da bize hata olarak döner.

O halde şimdi bu kodlara try-catch bloklarını eklemenin tam vakti..

public class dizi {
public static void main(String[] args){
int sayı[] = {10,20,30,40,50,60};

for (int s=0 ; s < 7 ; s++) {
try {
System.out.println("Sayı: " + sayı[s]);
}
catch(Exception e){
System.out.println("Hata bulundu" + e);
}
System.out.println("Program bitti");
}
}
}

Bir sonraki yazımda görüşmek üzere. Bol kodlu günler..

Yorum bırakın