4/11/2013
Topik • Apa yang dimaksud dengan Exceptions? JAVA Education Network Indonesia
Exceptions dan Assertions Pengenalan Pemrograman 2
– Pendahuluan – Class-class Error dan Exception – Contoh
• Menangkap suatu Exceptions – Pernyataan try-catch – Kata kunci finally jeni.jardiknas.org
Topik • Melempar Exceptions – Kata kunci throw – Kata kunci throws
• Kategori-kategori Exception
Topik • Assertions – Apa yang dimaksud dengan Assertions? – Meng-Enable-kan dan Men-Disable-kan Assertions – Syntax Assert
– Class-class dan hirarki Exception – Checked dan Unchecked Exceptions – User-Defined Exceptions
EXCEPTIONS • Definisi: – Event-event Exceptional – Error-error yang mungkin muncul selama runtime – Menyebabkan program yang berjalan secara normal menjadi terganggu. – Contoh -contoh : • Terbagi oleh error-error nolDivide by zero errors • Mengakses elemen-elemen dari sebuah array melebihi rangenya. • Input yang sifatnya invalid • Hard disk crash • Membuka sebuah file yang sifatnya non-existent • Menyelesaikan masalah tumpukan memori.
Class Error dan Exception • Class Throwable – Class Root dari class-class exception – Subclass-subclass Immediate • Error • Exception • Class Exception – Kondisi ketika user program dapat saling berhubungan satu sama lain. – Biasanya hasil dari beberapa kekurangan dalam kode user program. – Contoh-contoh • Division by zero error • Array out-of-bounds error
1
4/11/2013
Contoh Exception
Class Error dan Exception • Class Error – Digunakan oleh sistem Java run-time untuk mengatasi error-error yang terjadi dalam lingkungan run-time. – Secara umum melalui pengaturan user program – Contoh-contoh
1 2
3 4 5 6
class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println(“Pls. print me.”); } }
• Out of memory errors • Hard disk crash
Contoh Exception • Menunjukkan pesan error berikut Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3) • Default handler – Mencetak deskripsi exception – Mencetak stack trace • Hirarki method dimana exception terjadi – Menyebabkan Program diterminasi
Exceptions Catch: try-catch 1 2 3 4 5 6 7 8 9 10 11 12
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 • Syntax: try {
} catch (<ExceptionType1> ) { } ... } catch (<ExceptionTypeN> ) { }
Exceptions Catch: try-catch • Contoh Multiple catch 1 class MultipleCatch { 2 public static void main(String args[]) { 3 try { 4 int den = Integer.parseInt(args[0]); 5 System.out.println(3/den); 6 } catch (ArithmeticException exc) { 7 System.out.println(“Divisor was 0.”); 8 } catch (ArrayIndexOutOfBoundsException exc2) { 9 System.out.println(“Missing argument.”); 10 } 11 System.out.println(“After exception.”); 12 } 13 }
2
4/11/2013
Exceptions Catch: try-catch • Nested try 1 class NestedTryDemo { 2 public static void main(String args[]){ 3 try { 4 int a = Integer.parseInt(args[0]); 5 try { 6 int b = Integer.parseInt(args[1]); 7 System.out.println(a/b); 8 } catch (ArithmeticException e) { 9 System.out.println(“Div by zero error!"); 10 } 11 //bersambung...
Exceptions Catch: try-catch } catch (ArrayIndexOutOfBoundsException) { 12 System.out.println(“Need 2 parameters!"); 13 } 14 } 15 } 11
Exceptions Catch: try-catch • Nested trys dengan method-method 1. class NestedTryDemo2 { 2. static void nestedTry(String args[]) { 3. try { 4. int a = Integer.parseInt(args[0]); 5. int b = Integer.parseInt(args[1]); 6. System.out.println(a/b); 7. } catch (ArithmeticException e) { 8. System.out.println("Div by zero error!"); 9. } 10. } 11.//bersambung...
Exceptions Catch: Keyword finally • Syntax: try { } catch (<ExceptionType1> ) { } ... } finally { }
Exceptions Catch: try-catch public static void main(String args[]){ 13. try { 14. nestedTry(args); 15. } catch (ArrayIndexOutOfBoundsException e) { 16. System.out.println("Need 2 parameters!"); 17. } 18. } 19.} 12.
Exceptions Catch: Keyword finally • Satu baris 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
• Terdiri atas kode untuk membersihkan setelah sebuah method try atau catch dijalankan.
3
4/11/2013
Exceptions Catch: Keyword finally 1 2
3 4 5 6 7 8 9 10 11 12 13
22 23 24 25 26 27 28 29 30 31 32 33
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 14 15 16 17 18 19 20 21
} catch (RuntimeException e) { System.out.print("RuntimeException: "); System.out.println(e.getMessage()); } finally { System.out.println("try-block entered."); } } //bersambung...
Exceptions Catch: Keyword finally
Exceptions Throwing : Keyword throw
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(); } }
• Java memungkinkan Anda untuk melempar exceptions:
Exceptions Throwing: Keyword throw
Exceptions Throwing : Keyword throw
throw <exception object>;
• Contoh: throw new ArithmeticException(“testing...”);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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); } } }
• Sebuah method diperlukan untuk salah satu dari catch atau list semua exceptions akan dilempar – Kecuali untuk Error atau RuntimeException, atau subclass-subclass nya • Jika suatu method mungkin menyebabkan sebuah exception terjadi tapi tidak menangkap nya, kemudian bisa dikatakan sama dengan menggunakan kata kunci throws – Tampilan hanya untuk memeriksa exceptions • Syntax: <methodName> (<parameterList>) throws <exceptionList> { <methodBody> }
4
4/11/2013
Exceptions Throwing: Keyword throw 1 2
3 4 5 6 7 8 9 10 11 12 13 14
Class-class Exception dan Hirarki
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); } } }
Exceptions Checked dan Unchecked
Class-class Exception dan Hirarki • Penangkapan Multiple akan dipesan dari subclass ke superclass. 1 class MultipleCatchError { 2 public static void main(String args[]){ 3 try { 4 int a = Integer.parseInt(args [0]); 5 int b = Integer.parseInt(args [1]); 6 System.out.println(a/b); 7 } catch (Exception ex) { 8 } catch (ArrayIndexOutOfBoundsException e) { 9 } 10 } 11 }
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: 1 class HateStringExp extends RuntimeException { 2 /* Tidak ada penambahan anggota atau construktor sedikitpun */ 3 }
•
Exception Checked – Java compiler mengecheck jika salah satu dari program menangkap atau daftar exception checked – Jika tidak, error compiler akan terjadi
•
Exceptions Unchecked – Bukan subject pada saat waktu mengkompile memeriksa untuk mengatasi exception yang terjadi. – 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 • Menggunakan user-defined exceptions 1 class TestHateString { 2 public static void main(String args[]) { 3 String input = "invalid input"; 4 try { 5 if (input.equals("invalid input")){ 6 throw new HateStringExp(); 7 } 8 System.out.println("Accept string."); 9 } catch (HateStringExp e) { 10 System.out.println("Hate string!”); 11 } 12 } 13 }
5
4/11/2013
ASSERTIONS
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
• Memungkinkan programmer untuk menemukan sebuah assumsi 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 assertions: – Menggunakan –enableassertions atau –ea switch. java –enableassertions MyProgram
Syntax Assert • Dua bentuk: – Bentuk yang lebih sedrhana: assert <expression1>; dimana • <expression1> adalah kondisi assert bernilai benar – Bentuk Lain: assert <expression1> : <expression2>; dimana • <expression1> adalah kondisi yang bernilai benar • <expression2> adalah beberapa informasi yang sangat membantu dalam mendiagnosa mengapa penrnyataan gagal dijalankan.
Syntax Assert 1 2 3 4 5
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”); }
6 7 8
}
9 10
}
Kesimpulan • Exceptions – Definisi – try, catch dan finally – throw dan throws – Class-class Throwable, Exception, Error – Exception-exception Checked dan Unchecked – User-Defined Exceptions • Assertions – Definisi – Mengaktifkan dan menonaktifkan Assertions – Syntax Assert
6