1.Pengertian Exception
Exception adalah suatu mekanisme yang digunakan oleh beberapa bahasa
pemrograman untuk mendeskripsikan apa yang harus dilakukan jika ada suatu
kondisi yang tidak diinginkan terjadi. Eksepsi dapat dijumpai saat:
- Mengakses
method dengan argumen yang tidak sesuai
- Membuka
file yang tidak ada
- Koneksi
jaringan yang terganggu
- Manipulasi
operan yang nilainya keluar dari batasan yang didefinisikan
- Pemanggilan
class yang tidak ada
Java menyediakan dua kategori besar untuk eksepsi yang disebut sebagai
checked exception dan unchecked exception.
- Checked Exception
Adalah eksepsi yang diantisipasi oleh programmer untuk
dihandle dalam program dan terjadi dikarenakan oleh kondisi luar yang siap
muncul saat program berjalan. Misalnya membuka file yang tidak ada atau
gangguan jaringan.
Yang termasuk checked exception adalah class java.lang.Throwable dan semua subclassnya, kecuali class dan subclass dari java.lang.Error dan java.lang.RuntimeError
Yang termasuk checked exception adalah class java.lang.Throwable dan semua subclassnya, kecuali class dan subclass dari java.lang.Error dan java.lang.RuntimeError
- Unchecked Exception
bisa muncul dari kondisi yang merepresentasikan adanya bug atau situasi
yang secara umum dianggap terlalu sulit bagi program untuk menghandlenya.
Disebut sebagai unchecked karena kita tidak perlu mengeceknya atau melakukan
sesuatu jika kondisi ini terjadi. Eksepsi yang muncul dari kategori situasi
yang merepresentasikan bug ini disebut sebagai runtime exception. Misalnya
mengakses array melebihi size yang dimilikinya.
Yang termasuk Unchecked exception
Yang termasuk Unchecked exception
1. java.lang.Error dan subclassnya
2. java.lang.RuntimeException dan subclassnya.
- Sedangkan eksepsi yang muncul
sebagai akibat dari isu environment software – yang ini jarang sekali atau
sulit sekali untuk dihandle- disebut sebagai error, misalnya running out
memory.
Jadi, class Exception mendefinisikan kondisi error yang ringan yang
dijumpai oleh program. Sedangkan untuk kondisi error yang berat didefinisikan
dengan Error.
- Class Exception
adalah sebuah class dasar yang merepresentasikan checked exception. Dalam
hal ini, bukannya membiarkan terjadinya penghentian program, sebaliknya Anda
harus menuliskan beberapa kode untuk menghandle eksepsi dan berikutnya melanjutkan
program.
- Class Error
adalah class dasar yang digunakan untuk kondisi error serius yang tidak
terdeteksi. Dalam banyak kasus, Anda harus membiarkan program diterminasi.
- Class RuntimeException
adalah class dasar yang digunakan untuk unchecked exception yang bisa
muncul sebagai akibat dari bug program. Pada banyak kasus, Anda harus
membiarkan program dihentikan.
2.Jenis-jenis
Exception
1. Try – Catch
Untuk penanganan exception, dalam Java digunakan blok try dan catch. Blok
try digunakan untuk menempatkan kode-kode program Java yang mengandung kode
program yang mungkin melemparkan exception. Blok catch digunakan untuk
menempatkan kode-kode program Java yang digunakan untuk menangani sebuah
exception tertentu. Setelah kita tambahkan blok try – catch untuk mengatasi
error yang terjadi, maka program akan menampilkan pesan error bahwa ada error
yang terjadi pada konsol. Sintaks blok try – catch adalah sebagai berikut :
Try
{
… kode program yang mungkin menghasilkan exception
}
Catch
{exception xx}{…}
Catch
{exception xx}{…}
Petunjuk Penulisan Program :
Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait.
Penulisan kode dalam blok mengikuti identasi.
2. Multiple Catch
Untuk multiple catch akan kita gunakan
jika blok try mungkin menimbulkan lebih dari satu exception. Sintaks blok
multiple catch adalah sebagai berikut :
try
{
instruksi-1
instruksi-2
instruksi-3
……… diabaikan
instruksi-n
}
catch(tipe_eksepsi_1 e1)
{
}
catch(tipe_eksepsi_2 e2)
{
}
catch(tipe_eksepsi_3 e3)
{
}
….
catch(tipe_eksepsi_n en)
{
}
instruksi-lain
…….
3. Try – Catch – Finally
Selain try – catch, kita dapat mendefinisikan blok try – catch dan finally
yang memiliki proses yang lebih lengkap, karena pada finally kita dapat
mendefinisikan kode program yang selalu dieksekusi, baik ada exception yang
terjadi maupun bila tidak terjadi exception sama sekali. Bentuk umum dari blok
try-catch-finally adalah sebagai berikut :
Try
{
//tulis pernyataan yang dapat mengakibatkan exception
//dalam blok ini
}
catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
. . .
catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
Finally
{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan
ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut
ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
· Notasi blok bersifat perintah
· Setiap blok try,
terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
· Blok catch dan blok
finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
Pkeduanya.
· Setiap blok catch
mendefinisikan sebuah penanganan exception. Header dari blok catch harus
membawa satu argumen, dimana exception pada blok tersebut akan ditangani.
Exception harus menjadi class pelempar atau satu dari subclassesnya.
· Try-catch yang
menggunakan finally maka keyword finally tersebut fungsinya hampir sama dengan
keyword default pada switch-case.
3.Pengertian (Try,catch,finally,throw)
a.Pengertian Try
Keyword ini biasanya digunakan dalam suatu block program.
keyword ini digunakan untuk mencoba menjalankan block program
kemudian mengenai dimana munculnya kesalahan yang ingin diproses. Keyword
ini juga harus dipasangkan dengan keyword catch atau keyword
finally yang akan dibahas pada point kedua dan ketiga.
Contoh penggunaan :
public class A
{
public static void main(String[] args) {
try
{
int a = 1 / 0; // berpotensi untuk menimbulkan kesalahan yaitu
//
pembagian dengan bilangan 0
System.out.println("perintah
selanjutnya");
}
catch (Exception kesalahan)
{
System.err.println(kesalahan);
}
}
}
|
Output :
java.lang.ArithmeticException: / by zero
Perhatikan contoh diatas, ada beberapa hal penting
yang perlu dilihat. Pertama, block program yag diyakini
menimbulkan kesalahan maka ada di dalam block try and catch.Kedua,
kesalahan yang muncul akan dianggap sebagai object dan ditangkap catch
kemudian di assign ke variable kesalahan dengan tipe Exception.
Ketiga, perintah setelah munculnya kesalahan pada block try tidak
akan dieksekusi.
Pengertian Catch
Blok
catch digunakan sebagai Exception handler, blok ini akan menangkap Exception
yang dilempar di dalam blok try. Blok catch digunakan untuk menspesifikasikan
tipe Exception yang akan ditangani.
Minimal 1 blok try mempunyai 1 blok catch, jadi 1 blok try dapat mempunyai lebih dari 1 blok catch,
hal ini dapat berlaku jika terdapat lebih dari 1 Exception yang akan dilempar didalam blok try.Jika anda sudah melihat contoh try maka secara tidak langsung anda sudah memahami kegunaan dari keyword ini. Dalam java, keyword catch harus dipasangkan dengan try. Kegunaan keyword ini adalah menangkap kesalahan atau bug yang terjadi dalam block try. Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer. Contoh Program :
Minimal 1 blok try mempunyai 1 blok catch, jadi 1 blok try dapat mempunyai lebih dari 1 blok catch,
hal ini dapat berlaku jika terdapat lebih dari 1 Exception yang akan dilempar didalam blok try.Jika anda sudah melihat contoh try maka secara tidak langsung anda sudah memahami kegunaan dari keyword ini. Dalam java, keyword catch harus dipasangkan dengan try. Kegunaan keyword ini adalah menangkap kesalahan atau bug yang terjadi dalam block try. Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer. Contoh Program :
catch(Exception kesalahan)
{
System.out.println(“mohon
maaf, terdapat kesalahan pada program”);
//lakukan
hal lainnya disini
}
|
Keyword catch juga dapat diletakan berulang-ulang
sesuai dengan kebutuhan. Contoh :
public class A
{
public static void main(String[] args) {
try
{
int a = 1/0; //berpotensi untuk menimbulkan
kesalahan
yaitu pembagian dengan bilangan 0 pembagian dengan bilangan 0
System.out.println("perintah
selanjutnya");
}
catch(NullPointerException
e)
{
}
catch(ArrayIndexOutOfBoundsException
e)
{
}
catch(Exception
e)
{
}
}
}
|
Pengertian Finally
Keyword ini merupakan keyword yang menunjukan bahwa block
program tersebut akan selalu dieksekusi meskipun adanya kesalahan yang
muncul atau pun tidak ada. Contoh implementasinya pada program :
public class A
{
public static void main(String[] args) {
try
{
//int
a = 1/0;
}
finally
{
System.out.println("terima
kasih telah menjalankan program");
}
}
}
|
Output Program diatas:
terima kasih telah menjalankan program
Jika saya lakukan modifikasi program diatas
menjadi :
public class A
{
public static void main(String[] args) {
try
{
int a = 1/0;
}
catch (Exception e)
{
System.out.println(“ada
kesalahan yang muncul”);
}
finally
{
System.out.println(“terima
kasih telah menjalankan program”);
}
}
}
|
Output Program :
ada kesalahan yang muncul
terima kasih telah menjalankan program
Perhatikan kedua contoh diatas, block finally
akan selalu dieksekusi meskipun adanya kesalahan atau tidak pada block try.
Berbeda dengan keyword catch keyword finally
hanya dapat diletakan 1 kali setelah keyword try.
Pengertian Throw
Keyword ini digunakan untuk melemparkan suatu bug yang
dibuat secara manual. Contoh program :
public class A
{
public static void main(String[] args) {
try
{
throw new Exception("kesalahan
terjadi");
}
catch(Exception
e)
{
System.out.println(e);
}
}
}
|
Output Program :
java.lang.Exception: kesalahan terjadi
Seperti yang anda lihat pada program diatas, pada keyword
throw new Exception(“kesalahan terjadi”); akan melempar object
bertipe exception yang merupakan subclass dari class
Exception sehingga akan dianggap sebagai suatu kesalahan yang
harus ditangkap oleh keyword catch.
Perhatikan contoh berikut ini :
public class A
{
public static void main(String[] args) {
try
{
throw new B();
//cobalah ganti baris ini dengan à new B();
}
catch(Exception
e)
{
System.out.println(e);
}
}
}
class B extends Exception
{
B()
{
}
public String toString()
{
return “object dengan tipe kelas B”;
}
}
|
Output Program :
object dengan tipe kelas B
Program diatas telah mendefinisikan suatu kelas B mengextends
dari kelas Exception. Ketika kita melakukan throw new B();
maka object dari kelas bertipe B ini akan dianggap kesalahan dan ditangkap oleh
block catch.
4.Perbedaan
Catch dan Finally
A.Catch
Blok
catch digunakan sebagai Exception handler, blok ini akan menangkap Exception
yang dilempar didalam blok try. Blok catch digunakan untuk menspesifikasikan
tipe Exception yang akan ditangani.
B.Finally
Blok finally merupakan optional, boleh
ada atau tidak. Satu blok try catch hanya 1 blok finally.Blok finally diakses
pada urutan terakir dalam blok try catch finally, blok tetap diakses meskipun
ada atau tidak ada Exception.
ada atau tidak ada Exception.
5.Aturan Penggunaan Try, catch , dan throw
Beberapa aturan dalam
membuat blok try-‐catch-‐finally:
• Notasi blok bersifat perintah.
• Setiap blok try terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
• Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
• Blok try harus diikuti oleh paling sedikit satu blok catch atau satu blok finally, atau keduanya.
• Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus
membawa satu argumen, dimana exception pada blok tersebut akan ditangani.
• Notasi blok bersifat perintah.
• Setiap blok try terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
• Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
• Blok try harus diikuti oleh paling sedikit satu blok catch atau satu blok finally, atau keduanya.
• Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus
membawa satu argumen, dimana exception pada blok tersebut akan ditangani.