Download - LAPORAN VI.docx
LAPORAN 6EXCEPTION HANDLING
Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berorientasi Objek
Yang Dibimbing oleh Bapak Heru Wahyu Herwanto, S.T., M.Kom
Asisten Praktikum :
M. Angga Gumilang
Jevri T. Ardiansah
Oleh :
GILANG LOVIANINDRA CIPTA
130533608285
S1 PTI 2013 offering A
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
November, 2014
Laporan VI
Exception Handling
A. Tujuan
1. Mahasiswa mengetahui penanganan kesalahan program dengan exception
handling.
2. Mahasiswa mampu menerapkan exception handling.
3. Mahasiswa mampu membedakan penerapan jenis exception handling.
4. Mahasiswa mampu membuat class exception sendiri.
5. Mahasiswa mampu melakukan input data melalui keyboard.
B. Dasar Teori
1. Exception Handling
Exception adalah suatu keadaan yang menyebabkan program hang atau keluar
dari alur normal pada saat program dijalankan. Exception handling merupakan
mekanisme untuk menangkap bug atau kesalahan pada saat program sedang
berjalan.
2. Keyword pada Exception Handling
a. Try
Blok try digunakan untuk menempatkan kode-kode program Java yang
memungkinkan terjadinya exception.
b. Catch
Blok catch digunakan untuk menangkap kesalahan yang terjadi pada
blok try.
c. Finally
Kode program pada blok finally akan selalu dijalankan, tidak peduli
apakah terjadi eksepsi atau tidak.
d. Throw
Keyword throw digunakan untuk melempar exception yang terjadi.
e. Throws
Keyword throws digunakan dalam suatu method atau kelas yang
mungkin menghasilkan suatu kesalahan sehingga perlu ditangkap errornya.
3. Jenis Exception Handling :
Try Catch
Multiple Catch
Try-Catch-Finally
Kesalahan dalam sebuah program sering kali muncul, meskipun program
tersebut dibuat oleh programmer berkemampuan tinggi. Untuk menghindari
pemborosan waktu pada proses pencarian kesalahan, Java menyediakan mekanisme
penanganan exception. Exception adalah singkatan dari Exceptional Events. Menurut
definisi umum, exception adalah kondisi abnormal yang terjadi saat runtime. Runtime
error atau kesalahan-kesalahan yang terjadi pada saat program berjalan diwujudkan
dan exception. Exception dapat dibangkitkan secara otomatis oleh sistem Java
runtime maupun sengaja kita buat melalui pernyataan tertentu untuk tujuan tertentu.
Pada dasarnya, Exception merupakan subkelas dari kelas java.lang.Throwable.
Karena Exception adalah sebuah kelas maka hakikatnya ketika program berjalan dan
muncul sebuah bug atau kesalahan maka bug tersebut dapat dianggap sebuah object.
Sehingga ketika object ini di tampilkan di layar maka java akan secara otomatis
memanggil method toString yang terdapat dalam object bertipe Exception ini. Java
memberikan akses kepada developer untuk mengambil object bug yang terjadi ini
dengan mekanisme yang dikenal Exception Handling. Exception handling merupakan
fasilitas di java yang memberikan flexibilitas kepada developer untuk menangkap bug
atau kesalahan yang terjadi ketika program berjalan
Perhatikan kode program berikut:
public class DivByZero {
public static void main(String args[]) {
int a = 5, b = 0, c;
c = a/b;
System.out.println("c = " + c);
}
}
Kode program di atas, secara sintaks tidak salah. Namun ada kesalahan yang fatal
yaitu: ada pembagian dengan 0. Yaitu a = 5 dibagi b = 0. Kesalahan seperti ini sering
terjadi karena memang tidak terlihat bila kita tidak cermat. Apabila kita kompilasi
kode program tersebut, maka kompilasi akan berlangsung sukses. Namun bila kita
jalankan, kita tidak akan mendapatkan hasil tetapi program akan menampilkan pesan
terjadinya exception atau kondisi tidak normal dan program berhenti.
Beberapa tipe exception yang umum antara lain:
ArithmeticException. Exception karena kesalahan yang ada hubungannya
dengan perhitungan, misalnya: pembagian dengan 0.
ArrayIndexOutOfBoundException. Exception karena membaca indeks
array diluar batas yang ditetapkan.
NullPointerException. Kesalahan karena pointer yang tidak berisi (null)
Dan lain-lain
Try digunakan untuk membuat blok yang berisi pernyataan-pernyataan yang mungkin
menimbulkan exception. Apabila dalam proses eksekusi pernyataan-pernyataan pada blok
tersebut terjadi exception, maka exception akan dilempar ke bagian blok penangkap
exception yang dibuat dengan kata kunci catch. Perhatikan contoh berikut ini.
Contoh 8.15. Exception dengan try-catch.
public class DivByZero {
public static void main(String args[]) {
int a = 5, b = 0, c;
try {
c = a/b;
} catch (ArithmeticException exc) {
//Reaksi jika terjadi exception
System.out.println(exc);
}
System.out.println("Setelah exception");
}
}
Kode program pada contoh 8.15 ini adalah pengembangan dari kode program
sebelumnya. Pernyataan c = a/b merupakan pernyataan yang kita uji apakah mengandung
exception atau tidak. Jika terjadi exception maka exception akan dilempar ke bagian
catch. Exception yang kita periksa adalah ArithmeticException. Reaksi yang muncul jika
terjadi exception adalah menjalankan pernyataan System.out.println(exc);. Dengan
mekanisme seperti ini maka program tidak akan dipaksa berhenti, dan perintah setelah
blok try-catch tetap bisa dijalankan. Gambar 8.9. menunjukkan hasil eksekusi kode
program di atas. Bandingkan dengan gambar 8.8.
Umumnya exception pada satu masalah tidak hanya satu. Pada contoh 8.16 berikut ini,
kita menggunakan beberapa
tipe exception untuk memeriksa kemungkinan terjadi exception. Ketik kode program
berikut kemudian jalankan dan amati apa yang terjadi.
Contoh 8.16. Exception dengan try-catch.
class BanyakEksepsi {
public static void test(int a, int b) {
try {
int c = a / b;
System.out.println("Hasil bagi: " + c);
int[] Arr = {1,2,3,4,5}; // array dengan 5 elemen
Arr[10] = 11; // mengakses indeks ke-10
} catch (ArithmeticException ae) {
System.out.println("Terdapat pembagian dengan 0");
System.out.println(ae);
} catch (ArrayIndexOutOfBoundsException oobe) {
System.out.println("Indeks di luar rentang");
System.out.println(oobe);
}
}
public static void main(String[] args) {
test(4, 0); // menimbulkan ArithmeticException
System.out.println();
test(12, 4); // menimbulkan
ArrayIndexOutOfBoundsException
}
}
Disamping menangkap exception, Java juga mengijinkan seorang user untuk melempar
(throw) sebuah exception. Perhatikan contoh 8.17 berikut ini.
Contoh 8.17. Exception dengan try-catch dan throw.
class ThrowDemo {
public static void main(String args[]){
String input = "Salah input";
try {
if (input.equals("Salah input")) {
throw new
RuntimeException("Demonstrasi Throw");
} else {
System.out.println(input);
}
System.out.println("Setelah throw");
} catch (RuntimeException e) {
System.out.println("Exception
ditangkap di sini.");
System.out.println(e);
}
}
}
Perhatikan pada pernyataan yang dimulai dari perintah if. Kalau diartikan, pernyataan
tersebut adalah: jika nilai variabel input sama dengan "Salah input", maka lemparkan
exception dengan menampilkan "Demonstrasi Throw". Output dari kode program ini
akan tampak seperti pada gambar 8.10.
Blok finally mengandung kode penanganan setelah penggunaan try dan catch. Blok kode
ini selalu tereksekusi apapun yang terjadi pada blok try. Blok kode tersebut juga akan
menghasilkan nilai true meskipun return, continue, ataupun break tereksekusi. Perhatikan
kode program berikut.
Contoh 8.18. Exception dengan try-catch-finally.
class DemoFinally {
private static int i = 0;
public static void main(String[] args) {
while (true) {
try {
System.out.print("Pada saat i = " + i + ": ");
if (i++ == 0) {
throw new Exception(); // melempar exception
}
System.out.println("Tidak terjadi exception");
} catch (Exception e) {
System.out.println("Terdapat exception");
} finally {
System.out.println("Pernyataan dalam blok
finally\n");
if (i == 2) {
break; // pada saat i==2, pengulangan akan
berhenti
}
}
}
}
}
Bila kode program dijalankan maka akan tampak seperti pada gambar 8.11. Perhatikan,
bahwa apa yang ada pada blok kode finally akan selalu dijalankan.
Ada 5 keyword penting dalam java dalam hal exception handling :
1. 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);
}
}
}
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.
2. catch
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
System.out.println("perintah selanjutnya");
}
catch(NullPointerException e)
{
}
catch(ArrayIndexOutOfBoundsException e)
{
}
catch(Exception e)
{
}
}
}
3. 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.
4. 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);
}
}
}
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”;
}
}
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. Sekarang jika anda
menghilangkan keyword throw apa yang terjadi?.
5. throws
Keyword throws digunakan dalam suatu method atau kelas yang mungkin
menghasilkan suatu kesalahan sehingga perlu ditangkap errornya. Cara
mendefinisikannya dalam method adalah sebagai berikut : <method modifier> type
method-name throws exception-list1, exceptio-list2, … {}.
Contoh Program :
public class A
{
public static void main(String[] args) {
try
{
f();
}
catch(Exception e)
{
System.out.println(e);
}
}
public static void f() throws NullPointerException,
ArrayIndexOutOfBoundsException
{
//implementasi method
throw new NullPointerException();
//throw new ArrayIndexOutOfBoundsException();
}
}
java.lang.NullPointerException
Contoh program lainnya :
public class A
{
public static void main(String[] args) {
try
{
f();
}
catch(Exception e)
{
System.out.println(e);
}
}
public static void f() throws NullPointerException,
ArrayIndexOutOfBoundsException
{
//implementasi method
//throw new NullPointerException();
throw new ArrayIndexOutOfBoundsException();
}
}
java.lang.ArrayIndexOutOfBoundsException
Perhatikan kedua contoh pengguaan keyword throws pada method. Ketika method
tersebut dipanggil dalam block try. Maka method tersebut akan membuat object yang
merupakan subclass dari class Throwable dan method tersebut akan melemparkan
kesalahan yang ada dalam block method kedalam block try. Di dalam block try,
kesalahan tersebut kemudian ditangkap kedalam block catch.
Melakukan Input
Dalam JAVA input console dilakukan melalui pembacaan terhadap stream System.in.
untuk mendapatkan karakter-karakter yang dimasukkan melalui keyboard ke dalam
layar console, kita perlu membungkus System.in di dalam objek BufferedReader.
Bentuk constructor dari BufferedReader :
BufferedReader(Reader inputReader)
Agar objek dari inputStreamReader dapat dihubungkan dengan System.in, kita perlu
menggunakan konstruktor
InputStreamReader(InputStream inputStream)
Dengan demikian, untuk membuat objek BufferedReader yang dapat terhubung
dengan keyboard, kita perlu menggunakan kode
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
Atau
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
1. Membuat input berupa karakter
Untuk membaca input berupa karakter menggunakan method read( )
Method read mengembalikan nilai bertipe int, sehingga untuk menjadikannya sebagai
karakter, kita perlu melakukan typecasting ke tipe char.
2. Mwmbaca input string
Untuk melakukan input berupa string kita harus menggunakan method readLine(), bukan
read()
3. Membaca input data numerik
Untuk melakukan input data numerik cara yang perlu dilakukan sama seperti input data
string, selanjutnya string hasil input tersebut dikonversi ke tipe numerik.
Contoh program membaca input data integer :
Contoh program membaca input data double :
Penj
C. Latihan
LATIHAN
1. Latihan 1. Tanpa Exception Handling
DivByZero.java
a. Output program adalah
b. Ciri-ciri program yang tidak menggunakan exception handling :
Penjelasan program
Program diatas untuk menampilkan program java yang tidak menggunakan exception
handling. Output akan error karena terjadi kesalahan dalam program di atas.
class DivByZero{
public static void main(String args[]){
System.out.println(5/0);
System.out.println("ini adalah program ");
}
}
Pada script System.out.println(“ini adalah program ”); tidak dijalankan
karena terjadi kesalahan pada 5/0, karena kesalahan itulah eksekusi akan
dihentikan.
2. Latihan 2. Dengan Exception Handling
DivByZeroWithEx.java
a. Output program
Penjelasan program :
Program di atas menggunakan Exception Handling. Program menggunakan tipe
exception ArithmeticException dimana akan error karena kesalahan aritmatika
seperti pembagian dengan nol (5/0).
class DivByZeroWithEx{
public static void main(String args[]){
try{
System.out.println(5/0);
System.out.println("Keluaran program ");
}
catch(ArithmeticException exc){
//dibagi dengan 0 --> AritmethicException
System.out.println("Exception yang
ditangkap : "+exc);
}
System.out.println("Setelah Exception...");
}
}
3. Latihan 3. Multiple Catch
Multiplecatch.java
a. Output program :
public class multiplecatch{
public static void main(String[]args){
try
{
int a=3/0; //berpotensi utuk menimbulkan kesalahan
int num=Integer.parseInt(args[0]);
System.out.println("Perintah selanjutnya.....");
}
catch(ArrayIndexOutOfBoundsException e){
}
catch(NullPointerException e){
}
catch(Exception e){
}
}
}
b. Ketika melakukan running program, tambahlah argument berupa String Nama
kota kelahiran anda!
Output program :
public class lahir
{
public static void main (String [] args) {
try {
int a=3/0;
int num = Integer.parseInt
("Pasuruan");
System.out.println("perintah
selanjutnya..");
}
catch(ArrayIndexOutOfBoundsException e){
}
catch (NullPointerException e) {
}
catch (Exception e){
}
}
}
c. Ketika melakukan running program, tambahlah argument berupa Angka Nol!
Output program
public class angkaNol{
public static void main(String[] args) {
try{
int num = Integer.parseInt("0");int a = 3/0;
System.out.println("perintah selanjutnya...");
}catch(NullPointerException e){
System.out.println("EROR1 " + e);}catch(ArrayIndexOutOfBoundsException e){
System.out.println("EROR2 " + e);} catch(Exception e){
//System.out.println("EROR3 " + e);}
}}
d. Bagaimana dengan running program tanpa argument.
Output program
e. Apakah pada multiple catch “catch(Exception e)” selalu diletakkan di akhir?
Jelaskan!
Penjelasan program :
public class tanpaArgumen{public static void main(String[] args) {try{int num = Integer.parseInt();int a = 3/0;System.out.println("perintah selanjutnya");}
catch(NullPointerException e){System.out.println("EROR1 " + e);}
catch(ArrayIndexOutOfBoundsException e){System.out.println("EROR2 " + e);
}catch(Exception e){System.out.println("EROR3 " + e);}
}}
Iya selalu, karena catch itu keyword pada pilihan yamg paling akhir jika
pada catch sebelumnya tidak ada yang memenuhinya, jadi akan ditaruh
pada akhir program.
Program diatas menggunakan tipe Exception, ArrayIndexOutOfBoundsException
dimana indeks array keluar dari batas.
4. Latihan 4. Try-Catch-Finally
a. Output program :
public class TCF
{
public TCF(){
}
public static void main(String args[])
{
int nol = 0 ;
int angka = 10;
try {
int hasil = angka/nol;
System.out.println("Hasil = "+hasil);
}
catch (ArithmeticException e)
{
System.out.println("terjadi pembagian dgn
nol.Exception ditangkap");
}
finally{
System.out.println("kalimat di blok
finally");
}
System.out.println("Kalimat diluar blok try-catch-
finally");
}
}
b. Analisis Exception Handling dengan menggunakan Try-Catch-Finally!
c. Bagaimana perbedaan dengan jenis Exception Handling yang lainnya?
Exception handling dengan menggunakan try-catch-finally adalah salah satu
penanganan eksepsi yang jika blok try mengalami eksepsi maka blok catch
akan dijalankan dan blok finally juga akan dijalankan. Sedangkan jika blok
try tidak mengalami eksepsi maka blok catch tidak akan dijalankan dan blok
finally akan tetap dijalankan. Blok finally mengandung kode penanganan
setelah penggunaan try dan catch. Blok kode ini selalu tereksekusi apapun
yang terjadi pada blok try. Blok kode tersebut juga akan menghasilkan nilai
true meskipun return, continue, ataupun break tereksekusi.
Perbedaan dengan jenis exception handling
- try-catch
Menangani kesalahan tetapi ada bagian yang tidak dieksekusi atau
dijalankan.
- multiple-catch
Mengakibatkan lebih dari satu jenis eksepsi.
- try-catch-finally
Mengakibatkan semua pernyataan yang ada didalam program dieksekusi
atau dijalankan.
5. Latihan 5. Melempar exception
Keyword throw
Di samping menangkap exception, Java juga mengijinkan seorang user
untuk melempar sebuah exception. Sintaks pelemparan exception cukup
sederhana.
Throw <exception object>;
Contoh program 1 :
Output program
class ThrowDemo{
public static void main(String []args){
String input="invalid input";
try{
if(input.equals("invalid input")){
throw new RuntimeException("throw demo");
}else{
System.out.println(input);
}
System.out.println("After throwing");
}
catch(RuntimeException e){
System.out.println("Exception caught here.");
System.out.println(e);
}
}
}
Program 2 :
class DataMhs{
private String nim;
private String nama;
private double nilai;
public void setNim(String vnim){
try{
nim=vnim;
if(nim==null){
throw new NullPointerException();
}
}catch (NullPointerException npe){
System.out.println("KEASALAHAN: "+"Nim
mahasiswa tidak boleh null");
}
}
public String getNim(){
return nim;
}
public void setNama(String vNama){
try{
nama=vNama;
if(nama==null){
throw new NullPointerException();
}
}catch(NullPointerException npe){
System.out.println("KEASALAHAN: "+"Nama
mahasiswa tidak boleh null");
}
}
public String getNama(){
return nama;
}
public void setNilai(int vnilai){
nilai=vnilai;
}
public double getNilai(){
return nilai;
}
}
Output program
Penjelasan program:
Program diatas menggunakan Keyword throw dimana di samping menangkap
exception, Java juga mengijinkan seorang user untuk melempar sebuah exception.
Sintaks pelemparan exception cukup sederhana.
class DemoThrow{
public static void main(String[]args){
DataMhs obj=new DataMhs();
obj.setNim("130533608285");
obj.setNama("gilang lovi");
obj.setNilai(100);
System.out.println("NIM : "+obj.getNim());
System.out.println("Nama : "+obj.getNama());
System.out.println("NIlai: "+obj.getNilai());
}
}
Keyword Throws
Jika sebuah method dapat menyebabkan sebuah exception namun tidak
menangkapnya, maka digunakan keyword throws.
Berikut ini penulisan syntax menggunakan keyword throws :
<type> <methodName> (<parameterList>) throws
<exceptionList> {
<methodBody>
}
Contoh program :
public class DemoThrows2 {
public static void uji(int angka)
throws NullPointerException, ArithmeticException {
if (angka < 0) {
throw new NullPointerException("KESALAHAN: null pointer exception");
} else {
throw new ArithmeticException("KESALAHAN: arithmetic exception");
}
}
public static void main(String[] args) {
try {
//uji(-12); // menimbulkan eksepsi NullPointerException
uji(0); // menimbulkan eksepsi ArithmeticException
} catch (Exception e) {
System.out.println("Eksepsi ditangkap di sini...");
System.out.println(e.getMessage());
}
System.out.println("Statemen setelah blok try-catch");
}
}
Output program
6. Latihan 6. Membuat eksepsi sendiri
NegativeNumberException.java
class NegativeNumberException extends Exception {
private int bilangan;
// default constructor
NegativeNumberException() {
}
// constructor dengan parameter bertipe String
NegativeNumberException(String pesan) {
super(pesan);
}
// constructor dengan parameter bertipe String dan int
NegativeNumberException(String pesan, int nilai) {
super(pesan);
bilangan = nilai;
}
public int getBilangan() {
return bilangan;
}
}
DemoMembuatEksepsi3.java
class DemoMembuatEksepsi3 {
public static int hitungFaktorial(int n)
throws NegativeNumberException {
if (n < 0) {
throw new
NegativeNumberException("Bilangan tidak boleh negatif",
n);
}
int hasil = 1;
for (int i=n; i>=1; i--) {
hasil *= i;
}
return hasil;
}
public static void main(String[] args) {
System.out.println("Pada saat menghitung 5!");
try {
System.out.println("Hasil = " +
hitungFaktorial(5));
} catch (NegativeNumberException nne) {
System.out.println("Bilangan : " +
nne.getBilangan());
//nne.printStackTrace();
}
System.out.println("\nPada saat menghitung -
5!");
try {
System.out.println("Hasil = "
+hitungFaktorial(-5));
} catch (NegativeNumberException nne) {
System.out.println("Bilangan : " +
nne.getBilangan());
nne.printStackTrace();
}
}
}
Output program
Penjelasan program:
Program diatas menggunakan Keyword Throws Jika sebuah method dapat
menyebabkan sebuah exception namun tidak menangkapnya, maka digunakan
keyword throws.
MELAKUKAN INPUT
Dalam JAVA input console dilakukan melalui pembacaan terhadap stream System.in.
untuk mendapatkan karakter-karakter yang dimasukkan melalui keyboard ke dalam
layar console, kita perlu membungkus System.in di dalam objek BufferedReader.
Bentuk constructor dari BufferedReader :
BufferedReader(Reader inputReader)
Agar objek dari inputStreamReader dapat dihubungkan dengan System.in, kita perlu
menggunakan konstruktor
InputStreamReader(InputStream inputStream)
Dengan demikian, untuk membuat objek BufferedReader yang dapat terhubung
dengan keyboard, kita perlu menggunakan kode
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
Atau
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
1. Membaca input berupa karakter
Untuk membaca input berupa karakter menggunakan method read( )
Method read mengembalikan nilai bertipe int, sehingga untuk menjadikannya sebagai
karakter, kita perlu melakukan typecasting ke tipe char.
2. Membaca Input Data String
Untuk melakukan input berupa string kita harus menggunakan method readLine(),
bukan read()
3. Membaca Input Data Numerik
Untuk melakukan input data numerik cara yang perlu dilakukan sama seperti input
data string, selanjutnya string hasil input tersebut dikonversi ke tipe numerik.
Contoh program membaca input data integer :
Contoh program membaca input data double :
D. Tugas Praktikum
Buatlah sebuah program yang menerapkan pembuatan kelas eksepsi sendiri.
Kemudian uji kelas tersebut dengan membuat kelas Uji Eksepsi yang menggunakan
inputan!
eksepsi.java
class eksepsi {
void salah(){
int array[] = new int[2];
array [345] = 56;
}
}
uji.java
public class uji extends eksepsi {
public static void main (String[] args){
eksepsi a = new eksepsi();
try {
int num = Integer.parseInt(args [0]);
a.salah();
} catch(NullPointerException e){
System.err.println("NullPointerException");
} catch(ArrayIndexOutOfBoundsException e){
System.err.println("ArrayIndexOutOfBoundsException");
} catch(RuntimeException e){
System.err.println("RuntimeException");
} catch(Exception e){
System.err.println("Exception");
} catch(Throwable e){
System.err.println("Throwable");
}
}
}
Output program
Penjelasan program
Program di atas menggunakan pembuatan kelas eksepsi dan kemudian untuk
mengujinya mengunakan kelas uji yang menggunakan inputan.
E. Tugas Rumah
Buat program exception handling sendiri dengan spesifikasi :
1. Menggunakan jenis exception handling multiple catch
2. Minimal 3 multiple catch
3. Selain program DivByZero dan Hello World
TugasRumah.java
Output program
public class TugasRumah{
public static void main(String[] arg){
try {
int num = Integer.parseInt(arg [0]);
String s= null;
s.length();
} catch(ArrayIndexOutOfBoundsException e){
System.err.println("ArrayIndexOutOfBoundsException");
} catch(ArithmeticException e){
System.err.println("ArithmeticException");
} catch(NullPointerException e){
System.err.println("NullPointerException");
} catch(RuntimeException e){
System.err.println("RuntimeException");
} catch(Exception e){
System.err.println("Exception");
} catch(Throwable e){
System.err.println("Throwable");
}
}
}
F. Kesimpulan
Exception mengetahui kesalahan untuk mengatasi error suatu program.Kadang
kala kita perlu mendefenisian program dengan exception yang lebih spesifik untuk
keperluan tertentu, supaya penanganan exception dengan lebih baik. Exception
handling merupakan mekanisme untuk menangkap bug atau kesalahan pada saat
program sedang berjalan.
Keyword pada Exception Handling yaitu try, catch, finally, throw, dan throws.
Jenis Exception Handling :
1. Try Catch
2. Multiple Catch
3. Try-Catch-Finally
Tipe exception yang umum antara lain:
1. ArithmeticException Kesalahan aritmetika, seperti pembagian dengan nol.
2. ArrayIndexOutOfBoundsException Indeks array keluar dari batas.
3. ArrayStoreException Menunjuk ke sebuah elemen array yang tipenya tidak
kompatibel.
4. IllegalArgumentException Argument tidak sah digunakan untuk memanggil
sebuah argument.
5. IndexOutOfBoundsException Beberapa tipe indeks keluar dari batas
6. NegativeArraySizeException Array dibuat dengan ukuran negative
7. NullPointerException Invalid use of a null reference.
8. NumberFormatException Konversi tidak sah dari string kesebuah format
numeric.
9. ClassNotFoundException Class tidak ditemukan.
10. CloneNotSupportedException Berusaha untuk mengklonig sebuahobjek yang
tidak menerapkan
G. Daftar Rujukan
1. Tim Dosen S1 Pendidikan Teknik Elektro TE UM.2013. Modul 6. Exception
Handling
2. https://www.academia.edu/3647973/
Laporan_Job_4_Exception_Handling_11_Maret
3. http://autsi.blogspot.com/2011/12/hirarki-class-exception.html