Apa Perbedaan Antara lemparan Vs. melempar di Jawa
Diterbitkan: 2013-07-23Yang satu menyatakannya, dan yang lain melakukannya
Ada lima kata kunci yang berhubungan dengan penanganan Exception di Java misalnya try, catch, last, throw and throws . Terlepas dari perbedaan antara final, last dan finalize , throw vs throws adalah salah satu pertanyaan wawancara Java yang sering ditanyakan.
- kata kunci throw digunakan untuk melempar Pengecualian dari metode apa pun atau blok statis di Java saat melempar kata kunci , digunakan dalam deklarasi metode, dilambangkan Pengecualian mana yang mungkin dapat dilempar dengan metode ini. Mereka tidak dapat dipertukarkan.
- Jika ada metode yang melempar Pengecualian yang dicentang seperti yang ditunjukkan pada Contoh di bawah ini, maka pemanggil dapat menangani pengecualian ini dengan menangkapnya atau dapat membuangnya kembali dengan mendeklarasikan klausa lemparan lain dalam deklarasi metode.
- Klausa Throw dapat digunakan di bagian kode mana pun di mana Anda merasa pengecualian khusus perlu dilemparkan ke metode pemanggilan.
Mengecilkan Pengecualian Java:
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 |
Jika suatu metode melempar pengecualian, itu harus dikelilingi oleh blok try catch untuk menangkapnya atau metode itu harus memiliki klausa throws di tanda tangannya. Tanpa klausa throws di tanda tangan, kompiler Java JVM tidak tahu apa yang harus dilakukan dengan pengecualian. Klausa throws memberi tahu kompiler bahwa pengecualian khusus ini akan ditangani oleh metode pemanggilan.
Di bawah ini adalah contoh yang sangat sederhana yang menjelaskan perilaku blok Throw, Throws, Try, Catch, Akhirnya di Java.
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 ; } } |
Hasil:

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 ) |
Sekarang ganti saja baris 45 dan 46 dengan baris di bawah ini untuk melihat hasil di bawah ini:
1 2 |
//throw new Exception("crunchifyTest2: Oops, FileNotFoundException caught"); System . out . println ( "crunchifyTest2: Oops, FileNotFoundException caught" ) ; |
Hasil Baru:
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 |
Daftar semua Tutorial Java yang mungkin menarik bagi Anda.
Kiat Bonus tentang Pengecualian:
- Eksekusi program normal segera bercabang ketika pengecualian dilemparkan.
- Pengecualian yang diperiksa harus ditangkap atau diteruskan. Ini dapat dilakukan dalam pernyataan try … catch atau dengan mendefinisikan pengecualian dalam definisi metode.
- Pengecualian ditangkap oleh blok tangkapan pertama yang kelas pengecualian terkaitnya cocok dengan kelas atau superkelas dari pengecualian yang dilempar.
- Jika tidak ada blok tangkap yang cocok ditemukan di rantai pengecualian, utas yang berisi pengecualian yang dilemparkan akan dihentikan.
- Blok akhirnya setelah pernyataan try … catch dijalankan terlepas dari apakah pengecualian ditangkap atau tidak.
- Kembali dalam blok akhirnya memutus rantai pengecualian ke pemanggil bahkan untuk pengecualian yang tidak tertangkap.