top of page

Java Ders Notlarım – 7

Merhabalar geleceğin programcıları😀, bu yazımda sizlerle beraber Exception Handling dediğimiz Hata Yakalama konusunu, try-catch-finally mekanizmasını ve throw anahtar kelimesini öğreneceğiz. İyi Kodlamalar.

Exception Handling

Java programlama dilinde yazılmış olan bir programda çalışırken beklenmeyen bir durum oluştuğunda bir sinyal üretilir. Bu sinyal aslında bir hatanın fırlatılmasıdır. Malum bir hata fırlatılmışsa tutmakta fayda var. Bu tutma olayı da işte exception handling

Türkçe mealine Hata yakalama diyebileceğimiz bir mevzudur kendisi. Genelde derleme sonrası zamanda program kullanılırken oluşabilecek hataları yakalamak ve bu hatalara göre işlem yaptığımız olaydır.

Eğer biz bu hataları manuel olarak tespit edemezsek. çalışma zamanında bu hatalar programın sonlanmasına sebep olabilir.

try-throw-catch Mekanizması

try-catch nedir ve nasıl kullanılır?

try ve catch kelimeleri birlikte kullanılır. Exception handling dediğimiz mevzu ise bu anahtar kelimelerin blokları arasında yapılır.Kullanımı şu şekildedir:

try
{
    //hata oluşabileceğini öngördüğünüz kodlar buraya yazılır
}
catch (Exception e)
{
    //eğer ki yukarıdaki blok içerisindeki kodlar işlenirken herhangi bir hata fırlatılırsa o zaman çalışacak kodlar buraya yazılır.
}
 

try bloğu, hata oluşabileceğini öngördüğünüz kodların bulunduğu kısımdır. catch bloğu ise, try da denenen kodlardan herhangi bir hata oluşması durumda çalışacak kodların bulunduğu kısımdır. Exception e yazan kısım ise yakalanılması öngörülen Exception classının ismi, e ise o exception nesnesinin o anki verilerini tutan bir nesnesini temsil eder. Mesela

e.getMessage();
 

kodu ile o an yakalanan hata nesnesinin hata mesajı String olarak alınabilir.

Burda dikkat etmemiz gereken bir kısım var ki o da şudur: örnek veriyorum, try bloğu içerisinde 5 satır kod bulunsun. Eğer kodlar işlenirken 3 satırda hata fırlatılırsa, program try bloğu içerisindeki sonraki satırları (yani 4-5) atlayarak direkt olarak catch bloğunun içerisindeki kodları uygulamaya devam edecektir.

Genelde hata yakalama yapılırken, javanın kütüphaneleri içerisinde bulunana Exception sınıfları hata olarak fırlatılır ama bazı durumlarda biz kendi özel bir sınıfım ile hata fırlatmak isteyebiliriz. Bu durumda Exception sınıfından kalıtım alarak kendi sınıfımızı oluşturabilir ve yine exception gibi bu sınıfı da hata olarak fırlatabiliriz. Bu kısımda tek bir şart var o da şu: Exception sınıfını kalıtım almak. Örnek bir sınıf yazayım:

class NonSquareMatrixException extends Exception
{

}
 

Bazı durumlarda hata oluşacağını öngörsekte hatanın hangi Exception sınıfından oluştuğunu bilemeyebiliriz. Bu tür durumlarda tüm exception sınıflarının atası sayabileceğimiz Exception sınıfı catch parantezi içerisine type(tür) olarak yazabiliriz.

Ayrıca try bölümünde birden fazla exception oluşma durumu var ise o zaman her bir exception için ayrı ayrı olarak catch bloğu kullanabiliyoruz.Örnek olarak:

try
{
	//hata oluşması öngörülen kodlar buraya yazılır.
} 
catch (FileNotFoundException e)
{
	//FileNotFoundException hatası yakalanırsa çalışacak kodlar buraya yazılır.
}
catch (Exception e)
{
	//Exception hatası yakalanırsa çalışacak kodlar buraya yazılır.
}
 

Bu kısımda dikkat edilmesi gerek bir hususta şudur: eğer yukarıdaki kodu şu şekilde yazmış olsaydık:

try
{
	//hata oluşması öngörülen kodlar buraya yazılır.
} 
catch (Exception e)
{
	//Exception hatası yakalanırsa çalışacak kodlar buraya yazılır.
}
catch (FileNotFoundException e)
{
	//FileNotFoundException hatası yakalanırsa çalışacak kodlar buraya yazılır.
}
 

ve try bloğu içerisinde FileNotFoundException türünde bir hata fırlatılsaydı FileNotFoundException durumunda çalışacak olan kodlar çalışmayıp Exception durumunda çalışacak olan kodlar çalışırdı. Çünkü FileNotFoundException classı Exception dan türetilmiş bir class ve try-catch mekanizmasında bir hata oluşması durumunda yukarıdan-aşağıya doğru ilerleyeceği için Exception türünü doğru kabul edip sürekli Exception un olduğu kodu çalıştıracaktır.

throw nedir ve nasıl kullanılır?

throw ise hata fırlatmak için kullanılır. Genelde programcıların kullanım amacı istenilen şartlar veya kriterler uygun olmadığında throw ile hata fırlatılarak işleme devam edilmez. Peki bu trowu nasıl kullanacağız?

Kullanım kalıbı şu şekildedir:

throw exceptionNesnesi;
 

Örnek olarak şu şekilde kullanılabilir:

throw new Exception();
 

veya şu şekilde:

Exception exc = new Exception();
throw exc;
 

Eğer throw kelimesini biz bir methodun içerisinde kullanacaksak iki seçeneğimiz var.

  1. O methodun normal parantezlerinden sonra throws Exception şeklinde bir ibare bulundurmalıyız. Örnek olarak:

public static void main(String[] args) throws Exception
{
    int x = 0;

    if (x == 0)
    {
        throw new Exception();
    } 
}
 

2. Fırlatılacak exceptionu try-catch ile yakalamalıyız. Örnek olarak:

public static void main(String[] args)
{
    int x = 0;

    if (x == 0)
    {
        try
        {
            throw new Exception();
        } 
        catch (Exception e)
        {

        }
    }       
}
 

Eğer bir method içerisinde birden fazla Exception fırlatıyorsak o zaman throws’tan sonra o Exceptionları aralarına virgül yazarak eklememiz gerekiyor. Örnek olarak:

public static void main(String[] args) throws Exception, NotZeroException
{
    int x = 0;

    if (x == 0)
    {
        throw new Exception();
    } 
    else
    {
        throw new NotZeroException();
    }
}
 

try-catch-finally mekanizması

bu mekanizmanın try-catch ten farkı, finally bloğudur. Bu bloğun işlevi şudur: try içerisine her zamanki gibi hata oluşmasını öngördüğünüz kodları yazdınız ve catch bloğu içerisine ise exception türüne göre hata yakalanırsa çalışması gereken kodları yazdınız ama bazen her iki durumda da çalışmasını istediğiniz kodlar olabilir işte bu tür durumlarda da imdadımıza finally bloğu yetişiyor.😀 Peki bu finally’i nasıl kullanıcaz derseniz, şöyle göstereyim:

try
{
    // hata oluşması öngörülen kodlar buraya yazılır.
} 
catch (Exception e)
{
    // Exception türünde bir hata yakalanırsa çalışacak kodlar buraya yazılır.
}
finally
{
    // hata oluşsa da oluşmasa da çalışacak olan kodlar buraya yazılır.
}
 

eğer istersek bu mekanizmayı catch olmadan şu şekilde de kullanabiliriz:

try
{
    // hata oluşması öngörülen kodlar buraya yazılır.
} 
finally
{
    // hata oluşsa da oluşmasa da çalışacak olan kodlar buraya yazılır.
}
 

Comments


bottom of page