throw vs throws | Farkları ve Kullanımları

Osman Doğan
3 min readDec 1, 2022

throw ve throws kavramları, Java exceptions konusunda kafa karışlıklığına yol açan iki farklı kavramdır. Bu yazıda, her iki kavramı da ayrı ayrı ele alıp, throw nedir, throws nedir, throw ve throws farkı, kullanım şekilleri, kullanım amaçları nelerdir gibi soruları yanıtlamaya çalışacağız.

throw nedir?

Throw, İngilizce’de atmak, fırlatmak anlamlarına gelen bir sözcüktür. Bu sözcük, Java’da herhangi bir sebepten ötürü hata fırlatmak için kullanılır. throw bir metod veya bir kod block’u ile birlikte kullanılabilir. Checked ve unchecked olarak gruplandırılan her iki türdeki exceptionlar da yazılımcı tarafından throw edilebilir.

Herhangi bir sebepten ötürü throw işlemi, yani hata fırlatma işlemi devreye girdiği anda, programın akışında değişimler olur. Bu durumun yaşandığı ilk anda Java, söz konusu exception’un handle edildiği bir try-catch block’u arar. Eğer böyle bir işleşme bulunamazsa, yani ortaya çıkan exception, yazılımcı tarafından handle edilmemişse, program çalışmayı sonlandırır ve yaşanan problem ile ilgili problemler, ekrana yazdırılır.

throw yani hata fırlatma işlemi, yazılımcılar, özellikle büyük çapta projeler geliştiren takımlar için oldukça faydalı ve kullanışlı bir işlemdir. throw, genellikle belirli bir program veya uygulamaya özel istisnalar oluşturmak için kullanılır. Programa, beklenenden farklı bir data girildiğinde, otomatik bir şekilde hata fırlatmak mümkün hale gelir.

throw exception nasıl yapılır?

Yukarıda da ifade ettiğimiz üzere throw işlemi herhangi bir metot veya kod block’u içerisinden yapılabilir. Yazılımcı duruma göre, checked veya unchecked bir exception’u throw edebilir. Fakat throw edilecek exception checked ise, bunun try-catch ile handle edilmesi veya metod throws keyword’ü ile birlikte metod signature’da bildirilmesi gerekir.

Unchecked Exception throw etme

public static void yasKontrolu(int yas) {
if(yas<18) {
//Yas 18'den kucukse ArithmeticException firlat diyoruz.
throw new ArithmeticException("Yasiniz 18'den Kucuk Olamaz");
}
else {
System.out.println("Hos Geldiniz");
}
}
public static void main(String[] args) {
yasKontrolu(15);

}

Checked Exception throw etme

public static void method() throws FileNotFoundException {

FileReader file = new FileReader("/src/main/java/dosyaKonumu.txt");
BufferedReader fileInput = new BufferedReader(file);

//Checked Exception Fırlatmak için onu ya try-catch ile handle etmek
//ya metotta throws ile deklare etmek gerekir.
throw new FileNotFoundException();
}

public static void main(String args[]) {
try {
method();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

}

throws nedir?

Java’da throws kelimesi, bir metodun, metod signature’da bildirilen exception veya exceptionlara sebep olabileceğini bildirmek için kullanılır. Bu sayede, söz konusu metodu kullanacak olan yazılımcı, metodun sebep olabileceği exceptionlar hakkında bilgi sahibi olur ve bu exception’ları doğru bir şekilde handle etme imkanı bulur.

throws ne için ve nasıl kullanılır?

Yukarıda da ifade ettiğimiz üzere throws kelimesi metod signature’da metod isminden sonra, süslü parantezin öncesine eklenir ve yanında metodun throw edebileceği exception veya exceptionlar yazılır. Bir metod birden fazla exception throw edebilir.

Yazılımcı metod oluştururken, throws kelimesi ile meydana gelebilecek exceptionları bildirdikten sonra onu handle etmek zorunda değildir. Bu daha sonra metodu çağıracak kişi tarafından yapılır.

Yalnızca checked exception’lar için throws kullanılır. Unchecked exception’ların açık bir şekilde bildirilmesi veya metodu çağıran kişi tarafından muhakkak bir suretle handle edilmesine gerek yoktur.

public static void ornekMetod() throws IOException {
BufferedWriter bfWriter = new BufferedWriter(new FileWriter("dosya.txt"));
bfWriter.write("Test");
bfWriter.close();
}

//Handle Edilmemis Hali
// public static void main(String[] args) throws IOException{
//
// ornekMetod();
//
// }

// Handle Edilmis Hali
public static void main(String[] args){
try {
ornekMetod();
}catch (IOException e){
e.printStackTrace();
}
}

throw ve throws farkı

  • throw bir metod veya kod block’unun içerisinde yani body’de yazılır. throws ise metod signature’a, metodun isminden sonraki kısma yazılır.
  • throw kelimesinden sonra bir obje oluşturulur. throws’dan sonra ise Exception class’ın ismi yazılır.
  • throw bir hata fırlatmak, hata oluşturmak için kullanılır. throws ise, bir metodun checked exception fırlattığını bildirmek için kullanılır.
  • throw yalnızca bir exception için kullanılabilir. throws birden fazla exception için kullanılabilir.
  • throw checked exception’lar için throws ile birlikte kullanılmak zorundadır.

Java’da throw ve throws keyword’leri ile ilgili söyleyebileceklerimiz bu kadar. Artık exception konusundaki önemli kavramlardan iki tanesi olan throw ve throws’un ne işe yaradığını ne için, ne amaçla ve nasıl kullanıldığını daha net bir şekilde öğrenmiş olduk.

--

--