Exception dan Assertion
Topik Apa yang dimaksud dengan Exception? Menangkap Exception Pendahuluan Class-class Error dan Exception Contoh Menangkap Exception Pernyataan try-catch Kata kunci finally
Topik Melempar Exception Kategori Exception Kata kunci throw Kata kunci throws Kategori Exception Class-class dan hirarki Exception Checked dan Unchecked Exception User-Defined Exception
Topik Apa yang dimaksud dengan Assertion? Mengaktifkan dan Menonaktifkan Assertion Sintaks Assertion
EXCEPTION Error pembagian 0 Definisi: Event-event Exceptional Error-error yang mungkin muncul selama runtime Menyebabkan program yang berjalan secara normal menjadi terganggu. Contoh -contoh : Error pembagian 0 Mengakses elemen di luar jangkauan sebuah array Input yang sifatnya invalid Hard disk crash Membuka file yang tidak ada Menyelesaikan masalah tumpukan memori.
Class Error dan Exception Class Throwable Class Root dari class-class exception Subclass-subclass Immediate Error Exception Class Exception menunjukkan kondisi yang dapat diterima oleh user program Umumnya disebabkan oleh beberapa kesalahan pada kode program Contoh-contoh Pembagian oleh 0 Error di luar jangkauan array
Class Error dan Exception digunakan oleh Java run-time untuk menangani error yang muncul pada saat dijalankan Secara umum hal ini di luar control user karena kemunculannya disebabkan oleh run-time environment Contoh-contoh Out of memory errors Harddisk crash
Contoh Exception class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println(“Pls. print me.”); }
Contoh Exception Menampilkan deskripsi exception didapatkan pesan kesalahan sebagai berikut Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3) Default handler Menampilkan deskripsi exception Menampilkan stack trace Hirarki method dimana exception terjadi Menghentikan program secara paksa
Exceptions Catch: try-catch Sintaks: try { <code to be monitored for exceptions> } catch (<ExceptionType1> <ObjName>) { <handler if ExceptionType1 occurs> } ... } catch (<ExceptionTypeN> <ObjName>) { <handler if ExceptionTypeN occurs>
Exceptions Catch: try-catch class DivByZero { public static void main(String args[]) { try { System.out.println(3/0); System.out.println(“Please print me.”); } catch (ArithmeticException exc) { //Dibagi dengan 0 -> ArithmeticException System.out.println(exc); } System.out.println(“After exception.”);
Exceptions Catch: try-catch Contoh Multiple catch class MultipleCatch { public static void main(String args[]) { try { int den = Integer.parseInt(args[0]); System.out.println(3/den); } catch (ArithmeticException exc) { System.out.println(“Divisor was 0.”); } catch (ArrayIndexOutOfBoundsException exc2) { System.out.println(“Missing argument.”); } System.out.println(“After exception.”);
Exceptions Catch: try-catch Nested try class NestedTryDemo { public static void main(String args[]){ try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println(“Div by zero error!"); } //bersambung...
Exceptions Catch: try-catch } catch (ArrayIndexOutOfBoundsException) { System.out.println(“Need 2 parameters!"); }
Exceptions Catch: try-catch Nested trys dengan method-method class NestedTryDemo2 { static void nestedTry(String args[]) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a/b); } catch (ArithmeticException e) { System.out.println("Div by zero error!"); } //bersambung...
Exceptions Catch: try-catch public static void main(String args[]){ try { nestedTry(args); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Need 2 parameters!"); }
Exceptions Catch: Keyword finally Sintaks: try { <code to be monitored for exceptions> } catch (<ExceptionType1> <ObjName>) { <handler if ExceptionType1 occurs> } ... } finally { <code to be executed before the try block ends> } Mengandung kode penanganan setelah penggunaan try dan catch
Exceptions Catch: Keyword finally Kode selalu dieksekusi meskipun dengan skenario berbeda : Proses keluar secara paksa menggunakan return, pernyataan continue atau break. Penyelesaian secara normal Menangkap lemparan exception Exception akan dilempar dan ditangkap dalam sebuah method Tidak menangkap lemparan exception Lemparan Exception belum dispesifikasikan dalam beberapa baris catch dalam method tersebut
Exceptions Catch: Keyword finally class FinallyDemo { static void myMethod(int n) throws Exception{ try { switch(n) { case 1: System.out.println("1st case"); return; case 3: System.out.println("3rd case"); throw new RuntimeException("3!"); case 4: System.out.println("4th case"); throw new Exception("4!"); case 2: System.out.println("2nd case"); } //bersambung...
Exceptions Catch: Keyword finally } catch (RuntimeException e) { System.out.print("RuntimeException: "); System.out.println(e.getMessage()); } finally { System.out.println("try-block entered."); } //bersambung...
Exceptions Catch: Keyword finally public static void main(String args[]){ for (int i=1; i<=4; i++) { try { FinallyDemo.myMethod(i); } catch (Exception e){ System.out.print("Exception caught: "); System.out.println(e.getMessage()); } System.out.println();
Exceptions Throwing : Keyword throw Java mengijinkan Anda untuk melempar exception: throw <exception object>; Contoh: throw new ArithmeticException(“testing...”);
Exceptions Throwing: Keyword throw 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:+e);
Exceptions Throwing : Keyword throw Sebuah method diperlukan untuk menangkap ataupun mendaftar seluruh exceptions yang mungkin terjadi Kecuali untuk Error atau RuntimeException, atau subclass-subclass nya Jika sebuah method dapat menyebabkan sebuah exception namun tidak menangkapnya, maka digunakan keyword throws Aturan ini hanya berlaku pada checked exception Sintaks: <type> <methodName> (<parameterList>) throws <exceptionList> { <methodBody> }
Exceptions Throwing: Keyword throw class ThrowingClass { static void meth() throws ClassNotFoundException { throw new ClassNotFoundException ("demo"); } class ThrowsDemo { public static void main(String args[]) { try { ThrowingClass.meth(); } catch (ClassNotFoundException e) { System.out.println(e);
Class-class Exception dan Hirarki
Class-class Exception dan Hirarki catch lebih dari satu harus berurutan dari subclass ke superclass. class MultipleCatchError { public static void main(String args[]){ try { int a = Integer.parseInt(args [0]); int b = Integer.parseInt(args [1]); System.out.println(a/b); } catch (Exception ex) { } catch (ArrayIndexOutOfBoundsException e) { }
Checked dan Unchecked Exceptions Compiler memeriksa keseluruhan program apakah menangkap atau mendaftar exception yang terjadi dalam sintax throws Jika tidak, error compiler akan terjadi Unchecked Exception Tidak berupa compile-time checking dalam penanganan exceptions Class-class exception Built-in unchecked Error RuntimeException Subclass-subclassnya Mengatasi semua exception-exception ini mungkin membuat program kacau dan mungkin menyusahkan programmer.
User-Defined Exceptions Membuat exceptions Anda sendiri Membuat sebuah class yang extends terhadap RuntimeException atau class Exception Modifikasi class Members dan constructors dapat ditambahkan pada class Contoh: class HateStringExp extends RuntimeException { /* Tidak ada penambahan anggota atau construktor sedikitpun */ }
User-Defined Exceptions Menggunakan user-defined exceptions class TestHateString { public static void main(String args[]) { String input = "invalid input"; try { if (input.equals("invalid input")){ throw new HateStringExp(); } System.out.println("Accept string."); } catch (HateStringExp e) { System.out.println("Hate string!”);
ASSERTIONS Memungkinkan programmer untuk menemukan sebuah asumsi terhadap suatu masalah Contoh : bulan Extension dari comments dimana pernyataan yang menyatakan informasi kepada pembaca kode dalam keadaan yang bermacam-macam seharusnya merasa puas Jalannya program menginformasikan kepada Anda apakah Assertion yang dibuat sudah benar atau belum Jika sebuah assertion tidak benar, sebuah AssertionError akan diberikan User memiliki pilihan untuk menghidupkan atau mematikannya pada saat runtime
Mengaktifkan dan MenonAktifkan Assertions Program dengan assertions mungkin tidak bekerja dengan baik jika digunakan oleh clients tidak memanfaatkan assertions yang telah digunakan dalam kode. Proses Kompilasi Dengan fitur assertion: javac –source 1.4 MyProgram.java Tanpa fitur assertion: javac MyProgram.java Mengaktifkan assertions: Menggunakan –enableassertions atau –ea switch. java –enableassertions MyProgram
Sintaks Assertion assert <expression1>; dimana Dua bentuk: Bentuk yang lebih sederhana: assert <expression1>; dimana <expression1> adalah kondisi assertion bernilai true Bentuk Lain: assert <expression1> : <expression2>; <expression1> adalah kondisi yang bernilai true <expression2> adalah informasi yang membantu pemeriksaan mengapa program mengalami kesalahan
Sintaks Assertion class AgeAssert { public static void main(String args[]) { int age = Integer.parseInt(args[0]); assert(age>0); /* jika usia sifatnya valid (contoh, age>0) */ if (age >= 18) { System.out.println(“You're adult”); }
Kesimpulan Exception Definisi try, catch dan finally throw dan throws Class-class Throwable, Exception, Error Exception-exception Checked dan Unchecked User-Defined Exceptions Assertion Mengaktifkan dan menonaktifkan Assertions Sintaks Assertion