Vs atmak arasındaki fark nedir? Java'ya atar
Yayınlanan: 2013-07-23Biri ilan ediyor, diğeri yapıyor.
Java'da İstisna işleme ile ilgili beş anahtar kelime vardır, örneğin try, catch, nihayet, throw ve throws . final, final ve finalize arasındaki farkın yanı sıra, throw vs throws, Java mülakatında sıkça sorulan sorulardan biridir.
- throw anahtar sözcüğü , Java'daki herhangi bir yöntemden veya statik bloktan İstisna atmak için kullanılırken, yöntem bildiriminde kullanılan throws anahtar sözcüğü , bu yöntemle hangi İstisnanın atılabileceğini belirtir. Değiştirilemezler.
- Aşağıdaki Örnekte gösterildiği gibi herhangi bir yöntem işaretli İstisna atarsa, arayan kişi bu istisnayı yakalayarak işleyebilir veya yöntem bildiriminde başka bir throws yan tümcesi bildirerek yeniden atabilir.
- Throw yan tümcesi, çağırma yöntemine belirli bir istisnanın atılması gerektiğini düşündüğünüz kodun herhangi bir bölümünde kullanılabilir.
Java İstisnalarını Anlamak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
java . lang . Object | +-- java . lang . Throwable | +-- java . lang . Exception | | | +-- java . lang . ClassNotFoundException | | | +-- java . io . IOException | | | | | +-- java . io . FileNotFoundException | | | +-- java . lang . RuntimeException | | | +-- java . lang . NullPointerException | | | +-- java . lang . IndexOutOfBoundsException | | | +-- java . lang . ArrayIndexOutOfBoundsException | +-- java . lang . Error | +-- java . lang . VirtualMachineError | +-- java . lang . OutOfMemoryError |
Bir yöntem bir istisna oluşturuyorsa, onu yakalamak için ya bir try catch bloğu ile çevrelenmelidir ya da bu yöntemin imzasında throws yan tümcesi bulunmalıdır. İmzadaki throws yan tümcesi olmadan Java JVM derleyicisi istisna ile ne yapacağını bilemez. throws yan tümcesi, derleyiciye bu özel istisnanın çağıran yöntem tarafından ele alınacağını söyler.
Aşağıda, Java'da Throw, Throws, Try, Catch, Last bloğunun davranışını açıklayan çok basit bir örnek verilmiştir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
package com . crunchify . tutorials ; import java . io . FileInputStream ; import java . io . FileNotFoundException ; /** * @author Crunchify.com */ public class CrunchifyThrowThrows { @SuppressWarnings ( "unused" ) public static void main ( String args [ ] ) throws Exception { FileInputStream crunchifyStream1 = null ; FileInputStream crunchifyStream2 = null ; String fileName = "Crunchify.txt" ; System . out . println ( "main: Starting " + CrunchifyThrowThrows . class . getName ( ) + " with file name = " + fileName ) ; // get file input stream 1 try { crunchifyStream1 = crunchifyTest1 ( fileName ) ; } catch ( FileNotFoundException ex ) { System . out . println ( "main: Oops, FileNotFoundException caught" ) ; } catch ( Exception ex ) { System . out . println ( "main: Oops, genreal exception caught" ) ; } // get file input stream 2 crunchifyStream2 = crunchifyTest2 ( fileName ) ; System . out . println ( "main: " + CrunchifyThrowThrows . class . getName ( ) + " ended" ) ; } public static FileInputStream crunchifyTest1 ( String fileName ) throws FileNotFoundException { FileInputStream crunchifyStream = new FileInputStream ( fileName ) ; System . out . println ( "crunchifyTest1: File input stream created" ) ; return crunchifyStream ; } public static FileInputStream crunchifyTest2 ( String fileName ) throws Exception { FileInputStream crunchifyStream = null ; try { crunchifyStream = new FileInputStream ( fileName ) ; } catch ( FileNotFoundException ex ) { throw new Exception ( "crunchifyTest2: Oops, FileNotFoundException caught" ) ; //System.out.println("crunchifyTest2: Oops, FileNotFoundException caught"); } finally { System . out . println ( "crunchifyTest2: finally block" ) ; } System . out . println ( "crunchifyTest2: Returning from crunchifyTest2" ) ; return crunchifyStream ; } } |
Sonuç:

1 2 3 4 5 6 |
main : Starting com . crunchify . tutorials . CrunchifyThrowThrows with file name = Crunchify . txt main : Oops , FileNotFoundException caught crunchifyTest2 : finally block Exception in thread "main" java . lang . Exception : crunchifyTest2 : Oops , FileNotFoundException caught at com . crunchify . tutorials . CrunchifyThrowThrows . crunchifyTest2 ( CrunchifyThrowThrows . java : 45 ) at com . crunchify . tutorials . CrunchifyThrowThrows . main ( CrunchifyThrowThrows . java : 30 ) |
Şimdi aşağıdaki sonucu görmek için satır 45 ve 46'yı aşağıdaki satırla değiştirin:
1 2 |
//throw new Exception("crunchifyTest2: Oops, FileNotFoundException caught"); System . out . println ( "crunchifyTest2: Oops, FileNotFoundException caught" ) ; |
Yeni Sonuç:
1 2 3 4 5 6 |
main : Starting com . crunchify . tutorials . CrunchifyThrowThrows with file name = Crunchify . txt main : Oops , FileNotFoundException caught crunchifyTest2 : Oops , FileNotFoundException caught crunchifyTest2 : finally block crunchifyTest2 : Returning from crunchifyTest2 main : com . crunchify . tutorials . CrunchifyThrowThrows ended |
İlginizi çekebilecek tüm Java Eğitimlerinin listesi.
İstisnalar Hakkında Bonus İpuçları:
- Bir istisna atıldığında, normal program yürütme hemen dallanır.
- Kontrol edilen istisnalar yakalanmalı veya iletilmelidir. Bu, bir try…catch deyiminde veya yöntem tanımındaki istisnayı tanımlayarak yapılabilir.
- İstisna, ilişkili istisna sınıfı, atılan istisnanın sınıfı veya bir üst sınıfıyla eşleşen ilk catch bloğu tarafından yakalanır.
- İstisna zincirinde eşleşen bir yakalama bloğu bulunamazsa, atılan istisnayı içeren iş parçacığı sonlandırılır.
- Bir try… catch deyiminden sonraki nihayet bloğu, bir istisna yakalanıp yakalanmadığına bakılmaksızın yürütülür.
- Bir nihayet bloğu içinde geri dönmek, yakalanmamış istisnalar için bile istisna zincirini çağırıcıya keser.