Modul 10 : Exception Handling - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki
Definisi Exception Handling
Di dalam sebuah pemrograman terdapat beberapa macam error tetapi secara garis besar error tersebut terbagi menjadi dua yaitu error ketika compile time
dan error ketika run time
. Error ketika compile time
sering terjadi karena kesalahan sintaksis sehingga menimbulkan error ketika dieksekusi tetapi error ketika run time
adalah error yang terjadi ketika program telah berjalan. Error ini umumnya terjadi karena hasil pemrosesan input oleh user yang terjadi saat run time
sehingga tidak diketahui ketika compile time
.
Error yang terjadi ketika run time
dan berasal dari input user dapat kita cegah atau atasi menggunakan Exception Handling
. Oleh karena itu secara definisi umum, exception handling
adalah mekanisme dalam pemrograman untuk menangani kesalahan atau error yang terjadi saat program dijalankan. Ambil contoh adalah kode program di bawah ini:
import java.util.Scanner;
public class exception {
public static void main(String[] args) {
Scanner inputan = new Scanner(System.in);
int x = inputan.nextInt();
int y = inputan.nextInt();
System.out.println(x / y);
}
}
Kode program di atas akan menjalankan operasi pembagian dua buah angka tetapi coba ingat kembali, apakah diperbolehkan suatu angka dibagi dengan 0? Yups, pembagian dengan 0 tidak diizinkan di dalam matematika. Namun, bagaimana jika user melakukan input ke dalam variabel y dengan nilai 0? apa yang terjadi pada program? Perhatikan output di bawah ini:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at exception.main(exception.java:8)
Output di atas merupakan output yang diberikan oleh program ketika nilai variabel y diinputkan dengan nilai 0. Bersamaan dengan output itu, program tersebut berhenti berjalan. Oleh karena itu, dengan menggunakan exception handling
kita dapat mengatasi permasalahan tersebut sehingga program tidak berhenti saat bertemu dengan error yang demikian.
Try-Catch
Contoh error di atas tadi dapat kita atasi menggunakan try-catch
. Dengan menggunakan try-catch
maka error yang sebelumnya menyebabkan program berhenti. Contoh penggunannya adalah sebagai berikut:
import java.util.Scanner;
public class exception {
public static void main(String[] args) throws ArithmeticException {
try {
System.out.println(1 / 0);
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("hello world");
}
}
Dengan menggunakan kode di atas output yang akan dihasilkan sebagai berikut:
/ by zero
hello world
Dapat dilihat pada contoh di atas bahwa output hello world
akan dioutputkan meskipun terjadi error pada bagian sebelumnya. Hal tersebut menandakan bahwa program tetap berjalan meskipun terjadi error. Hal tersebutlah yang disebut dengan Exception Handling
.
Finally
Finally
merupakan keyword yang dapat kita gunakan untuk menjalankan suatu statement setelah try-cath terjadi.
Contoh:
import java.util.Scanner;
public class exception {
public static void main(String[] args) throws ArithmeticException {
try {
System.out.println(1 / 0);
} catch (Exception e) {
System.out.println(e.getMessage());
}finally {
System.out.println("hello world");
}
}
}
Pada contoh di atas statement hello world
akan dijalankan setelah proses try-catch
dilakukan terlepas apakah ada error yang terjadi atau tidak.
Throw dan Throws
Selain beberapa keyword di atas terdapat juga keyword throw
dan throws
yang mana memiliki kegunaan masing - masing. Adapun untuk throw adalah keyword yang digunakan untuk melakukan menjalankan exception handling terhadap suatu kondisi yang kita tentukan sendiri. Sebagai contoh seperti berikut:
import java.util.Scanner;
public class exception {
public static void main(String[] args) throws ArithmeticException {
try {
int x = 5;
if(x == 5){
throw new Exception("Error mzzzz!!!");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Ketika dijalankan maka output yang akan diberikan oleh program adalah sebagai berikut:
Error mzzzz!!!
Dapat dilihat dari output di atas bahwa x dengan nilai 5 maka akan dianggap error sehingga catch akan dijalankan. Hal tersebut menunjukkan bahwa throw merupakan keyword yang digunakan untuk menentukkan suatu kondisi sebagai error. Selain throw juga terdapat throws
, berbeda dengan throw tujuan dari throws adalah memberikan informasi bahwa sebuah method memiliki kemungkinan terjadinya error sehingga perlu dilakukan error handling pada pemanggil method. Untuk contoh penggunannya dapat dilihat pada contoh berikut ini:
import java.util.Scanner;
public class exception {
public static void main(String[] args) throws ArithmeticException {
try {
int x = hitung(1,0);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static int hitung(int x, int y) throws ArithmeticException{
return x / y;
}
}
Pada contoh di atas menunjukkan penggunaan throws untuk mengiformasikan bahwa fungsi hitung memiliki kemungkinan error yang terjadi yang mana harus dihandle oleh pemanggil method tersebut yang mana pada contoh di atas telah dihandle menggunakan try-cath
.
Membuat Error
Selain menggunakan error yang sudah disediakan kita juga dapat membuat error kita sendiri mengikuti kebutuhan dari program. Untuk melakukan hal tersebut dapat dilakukan dengan membuat sebuah subclass dari class extends dan mendeklarasikan object classnya. Untuk lebih jelasnnya dapat dilihat pada contoh berikut:
import java.util.Scanner;
class UmurError extends Exception{
UmurError(String Massage){
super(Massage);
}
}
public class exception {
public static void main(String[] args) throws ArithmeticException {
try {
int x = 5;
if(x == 5){
throw new UmurError("Umur tidak boleh lebih dari 5");
}
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
Pada contoh di atas kita membuat sebuah exception baru dengan nama exception UmurError dan pesan "Umur tidak boleh lebih dari 5"
yang mana kita kombinasikan dengan throw yang mengartikan bahwa jika nilai x = 5
maka akan dianggap error dan akan dihandle.