pbo - week 11 - exception handling
DESCRIPTION
englishTRANSCRIPT
-
5/21/2018 PBO - Week 11 - Exception Handling
1/10
1
EXCEPTION HANDLING
Exception Handling dapat dianggap sebagai Struktur Kendali Non-Lokal
Bug : kesalahan yang merupakan kelemahan dari perancangan atau implementasi
Exception : kesalahan yang dihasilkan oleh kondisi sistem /lingkungan kondisi abnormal (sesuatu diluar yang biasanya) yang muncul di sekuen (urutan) kode
saat jalan run-time error
Exception menyediakan pembangkitan kesalahan serta cara menanganinya. Struktur kendali ini
memungkinkan kita menspesifikasikan dimana kita dapat menangani suatu tipe kesalahan secara
pasti.Exception menyediakan sarana mengkomunikasikan informasi kesalahan lewat suatu rantai
metode, sampai terdapat satu metode yang menanganinya.
Exception di Java merupakan subkelas dari kelas java.lang.Throwable.Exception adalah objek, maka memil ik i data dan metode.
KATA KUNCI untuk Exception Handling :a) tryb) catchc) throwd) throwse) finally
Ringkasan kerja :
1. program yang hendak dimonitor untuk exceptionnya dimuat dalam try2. jika exception terjadi didalam blok try, exception itu dilemparkan3. kode dapat menangkap (catch) exception menggunakan catchdan menangani dengan suatu
cara yang rasional
4. exception yang dibangkitkan sistem secara otomatis dilempar oleh sistem Java, sedangkanuntuk exception yang dilemparkan secara manual maka digunakan keyword throw.
5. exception yang dilempar oleh metode harus di spesifikasikan dengan klausa throws.6. Sembarang kode yang secara absolut harus dieksekusi sebelum metode keluar diletakkan di
blok finally.
JENIS EKSEPSI
Exception dapat dibangkitkan oleh Java run-time system atau dibangitkan secara manual olehkode program :
A. Exception yang dil empar Java run-time systemberhubungan dengan kesalahan-kesalahan fundamental yang melanggar aturan-aturan bahasa Java atau batasan-batasanlingkungan eksekusi Java
B. Exception yang dihasil kan secara manual, umunya digunakan untuk melaporkan kondisikesalahan ke pemanggil metode
-
5/21/2018 PBO - Week 11 - Exception Handling
2/10
2
EXCEPTION TIDAK TERTANGKAP
public class DivByZeroToy {
/** Creates a new instance of DivByZeroToy */
public DivByZeroToy() {}
public static void main (String args[]) {int zeroInt = 0;int anInt = 10;int divResult = anInt / zeroInt;
}}
Hasil :
java.lang.ArithmeticException: / by zeroat DivByZeroToy.main(DivByZeroToy.java:10)Exception in thread "main"
Tahap-tahap kejadian :
1. ketika sistem Java mendeteksi usaha membagi dengan nol, maka sistem membangunobjek Exeption baru, dan kemudian melemparkan Exception.
2. aksi ini menyebabkan eksekusi DivByZeroToy berhenti, karena begitu satu Exceptiondileparkan, maka Exception harus ditangkap oleh penanganan Exception yang harussegera menanganinya.
3. karena tidak ada penanganan Exception, maka Exception ditangkap oleh penanganansistem Java.
sembarang Exception yang tidak ditangkap oleh kode program akan ditangkap oleh penanganan
default. penanganan Exception menampilkan String yang mendeskripsikan Exception mencetak jejak stack dari saat dimana Exception terjadi mengakhiri program
try dan catch
Untuk menanggapi exception, pemanggilan terhadap metode yang menghasilkan Exception harusditempatkan di dalam blok try.blok tryadalah blok kode yang dimulai kata kunci try diapit pasangan kurung kurawal { }.
setiap blok try diasosiasikan dengan satu blok catch atau lebih.
Jika metode dimaksudkan untuk menangkap Exception yang dilempar oleh metode yang
dipanggil, maka pemanggilan harus ditempatkan di blok try.
blok-blok catchmenangani tipe exception berbeda yang dilempar.
Kalimat try dan catch membentuk satu unit.
blok catch tidak dapat menangkap Exception yang dilempar kalimat try yang lain
tujuan dari klausa catch seharusnya mampu menyelesaikan kondisi kekecualian dan kemudianmelanjutkan seolah-olah kesalahan tidak pernah terjadi.
Manfaat penanganan Exception sendiri : memungkinkan untuk peniadaan kesalahan mencegah program dihentikan oleh system Java secara otomatis dapat memberikan tambahan informasi yang berguna untuk pemakai aplikasi atau untuk
kegiatan debugging
-
5/21/2018 PBO - Week 11 - Exception Handling
3/10
3
Metode dapat mempunyai blok untuk menangkap beberapa tipe Exception sekaligus.
Java mendukung banyak blok catch.
masing-masing blok catch harus menspesifikasikan tipe Exception yang berbeda.
public class BanyakCatch
{ public BanyakCatch(){}
public static void main(String args[]){
int anInt = 10;try{
int divBy = args.length;
int divResult = anInt / divBy;
System.out.println("Hasilnya adalah : " + divResult);int c[]={1};c[10]=100;
}catch (ArithmeticException e){
System.out.println("Terjadi pembagian dengan nol");System.out.println("Diatasi blok penanganan A");
}
catch (ArrayIndexOutOfBoundsException e){System.out.println("Terjadi Indeks Array diluar batas");
System.out.println("Diatasi blok penanganan B");}System.out.println("Kalimat Setelah Catch");
}}
Hasil :Terjadi pembagian dengan nolDiatasi blok penanganan AKalimat Setelah Catch
-
5/21/2018 PBO - Week 11 - Exception Handling
4/10
4
finally
Java menyediakan klausa finally untuk menandai blok itu selalu dieksekusi.
Pada situasi normal (tidak ada Exception yang dilempar), blok finally di eksekusi segera setelah
blok try.
Ketika Exception dilempar, blok finally dieksekusi setelah blok catch yang menangani Exceptiondilakukan.
public class BanyakCatch2{
public BanyakCatch2(){}
public static void main(String args[]){
int anInt = 10;try{
int divBy = args.length;int divResult = anInt / divBy;
System.out.println("Hasilnya adalah : " + divResult);int c[]={1};c[10]=100;
}catch (ArithmeticException e)
{System.out.println("Terjadi pembagian dengan nol");System.out.println("Diatasi blok penanganan A");
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi Indeks Array diluar batas");System.out.println("Diatasi blok penanganan B");
}finally
{System.out.println("FINALLY");
}
}}
Hasil :Terjadi pembagian dengan nolDiatasi blok penanganan AFINALLY
-
5/21/2018 PBO - Week 11 - Exception Handling
5/10
5
Java Built-in Exception
Java mendefinisikan beberapa Exception yang akan dilempar sistem Java secara otomatis.
Exception ini tidak usah didaftarkan di daftar Exception di klausa throws.
kebanyakan Exception ini adalah subkelas RuntimeException.
di Java, Exception- exception ini disebut sebagai Unchecked Exception(Exception yang tidakdiperiksa), karena kompilator Java tidak memeriksa apakah metode menangani atau melempar
Exception ini.
Hirarki Exception yang terdapat di java.lang :
OBJECT
Throwable Exception
sub kelas dari Throwable
Superkelas dari dari semua Exception
ClassNotFoundException CloneNotSupportedException IllegalAccessException InstantiationException InterruptedException NoSuchMethodException NoSuchFieldException RunTimeException
1. ArithmeticException (U)2. ArrayStoreException (U)3. ClassCastException (U)
4. IllegalArgumentException (U)a) IllegalThreadStateException (U)b) NumberFormatException (U)
5. IllegalStateException (U)6. IllegalMonitorStateException (U)7. IndexoutOfBoundsException (U)
c) ArrayIndexoutOfBoundsException (U)d) StringIndexoutOfBoundsException (U)
8. NegativeArraySizeException (U)9. NullPointerException (U)10.SecurityException (U)
Keterangan :
U = Unchecked Exception
-
5/21/2018 PBO - Week 11 - Exception Handling
6/10
6
throw & throws
a. throw
kata kunci throw digunakan di program untuk melempar (throw) terhadap Exception secara
eksplisit.throw ThrowableInstance
ThrowableInstance harus merupakan objek dengan tipe Throwable atau subkelas dari
Throwable.terdapat dua cara kita memperoleh objek Throwable :
1. menggunakanparameterdi klausa catch2. menciptakan salah satudengan menggunakan operator new
Eksekusi program akan dihentikan segera setelah kalimat throw
kalimat-kalimat setelah kalimat throw tidak dieksekusi
Java akan melakukan inspeksi blok try terdekat untuk menemukan kalimat catch yang cocokdengan tipe Exception yang dilempar
jika Java menemukannya, maka kendali program ditransfer ke kalimat catch itu
jika tidak ditemukan, maka Java akan melakukan penelusuran ke blok try berikutnya sampai kepuncak stack
dan bila tetap tidak ditemukan, maka penanganan Exception secara default akan melaksanakan
tugasnya :a. menghentikan programb. mencetak jejak penelusuran stack
public class ThrowToy {
public ThrowToy() {}
static void throwException() throwsException{try {
thrownew Exception("Demo terhadap kalimat throw");} catch (Exception e) {
System.out.println("Penangkapan exception di test");throwe;// Exception kembali dilemparkan}
}}
static void test(){try {
throwException();}catch (Exception e) {
//menangkap exceptionSystem.out.println("Kembali ditangkap exception: " + e);}
}
public static void main (String args[]) {test();
}}Hasil :Penangkapan exception di testKembali ditangkap exception: java.lang.Exception: Demo terhadap kalimat
-
5/21/2018 PBO - Week 11 - Exception Handling
7/10
7
b. throws
Klausa Throws mendaftarkan tipe-tipe Exceptionyang dapat dilempar metode
hal ini diperlukan agar diketahui semua Exception yang mungkin dilempar metode atau subkelas-
subkelasnya
semua Exception yang hendak dilempar metode harus dideklarasikan di klausa throwsjika metode melemparkan Exception yang tidak didelarasikan di deklarasi metode, maka
kompilator akan memberikan pesan kesalahan.
type method-name throwsexception-list
{
//badan metode}
exception-list adalah daftar exception yang dipisahkan dengan koma, yang berisi daftarException yang dapat dilempar metode
public class ThrowsToy {
public ThrowsToy() {}
static void throwsException() throws IllegalAccessException{System.out.println("Di dalam throwsException.");thrownew IllegalAccessException("Exception di throwsException");
}
public static void main (String args[]) {try {throwsException();}catch (IllegalAccessException e) {
//menangkap exceptionSystem.out.println("Ditangkap exception: " + e);
}}
}
Hasil :Di dalam throwsException.
Ditangkap exception: java.lang.IllegalAccessException: Exception di throwsException
di dalam metode main() harus didefinisikan kalimat try / catchyang menangkap Exception yang
dikirim metode throwsException.
bila kita tidak mendefinisikan, maka kompilator akan menyatakan terdapat kesalahan
dengan menggunakan throws di deklarasi metode dan throwdi dalam metode untuk
melemparkan Exception yang muncul di metode, maka kita akan dapat memaksakan metodepemanggil untuk menangani Exception yang dilemparkan padanya.
-
5/21/2018 PBO - Week 11 - Exception Handling
8/10
8
public class ThermometerNextNextToy {
private double valueInCelcius;
/** Creates a new instance of ThermometerSmartToy */
public ThermometerNextNextToy() {
valueInCelcius = 0;}
public ThermometerNextNextToy(double newValue) throws Exception{valueInCelcius = newValue;
if (valueInCelcius < -272.0) {
Exception E = new Exception("Tidak boleh kurang dari -272 Derajat Celcius");throw (E);
}
}
// Accessing operationspublic void setInCelcius (double newValue) throws Exception{
valueInCelcius = newValue;if (valueInCelcius < -272.0) {
Exception E = new Exception("Tidak boleh kurang dari -272 Derajat Celcius");
throw (E);}
}
public void setInReamur (double newValue) throws Exception{
valueInCelcius = (5/4) * newValue;
if (valueInCelcius < -272.0) {Exception E = new Exception("Tidak boleh kurang dari -272 Derajat Celcius");
throw (E);
}
}
public void setInFahrenheit (double newValue) throws Exception {
valueInCelcius = (5/9) * (newValue - 32);if (valueInCelcius < -272.0) {
Exception E = new Exception("Tidak boleh kurang dari -272 Derajat Celcius");
throw (E);}
}
public void setInKelvin (double newValue) throws Exception {valueInCelcius = newValue - 272;
if (valueInCelcius < -272.0) {
Exception E = new Exception("Tidak boleh kurang dari -272 Derajat Celcius");throw (E);
}
}
public double getInCelcius () {
return valueInCelcius;
}
public double getInReamur () {
return ((4/5) * valueInCelcius);}
-
5/21/2018 PBO - Week 11 - Exception Handling
9/10
9
public double getInFahrenheit () {
return (((9/5) * valueInCelcius) + 32);
}
public double getInKelvin () {
return (valueInCelcius + 272);}
static void test(){ThermometerNextNextToy t;
System.out.println("Pengujian");System.out.println("Aplikasi Thermometer");
System.out.println("Nilai Celcius Yang Dimasukkan adalah 50");
System.out.println("Dengan Penanganan Kondisi Pemasukan Nilai Tak Absah");System.out.println("Memanfaatkan Structured Exception Handling");
System.out.println("===================================================");
try {
t = new ThermometerNextNextToy(0.0);
System.out.println("Nilai di Celcius : "+t.getInCelcius());
System.out.println("Nilai di Reamur : "+t.getInReamur());
System.out.println("Nilai di Fahrenheit : "+t.getInFahrenheit());System.out.println("Nilai di Kelvin : "+t.getInKelvin());
try {t.setInCelcius(50.0);
System.out.println("Nilai di Celcius : "+t.getInCelcius());
System.out.println("Nilai di Reamur : "+t.getInReamur());System.out.println("Nilai di Fahrenheit : "+t.getInFahrenheit());
System.out.println("Nilai di Kelvin : "+t.getInKelvin());
} catch (Exception e) {
System.out.println ("Exception : " + e.getMessage());
}
try {
t.setInCelcius(-273.0);
System.out.println("Nilai di Celcius : "+t.getInCelcius());
System.out.println("Nilai di Reamur : "+t.getInReamur());
System.out.println("Nilai di Fahrenheit : "+t.getInFahrenheit());System.out.println("Nilai di Kelvin : "+t.getInKelvin());
} catch (Exception e) {
System.out.println ("Exception : " + e.getMessage());}
} catch (Exception e) {
System.out.println ("Exception : " + e.getMessage());
}}
-
5/21/2018 PBO - Week 11 - Exception Handling
10/10
10
public static void main(String[] args){
test();
}}
Hasil :Pengujian
Aplikasi Thermometer
Nilai Celcius Yang Dimasukkan adalah 50Dengan Penanganan Kondisi Pemasukan Nilai Tak Absah
Memanfaatkan Structured Exception Handling
===================================================Nilai di Celcius : 0.0
Nilai di Reamur : 0.0
Nilai di Fahrenheit : 32.0Nilai di Kelvin : 272.0
Nilai di Celcius : 50.0Nilai di Reamur : 0.0
Nilai di Fahrenheit : 82.0Nilai di Kelvin : 322.0
Exception : Tidak boleh kurang dari -272 Derajat Celcius