Pemahaman yang Lebih Baik tentang Diperiksa Vs. Pengecualian Tidak Dicentang - Bagaimana Cara Menangani Pengecualian dengan Lebih Baik di Jawa?
Diterbitkan: 2014-09-15Pengecualian yang Dicentang
Apa itu Pengecualian yang Diperiksa dalam bahasa Pemrograman Java. Dalam bahasa sederhana: Pengecualian yang diperiksa pada waktu Kompilasi disebut Pengecualian Diperiksa. Beberapa ini disebutkan di bawah ini. Jika dalam kode Anda jika beberapa metode melempar checked exception
, maka metode harus handle the exception
atau harus menentukan pengecualian menggunakan kata kunci throws
.
- IOException
- SQLException
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- Pengecualian URL yang salah bentuk
Mari kita lihat contohnya:
Dalam contoh di bawah ini kita akan mendapatkan konten situs "Crunchify.com" dan mencetaknya di konsol. Selama operasi ini, Program Java akan MalformedURLException
atau IOException
di bawah baris yang disorot.
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 ( ) ; } } |
Ada dua cara untuk menyelesaikan ini. Add throws clause
ATAU Add Try, Catch block
ke kode Anda untuk menyelesaikannya. Berikut adalah kode yang diperbarui.
- Ubah baris 16 dan 20 dan tambahkan
throws IOException
- Tambahkan try catch block pada 26,42,43
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 ( ) ; } } |

Pengecualian Tidak Dicentang
Pengecualian yang Tidak Dicentang di Jawa adalah Pengecualian yang penanganannya NOT verified during Compile time
. Pengecualian ini terjadi karena pemrograman yang buruk.
Program tidak akan memberikan kesalahan kompilasi.
Semua pengecualian yang tidak dicentang adalah subkelas langsung dari kelas RuntimeException
.
Simple Example
: Anda telah membuat formulir online yang menerima masukan pengguna. Ini bentuk teks bebas. Penggunaan dapat memasukkan nilai yang salah jika bidang email, atau bidang nama pengguna ATAU bidang nomor telepon.
Jika Anda tidak memiliki validasi di sisi klien maka ada lebih banyak kemungkinan untuk mendapatkan Pengecualian Validasi Runtime saat menjalankan aplikasi dalam produksi. Kesalahan mungkin disebabkan oleh operasi DB atau mengonversi bidang dari satu format ke format lainnya.
Di bawah ini adalah jenis Pengecualian Tidak Dicentang:
- NullPointerException
- ArrayIndexOutOfBound
- Pengecualian Argumen Ilegal
- Pengecualian Status Ilegal
Yang paling mengganggu saya adalah Pengecualian NullPointer. Saya telah menulis artikel rinci tentang NPE minggu lalu.
Ada total 8 tips berbeda yang disediakan untuk menghindari NPE.
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 ) ; } } } |
Di Java 7, Anda dapat menangani beberapa Pengecualian dalam satu Catch block
. Anda dapat mengubah baris 13 dari baris di atas diubah menjadi di bawah.
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
Sebagai ringkasan, Pengecualian yang Dicentang dan Tidak Dicentang ditangani menggunakan kata kunci try, catch
dan finally
.
Dalam hal Fungsionalitas Diperiksa dan Pengecualian Tidak Dicentang adalah sama.