PEMROGRAMAN KOMPUTER 2 4 SKS 2 TEORI DAN 2 PRAKTEK NANDANG HERMANTO. S.Kom
Bug dan Exception Kesalahan merupakan bagian normal dari pemrograman Jenis kesalahan – Salah penulisan (Syntax errors /compile errors) – Logic errors (bug) kesalahan logika, menghasilkan output/performa yang menyimpang,kesalahan yang merupakan akibat dari kelemah perancangan atau implementasi – Runtime errors (Exception) operasi yang salah saat eksekusi program, bisa berakibat program berakhir / berhenti
Salah penulisan (Syntax errors /compile errors) System.out.prit(“Nandang Hermanto”); Seharusnya System.out.println(“Nandang Hermanto”);
Logic errors (bug) Saat program dijalankan tidak akan terjadi salah, tapi coba perhatikan apa yang salah dengan program diatas
Runtime errors (Exception) Scanner baca = new Scanner(System.in); int bil1 = 0, bil2 = 0; double hasil = 0; int lagi = 1; while (lagi==1){ System.out.print("Masukan bilangan bertama :"); bil1 = baca.nextInt(); System.out.print("Masukan bilangan kedua :"); bil2 = baca.nextInt(); hasil = bil1 / bil2; System.out.println("Hasil bagi adalah : " + hasil); System.out.println(""); System.out.print(" 1 untuk coba lagi 2 untuk mengakhiri : "); lagi = baca.nextInt(); } Apa yang terjadi jika bilangan pertama diisi 1 dan bilangan kedua diisi dengan 0 (nol) Bagaimana cara mengatasinya ?
Contoh cara mengatasinya Scanner baca = new Scanner(System.in); int bil1 = 0, bil2 = 0; double hasil = 0; int lagi = 1; int ulangi; while (lagi == 1) { do { System.out.print("Masukan bilangan bertama : "); bil1 = baca.nextInt(); System.out.print("Masukan bilangan kedua : "); bil2 = baca.nextInt(); try { hasil = bil1 / bil2; ulangi = 0; } catch (Exception e) { System.out.println("Terjadi kesalahan " + e.getMessage() + " silakan coba lagi "); ulangi = 1; } } while (ulangi == 1); System.out.println("Hasil bagi adalah : " + hasil); System.out.println(""); System.out.print(" 1 untuk coba lagi 2 untuk mengakhiri : "); lagi = baca.nextInt(); }
Exception Handling di Java Try Catch Finally Throw Throws
Ringkasan cara kerjanya Program yang akan dimonitor exception-nya diletakan di blok try Jika exception terjadi di blok try, exception itu dilemparkan Exception yang terjadi di tangkap dengan menggunakan catch kemudian ditangani dengan kode program yang rasional Exception yang dibangkitkan sistem secara otomatis akan dilempar oleh sistem java, sedangkan untuk exception yang dilempar secara manual digunakan keyword throw, exception yang dilempar oleh metode harus di spesisikasikan dengan keyword throws Setiap kode yang harus di eksekusi baik terjadi exeption ataupun tidak diletakan di blok finally
Exception dapat dibangkitkan oleh java run- time system atau dibangkitkan manual oleh kode program – Exception yang dilempar java run-time system berhubungan dengan kesalahan fundamental melanggar aturan-aturan bahasa java – Exception yang dihasilkan secara manual umumnya digunakan untuk melaporkan kondisi kesalahan ke pemanggil metode Exception merupakan klas object spesial yang menangani seluruh kesalahan java, terletak di paket java.lang
Menangkap Exception Bentuk umum : try { //pemanggilan method yg mungkin menghasilkan exception //blok statement yg mungkin menghasilkan exception } catch(TipeException1 namaObjek) { // penanganan salah-satu jenis exception } catch(TipeException2 namaObjek) { // penanganan salah-satu jenis exception } catch(TipeExceptionN namaObjek) { // penanganan salah-satu jenis exception } finally { // blok yang harus dieksekusi }
Jika pada Blok try tidak ada kesalahan, maka blok catch tidak ada yang dieksekusi dan langsung mengeksekusi blok finally Jika terjadi kesalahanpada blok try, maka salah satu blok catch dieksekusi, kemudian blok finally dieksekusi.
Jenis-Jenis Exception – Ada kelompok exception yang diperiksa oleh interpreter, apakah akan ditangani atau dilempar, namun ada pula exception yang akan tidak diperiksa interpreter. – Disamping itu programmer dibolehkan membuat exception sendiri dengan cara extends atau implements kelas Exception
Tabel Checked Exception No Exception Deskripsi 1ClassNotFoundExceptionKelas tidak ditemukan 2CloneNotSupportedExceptionmelakukan clone objek yang tidak mengimplementasikan interface Cloneable 3IllegalAccessExceptionPengaksesan ke kelas ditolak 4InstantiationExceptionMenciptakan objek dari kelas abtract ataupun dari interface 5InterruptedException Thread telah diinterupsi oleh thread lain 6NoSuchFieldException Field yang diminta tidak ada 7NoSuchMethodException Method yang diminta tidak ada
Tabel Uncheked Exception NoExceptionDeskripsi 1AritmaticExceptionKesalahan Aritmatik seperti pembagian dengan nol 2ArrayIndexOutBoundsExceptionIndex array di luar batas 3ArrayStoreExceptionPemberian nilai ke elemen array tidak sesuai dengan tipenya 4ClassCastExceptionCast yang tidak sah 5IllegalArgumentExceptionArgument illegal 6IllegalMonitorStateExceptionOperasi monitor illegal seperti menunggu di thread yang tidak terkunci 7IllegalStateExceptionLingkungan atau aplikasi state yang tidak benar 8IllegalThreadStateExceptionOperasi yang diminta tidak kompatibel dengan state thread saat itu 9IndexOutOfBoundExceptionIndeks di luar batas
Tabel Uncheked Exception 10NegativeArraySizeExceptionArray diciptakan dengan ukuran negatif 11NullPointerExceptionPenggunan null yang tidak sah 12NumberFormatExceptionKonversi yang tidak sah dari string ke format numerik 13SecurityExceptionMelanggar aturan security 14StringIndexOutOfBoundsIndex di luar batas string 15UnsupportedOperationExceptionDitemukan operasi yang tidak didukung
Melempar Exception dengan Keyword Throw int bil1 = 5; int bil2 = 0; try { if(bil2<1) { throw new Exception("Pembagian dengan Nol"); } } catch (Exception e) { System.out.println(" Terjadi kesalahan berupa " + e.getMessage()); }
Membuat Exception sendiri public class Pembagiandengannol extends Exception{ public Pembagiandengannol() { super("Pembagian dengan nol tidak diperbolehkan"); } public Pembagiandengannol(String message) { super(message); } int bil1 = 5; int bil2 = 0; try { if (bil2 < 1) { throw new Pembagiandengannol(); } System.out.println(bil1 / bil2); } catch (Pembagiandengannol e) { System.out.println("Error " + e.getMessage()); } Buat class turunan dari class Exception Gunakan class exception pada class yang lain