Arkadaşlar exception şudur , program çalıştığı zaman programda meydana gelen hata yüzünden programın kesilmesidir.
Yukarıda Error şu anlama geliyor , programınızda bir şeyin çok kötü bir şekilde yanlış gittiğini söyler ki bununla çok karşılacağınızı zannetmiyorum.Örneğin disk sürücüsü görünmüyor gibi...Bunlar çok anormal durumlardır muhtemelen karşılaşmayacaksınız bunlarla.Runtime exceptions RunTimeException classı yada onların alt sınıflarları olarak tanımlarınız , RuntimeExceptions ayrıca unchecked exception olarak bilinir ve siz bunları try catch bloklarıyla yakalayamazsınız.
Bir exceptionu fırlatmak için söyle bir şey kullanırız.
throw new Exception(); // throw keywordünü kullanırız.
Bir örnek verelim.
public class Animal{ public static void main(String[] args) { try { throw new Exception("Kerem"); } catch (Exception e) { e.printStackTrace(); } } }
Gördüğünüz gibi bir hata fırlattık programı çalıştırdığınızda hata ile karşılaşırsınız ve çıktı ;
java.lang.Exception: Kerem
at Animal.main(Animal.java:4)
try ve catch exceptionları yakalamak için kullanılır.Hemen kullanımlarına bakalım.
try { // kodlarımız (protected code olarak da anılır.) } catch (Istisna_türü identifier) { // exception handler alanı }
Gördüğünüz gibi try içerisine kodlarımızı yazarız ve catch ile de try blockunun içerisinde olabilecek exceptionları türünü belirterek orada yakalarız.
try ve catch'e istinaden bir finally blocku da ekleyebiliriz ve finally blocku try da hata meydana gelse de gelmese de her zaman çalışır.
try { // kodlarımız (protected code olarak da anılır.) } catch (Istisna_türü identifier) { // exception handler alanı } finally{}
İsterseniz bir kaç tane exception türlerine bakalım ve örnekleri inceleyim.
ArithmeticException bu bir runtime exceptiondur ve try catch olmadan da bu kod çalışır ve arithmeticexception JVM(java virtual machine) tarafından fırlatılır.
public static void main(String[] args) { System.out.println(12/0); }
IOException bir checked exceptiondur ve bunun handle edilmesi gerekiyor yani bunu try ve catch blokları içerisine almamız gerekiyor hemen örnek verelim.
public static void main(String[] args) { File f = new File("/home/j2guar/Desktop/kerem.txt"); if(!f.exists()){ try { f.createNewFile(); // !! } catch (IOException e) { e.printStackTrace(); } } }
Yada şunu yapabiliriz , try catch blokları arasına almak yerine methodun hatayı fırlatmasını sağlayabiliriz bunun için de throws keywordünü kullanırız.
public static void main(String[] args) throws IOException { File f = new File("/home/j2guar/Desktop/kerem.txt"); if(!f.exists()){ f.createNewFile(); } }
Gördüğünüz gibi throws IOException ile methodun fırlatmasını sağladık fakat bu çok tehlikeli elinizden geldiğince bunu yapmayın , zaten bunu böyle yapmamızın amacı bu methodu kullanan başka bir methodun bu hatayı try catch bloğu arasına alıp hatayı handle etmesidir , fakat main methodunu hangi method kullanıp handle etcek ? En üstteyiz zaten , eğer başka methodlarda yapsaydık sıkıntı yoktu fakat böyle olması tehlikeli.