A.    Kesalahan pada program
Ketika menjalankan sebuah program, tidak jarang ditemukan sebuah kesalahan yang terjadi dalam program tersebut. Kesalahan itu bisa berasal dari hardware, software, atau bahkan dalam algoritma atau kesalahan logika itu sendiri. Masing - masing kesalahan punya solusi yang berbeda - beda dan teknik penanganannya juga berbeda - beda untuk setiap kesalahan yang satu dengan yang lain
1.      Macam macam error
a.       Syntax error (kesalahan sintaksis)
Syntax error adalah sebuah error yang terjadi karena ada aturan bahasa pemrograman yang tidak ditaati, dan error jenis ini akan dideteksi oleh compiler. Error jenis ini mudah untuk dicari dan diperbaiki karena compiler akan memberitahukan di mana error terjadi dan mengapa error bisa terjadi. Sintaks mendefinisikan suatu bentuk program yang benar dari suatu bahasa.
b.      Logical error (kesalahan logika)
Logical error adalah sebuah error yang terjadi ketika program bekerja tidak sesuai dengan tujuan dari pembuatan program itu. Error jenis ini ditangani dengan debugging. Logical error adalah jenis kesalahan secara logika. Jika ditemukan kesalahan dengan jenis ini, proses tetap dilanjutkan, namun tidak berjalan sebagaimana mestinya.
c.       Runtime error
Runtime error terjadi ketika program dijalankan. Runtime error merupakan gangguan atau masalah yang terjadi ketika sebuah program komputer dijalankan. Misalnya user memasukkan input yang salah, program mengakses elemen array di luar indeksnya, atau yang lainnya. Karena berbagai kesalahan biasanya dikelompokkan dalam istilah kolektif kesalahan runtime, sistem operasi biasanya menyediakan beberapa informasi tentang sifat kesalahan yang telah terjadi. Pesan ini memberikan informasi tentang apakah komponen telah gagal untuk menjalankan sebuah program Runtime error dapat terjadi karena beberapa kesalahan / kerusakan yang serius dalam program. atau hal ini bisa diatasi dengan restart komputer dari awal lagi. Namun, ketika error terus - menerus muncul, hal yang harus dilakukan dengan cara mengecek pada sistem operasi.
2.      Reaksi kompilator (compiler) pada kesalahan
a.       Reaksi yang tidak dapat diterima
1)      Kompilator tidak melaporkan kesalahan dikarenakan kompilator crash / hang atau berhenti secara tiba - tiba di tengah jalan.
2)       Kompilator berjalan, namun tidak pernah berakhir karena mengerjakan proses pengulangan ( looping ) yang tidak terhingga ( indefinitelonbounded loop).
3)      Menghasilkan program objek yang salah, yaitu kompilator melanjutkan proses sampai selesai tetapi program objek yang dihasilkan salah. Hal ini berbahaya karena kesalahan baru akan muncul pada saat program dieksekusi.
b.      Reaksi yang kurang dapat diterima atau kurang bermanfaat
Jika terdapat beberapa kesalahan pada kode program, kompilator menemukan kesalahan hanya satu saja setiap kali dilakukan proses kompilasi. Proses kompilasi akan dilakukan secara berulang. 
c.       Reaksi yang dapat diterima 
Kompilator melaporkan kesalahan dan selanjutnya melakukan hal berikut.
1)      Pemulihan ( recovery ), dilanjutkan dengan menemukan kesalahan lain apabila masih ada. 
2)      Perbaikan ( repair ), dilanjutkan dengan proses translasi dan menghasilkan program objek yang valid.


B.     Exception
Secara harfiah, " exception " artinya adalah pengecualian. Dalam pemrograman, exception merupakan kondisi yang akan muncul jika suatu program tidak sukses dijalankan, atau dengan kata lain, user tidak mengisi input sesuai syarat yang berlaku. Selain itu, exception juga dapat diartikan suatu konstruksi suatu bahasa khusus untuk menangani keadaan yang tidak terduga ( biasanya adalah error ), yaitu status keadaan error. Selama program berjalan, dapat terjadi sesuatu hal yang menyebabkan error. Misalnya, array diberi nilai indeks yang melebihi nilai indeks yang sudah dideklarasikan, atau suatu operasi aritmetika yang membagi suatu bilangan dengan nol. Hal ini dapat mengakibatkan program berhenti tidak seperti yang diinginkan dan biasanya menainpilkan pesan kesalahan yang tidak jelas.
Penjelasan tentang exception sebagai berikut. 

1.      Kategori exception
Java menyediakan dua kategori besar untuk exception, yaitu checked exception dan unchecked exception. 
a.       Checked exception
Checked exception merupakan exception yang diantisipasi oleh programmer untuk ditangani dalam program dan terjadi dikarenakan oleh kondisi luar yang siap muncul saat program berjalan. Misalnya membuka file yang tidak ada atau karena gangguan jaringan.
b.      Unchecked exception
Unchecked exception merupakan exception yang bisa muncul dari kondisi yang merepresentasikan adanya bug atau situasi yang secara umum dianggap terlalu sulit bagi program untuk menanganinya. Disebut sebagai unchecked karena tidak perlu mengeceknya atau melakukan sesuatu jika kondisi ini terjadi. Exception yang muncul dari kategori situasi yang merepresentasikan bug ini disebut sebagai runtime exception. Misalnya mengakses array melebihi ukuran yang dimilikinya. Sedangkan exception yang muncul sebagai akibat dari isu environtment software ( yang ini jarang sekali atau sulit ditangani ) disebut error, misalnya kehabisan memori.
2.      Class exception dan class error
Kata " exception " sering dibandingkan dengan kata " error ". Di dalam exception termasuk semua keadaan yang muncul di dalam program yang sedang dieksekusi, sebuah exception dapat berupa error atau hanya kasus khusus. Ketika sebuah exception muncul selama eksekusi program, dikatakan bahwa exception telah dilempar ( exception is thrown ) sehingga program diberhentikan dan program bisa rusak.
Class - class exception dapat diklas fikasikan menjadi tiga tipe utama, yaitu class Error, class Exception, dan class RuntimeException.
a.       Class Error
Class Error adalah class dasar yang digunakan untuk mendeskripsikan kondisi error serius yang jarang terdeteksi. Error semacam ini jarang terjadi. Jika terjadi, kita dapat memberitahukan kepada user dan menghentikan program secara normal.
b.      Class Exception
Class Exception adalah sebuah class dasar yang mendeskripsikan error error yang diakibatkan oleh program kita dan oleh lingkungan luar. Error ini ditangkap dan ditangani oleh program kita. Class ini merepresentasikan checked exception. Dalam hal ini, bukannya membiarkan terjadi pemberhentian program, tetapi sebaliknya yaitu Anda harus menuliskan beberapa kode untuk menangani exception dan kemudian melanjutkan program.
c.       Class RuntimeException
Class Runtime Exception adalah class dasar yang digunakan untuk mendeskripsikan kesalahan pemrograman, seperti casting ( pelemparan ) yang salah, pengaksesan array di luar batas, dan kesalahan numerk. Exception runtime dilempar oleh JVM. Class ini digunakan untuk menangani unchecked exception yang bisa muncul sebagai akibat dari bug program. Pada banyak kasus, Anda harus membiarkan program dihentikan.
3.      Keuntungan menggunakan exception
Ada beberapa keuntungan yang didapatkan dengan menggunakan exception , yaitu sebagai berikut.
a.       Dengan fasilitas pemisahan kode utama dan kode error handling memungkinkan bagi kita untuk berkonsentrasi terhadap bagian - bagian tersebut pada pemrograman tradisional, deteksi error, pelaporan, dan penanganan error menimbulkan kompleksitas program semakin tinggi. Exception memungkinkan untuk menulis alur logika program utama dan menangani kasus khusus di tempat lain.
b.      Adanya mekanisme propagasi laporan error melalui method - method di call stack.
c.       Dalam exception , ada pengelompokan dan perbedaan tipe error. Karena semua exception yang dilempar adalah objek , pengelompokan dan kategorisasi dapat dilakukan menurut hierarki class Contoh pengelompokan berdasarkan hierarki class tersebut dapat dilihat di java.io.IOException dan turunannya. IOException adalah class Exception yang paling umum untuk menangani error input dan output. Turunan class ini diperuntukkan bagi jenis error yang lebih spesifik. Misalnya FileNotFoundException menandakan bahwa file tidak ditemukan di disk.
4.      Assertions
Assertions mengizinkan programmer untuk menentukan asumsi yang dihadapi. Sebagai contoh, sebuah tanggal dengan area bulan tidak berada antara 1 hingga 12 harus dapat diputuskan bahwa data tersebut tidak valid. Programmer dapat menentukan bulan harus berada di antara area tersbut. Meskipun hal itu dimungkinkan menggunakan konstruktor lain untuk mensimulasikan fungsi dari assertions, namun sulit untuk dilakukan karena fitur assertion dapat tidak digunakan. Hal yang menarik dari assertion adalah seorang user memiliki pilihan untuk digunakan atau tidak pada saat runtime.


C.    Exception Handling
Exception handling adalah suatu mekanisme penanganan error yang mungkin terjadi dalam suatu program. Misalnya sebuah program yang memiliki operasi pembagian, di mana suatu ketika user menginputkan bilangan pembagi atau denumerator, maka program tersebut harus memiliki suatu exception handling untuk menangani kasus tersebut. Contoh kasus lain di antaranya akses keyboard, akses CD ROM, akses file, dan akses database. Sehingga apabila alat - alat yang kita butuhkan dalam program tersebut tiba - tiba terputus aksesnya, maka program tidak secara tiba - tiba akan mati dan agar program kita dapat terus berjalan.
Dalam pemrograman Java, ketika terjadi kesalahan, otomatis akan dilemparkan sebuah objek exception, yang kemudian dapat diproses lebih lanjut oleh fungsi - fungsi yang siap menangani kesalahan tersebut. Proses pelemparan exception tersebut sering dikenal dengan istilah throwing exception sedangkan proses penerimaan exception yang bersangkutan dikenal dengan istilah catch exception.
Dengan menggunakan exception handling, kita dapat mencegah terjadinya runtime error yang menyebabkan program kita berhenti di tengah jalan. Exception yang dilempar perlu ditangani menggunakan exception handler dan diproses. Untuk mengimplementasikan exception handling digunakan lima keyword. yaitu try, catch, finally, throw, dan throws. Penjelasannya sebagai berikut
1.      Try – Catch
Untuk menangkap kesalahan pada pemrograman Java, digunakan blok try - catch. Blok try digunakan untuk menempatkan kode - kode program yang mengandung kode program yang mungkin melemparkan exception. Sedangkan blok catch digunakan untuk menempatkan kode - kode program Java yang digunakan untuk menangani sebuah exception tertentu.
2.      Blok finally
Keyword finally merupakan keyword yang menunjukkan bahwa blok program tersebut akan selalu dieksekusi meskipun ada kesalahan yang muncul ataupun tidak ada. Blok finally merupakan blok yang selalu dijalankan pada proses try - catch, baik itu terjadi error ataupun tidak. Blok finally terdapat pada bagian akhir try catch. Statement yang berada di dalam blok finally akan dieksekusi paling akhir ketika sedang mengeksekusi blok try, meskipun tidak ada exception yang muncul atau ada exception yang muncul. Statement finally digunakan untuk melakukan sesuatu yang penting ketika terdapat exception atau tidak.
3.      Throws
Jika method tidak dapat menangani exception, maka method tersebut harus mendeklarasikan jenis exception yang mungkin dilemparkan menggunakan kata throws. Kata throws digunakan pada bagian deklarasi method. Keyword throws akan diikuti daftar tipe exception yang mungkin dilempar oleh sebuah method. Keyword ini perlu dipakai untuk semua exception, kecuali exception dari class Exception dan RuntimeException termasuk turunannya.
4.      Throw
Keyword Throw digunakan untuk melemparkan suatu bug yang dibuat secara manual. Anda dapat melempar exception atau objek exception baru atau exception yang baru saja ditangkap dengan menggunakan keyword throw. Misalnya saat kita membuat sebuah program dan user salah memasukkan input, tetapi program tidak menandakan bahwa itu terjadi kesalahan ( error ), karena input yang dimasukkan tidak berpotensi akan terjadi error.
5.      Melontarkan exception
Adakalanya dibutuhkan kode program untuk melempar exception pada program yang kita buat. Hal ini terjadi jika di dalam program ditemukan beberapa pengecualian atau kondisi error, tetapi tidak ada alasan untuk menangani error tersebut di mana permasalahan ditemukan. Program dapat melempar sebuah exception dengan harapan dapat ditangkap dan ditangani oleh blok catch. Hal ini dapat dilakukan dengan melempar exception secara eksplisit dengan menggunakan statement throw.
6.      User defined exception
User defined exception merupakan exception yang dibuat oleh programmer sesuai dengan permintaan pada aplikasi. Statement throw, throws, try, catch, dan finally digunakan dalam mengimplementasikan user defined exception. Class Exception menuruni semua method yang ada di dalam class Throwable. User defined exception juga menuruni semua method yang didefinisikan di dalam class Throwable.


RANGKUMAN

1.      Exception adalah event yang terjadi ketika program menemui kesalahan pada saat instruksi program dijalankan.
2.      Exception handling merupakan fasilitas di Java yang memberikan fleksibilitas kepada developer untuk menangkap bug atau kesalahan yang terjadi ketika program berjalan.
3.      Dalam exception handling ada lima keyword penting yang digunakan, yaitu Try, Catch, Finally, throw , dan throws.


Sumber : Wijayanti Hanifah. Pemroggraman Berorientasi Objek. Surakarta. CV Putra Nugraha.