pbo - week 11 - exception handling

Upload: ainx13

Post on 11-Oct-2015

15 views

Category:

Documents


0 download

DESCRIPTION

english

TRANSCRIPT

  • 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