Kontrol Edilen Vs'de Daha İyi Anlama. Kontrol Edilmeyen İstisnalar – Java'da İstisna Daha İyi Bir Şekilde Nasıl İşlenir?
Yayınlanan: 2014-09-15Kontrol Edilen İstisna
Java Programlama dilinde Kontrol Edilen İstisna Nedir? Basit dilde: Derleme zamanında kontrol edilen ve Kontrol Edilen İstisna olarak adlandırılan İstisna. Bunlardan bazıları aşağıda belirtilmiştir. Kodunuzda bazı yöntemler checked exception
atarsa, o zaman yöntem ya handle the exception
ya da throws
anahtar sözcüğünü kullanarak istisnayı belirtmelidir.
- IOException
- SQLİstisnası
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- MalformedURLException
Örneğe bir göz atalım:
Aşağıdaki örnekte “Crunchify.com” sitesinin içeriğini alıp konsolda yazdıracağız. Bu işlem sırasında Java Programı, MalformedURLException
veya IOException
aşağıdaki vurgulanan satırlara atar.
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 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } in . close ( ) ; return sb . toString ( ) ; } } |
Bunu çözmenin iki yolu var. Çözmek için kodunuza Add throws clause
ekleyin VEYA Add Try, Catch block
ekleyin. İşte güncellenmiş bir kod.
- 16 ve 20 satırlarını değiştirin ve
throws IOException
- 26,42,43'e try catch bloğu ekle
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 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) throws IOException { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) throws IOException { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; try { URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } } catch ( IOException e ) { // TODO: Consume and Throw an error with detailed message. } in . close ( ) ; return sb . toString ( ) ; } } |

İşaretlenmemiş İstisna
Java'da Denetlenmeyen İstisna, NOT verified during Compile time
İstisnalardır. Bu istisnalar, kötü programlama nedeniyle oluşur.
Program derleme hatası vermeyecektir.
Tüm Denetlenmeyen istisnalar, RuntimeException
sınıfının doğrudan alt sınıflarıdır.
Simple Example
: Kullanıcı girdisini kabul eden çevrimiçi bir form oluşturdunuz. Serbest metin formudur. Kullanım, e-posta alanı veya kullanıcı adı alanı VEYA telefon numarası alanı olması durumunda herhangi bir yanlış değer girebilir.
İstemci tarafında doğrulama yoksa, üretimde uygulama çalıştırırken Çalışma Zamanı Doğrulama İstisnası elde etmek için daha fazla olasılık vardır. Hata, DB işlemi veya alanı bir biçimden diğerine dönüştürürken atabilir.
Aşağıda, Denetlenmeyen İstisna türleri bulunmaktadır:
- NullPointerException
- ArrayIndexOutOfBound
- IllegalArgumentException
- IllegalStateException
Beni en çok rahatsız eden NullPointer İstisnası. Geçen hafta NPE hakkında ayrıntılı bir makale yazdım.
NPE'den kaçınmak için sağlanan toplam 8 farklı ipucu vardır.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; try { String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } catch ( ArrayIndexOutOfBoundsException e ) { System . out . println ( "ArrayIndexOutOfBoundException appears here. Better handle it in code above :)" + e ) ; } } } |
Java 7'de, tek Catch block
birden çok İstisnayı işleyebilirsiniz. 13. satırı yukarıdaki satırdan aşağıya değiştirebilirsiniz.
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
Özet olarak, Hem Kontrol Edilen hem de Kontrol Edilmeyen İstisna, try, catch
ve finally
anahtar sözcükleri kullanılarak işlenir.
İşlevsellik açısından Kontrol Edilen ve Kontrol Edilmeyen İstisna aynıdır.