"Hai, Amigo!"

"Hai, Ellie! Bagaimana hidup?"

"Bagus sekali, terima kasih. Apa kabar?"

"Hebat, pagi ini banyak sekali hal baru yang dijelaskan kepadaku."

"Wah, bagus sekali. Kamu tidak lelah?"

"Ya, begitulah. Aku sedikit lelah."

"Kalau begitu Anda beruntung. Saya ingin meliput topik yang besar dan kompleks hari ini, tetapi pada menit terakhir saya berubah pikiran dan memutuskan untuk meliput topik yang kecil dan mudah."

"Kecil dan mudah? Aku siap."

"Hari ini kita akan mempelajari topik Pengecualian secara mendetail."

"Apakah Anda berbicara tentang penanganan kesalahan?"

"Anda tidak boleh menganggap pengecualian sebagai kesalahan. Pengecualian lebih seperti laporan bahwa 'sesuatu yang tidak terduga terjadi'. Berdasarkan laporan ini, Anda dapat mengusulkan tindakan alternatif."

"Ini semua tentang metode.  Saat Anda memanggil suatu metode, ia berjanji untuk melakukan apa yang harus dilakukannya. "

"Ketika suatu metode, untuk alasan apa pun, tidak dapat melakukan apa yang harus dilakukan, itu harus memberi tahu penelepon."

"Dengan kata lain, hal terburuk yang bisa terjadi adalah metode tidak melakukan tugasnya dan tidak memberi tahu siapa pun tentangnya. Tidak ada yang lebih buruk dari itu. Anda kehilangan kendali atas situasi saat itu terjadi. "

"Ketika Anda seorang programmer baru, sepertinya Anda hanya memanggil metode dan mereka pasti akan melakukan apa yang Anda minta."

"Bila Anda seorang programmer berpengalaman, Anda tahu bahwa mungkin ada lusinan faktor yang memengaruhi kemampuan metode untuk melakukan tugasnya, dan ada banyak kasus yang dapat mencegah metode menyelesaikan tugasnya."

"Dari sudut pandang pemrogram, seribu kali lebih baik jika sebuah program berhenti ketika menemui kesalahan daripada jika program menemui kesalahan dan kemudian terus bekerja (salah) tanpa pengguna menyadari apa yang terjadi."

"Jadi program yang menunjukkan sesuatu yang salah mungkin lebih buruk daripada jika program ditutup dan kehilangan semua datanya?"

"Apa yang membuat Anda berpikir bahwa program hanya menunjukkan sesuatu yang salah? Mungkin program memiliki banyak bug dan semua data Anda akan hilang selamanya? Misalkan Anda telah mengetik teks selama 3 jam, tetapi tidak ada yang akan disimpan karena kesalahan yang terjadi setelah hanya dua menit."

"Ketika seorang programmer pemula menemukan pengecualian, dia menjadi frustrasi."

"Namun pada kenyataannya, pengecualian mengungkapkan semua kemungkinan skenario yang seharusnya dia perkirakan tetapi tidak."

"Anda dapat memilih untuk tidak menangani pengecualian dan itu akan membuat Anda menjadi programmer yang buruk. Tetapi jika metode Anda tidak memberikan pengecualian, maka Anda sama sekali bukan programmer - karena Anda gagal memahami kebenaran sederhana ini:"

"suatu metode melakukan apa yang harus dilakukan, atau memberikan pengecualian. Tidak ada opsi ketiga!"

"Oke, aku percaya padamu. Aku berjanji akan menggunakan pengecualian."

"Bagus. Kalau begitu izinkan saya memberi tahu Anda tentang hierarki pengecualian:"

Hirarki pengecualian, kesalahan - 1

"Hierarki pengecualian didasarkan pada empat kelas."

"Kelas dasar terendah adalah Throwable ."

" Kelas Kesalahan dan Pengecualian mewarisinya."

" RuntimeException mewarisi Exception ."

" Kelas Kesalahan adalah kelas dasar untuk kesalahan JVM seperti StackOverFlow , OutOfMemory , …"

"Sebuah program biasanya tidak dapat pulih dari kesalahan seperti itu, yang menyebabkannya berhenti."

"Memang, apa yang bisa dilakukan jika tidak ada cukup memori untuk program tetap berjalan normal atau telah terjadi stack overflow?"

" Pengecualian adalah kelas dasar untuk semua pengecualian biasa yang dilemparkan oleh suatu program.  RuntimeException adalah jenis Pengecualian khusus yang memiliki aturan yang sedikit berbeda."

"Apakah mereka?"

"Itulah yang akan saya jelaskan sekarang."

"Seperti yang mungkin Anda ingat, pengecualian terbagi dalam dua kategori: dicentang dan tidak dicentang ."

"Jika suatu metode melontarkan pengecualian yang diperiksa , maka metode yang memanggilnya harus membungkus panggilan tersebut dalam blok try-catch . Ya, baik itu atau lemparkan kembali pengecualian (ke pemanggilnya) dengan secara jelas menunjukkan lemparan dalam tanda tangan metode."

"Aturan/batasan ini tidak berlaku untuk pengecualian yang tidak dicentang."

"Jadi, semua pengecualian yang mewarisi Pengecualian dianggap dicentang. Kecuali untuk pengecualian yang mewarisi RuntimeException, yang dianggap tidak dicentang."

"Uh-huh. Aku ingat kamu memberitahuku sesuatu seperti itu sebelumnya."

"Amigo! Mereka bertanya tentang hierarki pengecualian di setiap wawancara . Saya akan mengatakannya lagi — setiap wawancara . Anda perlu mengetahui topik ini dengan sempurna."

"Oke. Aku akan membaca semuanya lagi dan memikirkannya. Terima kasih telah membantuku, Ellie."