Bu eğitimde, örnekler yardımıyla istisna işleme için throw ve throws anahtar kelimesini kullanmayı öğreneceğiz.
Java'da, istisnalar iki türe ayrılabilir:
- : İşaretlenmemiş İstisnalar Onlar derleme zamanında kontrol ama değil çalışma time.For örneğe:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, altında istisnalarError
sınıf, vb - Kontrol Edilmiş İstisnalar: Derleme zamanında kontrol edilirler. Örneğin
IOException
,InterruptedException
vs.
İşaretlenmiş ve denetlenmemiş istisnalar hakkında ayrıntılı bilgi edinmek için Java İstisnaları'na bakın.
Genellikle, kontrol edilmeyen istisnaları halletmemize gerek yoktur. Bunun nedeni, programlama hataları nedeniyle kontrol edilmeyen istisnaların ortaya çıkmasıdır. Bunlarla uğraşmak yerine bunları düzeltmek iyi bir uygulamadır.
Bu eğitici şimdi throw
ve kullanılarak kontrol edilen istisnaların nasıl ele alınacağına odaklanacaktır throws
.
Java anahtar kelime atar
Biz kullanmak throws
içindeki oluşabilir istisnalar türünü ilan etmek yöntem bildiriminde anahtar kelime.
Sözdizimi şöyledir:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Yukarıdaki sözdiziminden de görebileceğiniz gibi, throws
birden çok istisna bildirmek için kullanabiliriz .
Örnek 1: Java, Anahtar Kelime atar
import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) )
Çıktı
java.io.FileNotFoundException: test.txt (Böyle bir dosya veya dizin yok)
Bu programı çalıştırdığımızda, eğer dosya test.txt
yoksa , sınıfı genişleten FileInputStream
bir atar .FileNotFoundException
IOException
Bir yöntem istisnaları işlemezse, onun içinde meydana gelebilecek istisnaların türü throws
yan tümcede belirtilmelidir, böylece çağrı yığınında daha yukarıdaki yöntemler bunları işleyebilir veya throws
anahtar kelimeyi kullanarak bunları belirleyebilir .
findFile()
Yöntem belirtir IOException
atılabilir. main()
Yöntem bu yöntemi çağırır ve o atılır eğer istisna işler.
Birden çok istisnai durum
throws
Anahtar kelimeyi kullanarak birden çok istisnayı nasıl atabileceğimiz aşağıda açıklanmıştır .
import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) )
Burada findFile()
yöntem atabilir belirtir NullPointerException
, IOException
ve InvalidClassException
onun içinde throws
maddesi.
Not işlenmiyor biz emin NullPointerException
. Bunun nedeni, kontrol edilmeyen bir istisna olmasıdır. Maddede belirtmek throws
ve işlemek gerekli değildir .
anahtar kelime Vs. atar. dene… yakala… sonunda
İstisnalara neden olabilecek birkaç yöntem olabilir. try… catch
Her yöntem için yazmak sıkıcı olacaktır ve kod uzun ve daha az okunabilir hale gelir.
throws
ayrıca, mevcut yönteminizde yakalamak istemediğiniz istisnayı (işlenmesi gereken bir istisna) işaretlediğinizde de kullanışlıdır.
Java atma anahtar sözcüğü
throw
Anahtar kelime açıkça tek istisna için kullanılır.
Bir istisna atıldığında, program yürütme akışı try
bloktan bloğa aktarılır catch
. throw
Anahtar kelimeyi bir yöntem içinde kullanırız .
Sözdizimi şöyledir:
throw throwableObject;
Fırlatılabilir nesne, sınıfın Throwable
veya sınıfın alt sınıfının bir örneğidir Throwable
.
Örnek 2: Java throw anahtar sözcüğü
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Çıktı
İş parçacığı "ana" java.lang.ArithmeticException: Main.main (Main.java:7) çıkış durumu 1'de Main.divideByZero'da (Main.java:3) 0'a bölmeye çalışılıyor
Bu örnekte, açıkça bir ArithmeticException.
Not: ArithmeticException
kontrol edilmeyen bir istisnadır. Kontrol edilmeyen istisnaları ele almak genellikle gerekli değildir.
Örnek 3: İşaretli istisnayı atma
import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) )
Çıktı
Dosya bulunamadı
findFile()
Yöntem atar IOException
biz onun kurucusuna aktarılan mesaj ile.
Kontrol edilen bir istisna olduğundan, onu throws
cümlecikte belirtmemiz gerektiğini unutmayın .
Bu findFile()
yöntemi çağıran yöntemlerin ya bu istisnayı ele alması ya da throws
anahtar kelimeyi kullanarak bunu belirtmesi gerekir .
main
()
Yöntemde bu istisnayı ele aldık . Bir istisna atıldığında program yürütme akışı try
bloktan bloğa aktarılır catch
. Böylece, try
bloktaki kodun geri kalanı atlanır ve catch
bloktaki ifadeler yürütülür.