I - 1 PRAKTIKUM I EXCEPTION HANDLING 1. Tujuan Siswa dapat memahami cara menangani exception. 2. Praktikum 2.1. Penunjang Exception Exception merupakan kondisi tidak biasa yang muncul pada saat runtime, dan diwakilkan sebagai objek. Salah satu kegunaan exception ialah untuk menelusuri informasi mengenai error, sehingga memungkinkan untuk mendiagnosa penyebab masalah atau memberikan petunjuk kenapa error itu muncul. Exception Handling Exception handling merupakan suatu mekanisme untuk menangani error/kesalahan yang muncul pada saat software dijalankan. Contoh, ketika ingin membaca data dari satu file, aplikasi tidak berhasil memprosesnya karena file tersebut tidak ada. Jenis Exception Induk dari exception terbadi dua, yaitu: - Error semasa kompilasi Contohnya: AWTError, NoClassDefFoundError, OutOfMemoryError. - Exception semasa runtime Contohnya: ArithmeticException, NullPointerException, SecurityException, IOException.
I - 2 Penanganan Exception Java menyediakan statemen untuk menangani exception: - try Statemen try mengindikasikan kode program yang dapat menghasilkan exception. //bagian luar dari blok try seharusnya tidak melempar exception try // lakukan sesuatu yang mungkin menghasilkan exception //tangani exception - catch Statemen catch digunakan untuk menangkap exception yang dilempar di dalam blok try. // bagian luar dari blok try seharusnya tidak melempar exception try // lakukan sesuatu yang mungkin menghasilkan exception catch (SocketException se) System.err.println( Socket error reading from host: +se); System.exit(2); - finally Statemen finally merupakan generic catchall untuk membersihkan setelah blok try. // bagian luar dari blok try seharusnya tidak melempar exception try // lakukan sesuatu yang mungkin menghasilkan exception catch (SomeException some) //tangani SomeException
I - 3 finally //pembersihan setelah blok try, //tanpa melihat apapun exception yang dilempar 2.2. Latihan 1. Kerjakan contoh program di bawah ini, perhatikan hasilnya kemudian pahami dan berikan penjelasan dari program tersebut. Uji coba program di bawah dengan pasangan input: 14 dan 2 Uji coba program di bawah dengan pasangan input: 12 dan 0 Uji coba program di bawah dengan pasangan input: 30 dan hello //Aplikasi pembagian tanpa menggunakan exception import java.util.scanner; public class PembagianTanpaException //method pembagian yang akan melemparkan exception //jika terjadi pembagian dengan 0 public static int bagi( int pembilang, int penyebut) return pembilang / penyebut; public static void main(string args[]) Scanner scanner = new Scanner( System.in );
I - 4 System.out.print( "Masukkan nilai pembilang: " ); int pembilang = scanner.nextint(); System.out.print( "Masukkan nilai penyebut: " ); int penyebut = scanner.nextint(); int hasil = bagi(pembilang, penyebut); System.out.printf("\nHasil: %d / %d = %d\n", pembilang, penyebut, hasil); 2. Kerjakan contoh program di bawah ini, perhatikan hasilnya kemudian pahami dan berikan penjelasan dari program tersebut. //Aplikasi pembagian menggunakan exception import java.util.inputmismatchexception; import java.util.scanner; public class PembagianException1 //method pembagian yang akan melemparkan exception public static int bagi(int pm, int py) throws ArithmeticException return pm / py; public static void main( String args[] ) Scanner scanner = new Scanner( System.in ); // untuk input boolean continueloop = true; // penentuan jika masih ada input lain
I - 5 do try // baca 2 nilai dan cari hasil bagi System.out.print("Masukkan nilai pembilang: "); int pembilang = scanner.nextint(); System.out.print("Masukkan nilai penyebut: "); int penyebut = scanner.nextint(); int hasil = bagi( pembilang, penyebut ); System.out.printf("\nHasil: %d / %d = %d\n", pembilang, penyebut, hasil); continueloop = false; // input berhasil; akhiri looping // akhir blok try catch ( InputMismatchException inputmismatchexception ) System.err.printf("\nException: %s\n", inputmismatchexception); scanner.nextline(); // hapus inputan System.out.println("Anda harus memasukkan nilai integer. Coba lagi.\n"); // akhir blok catch catch ( ArithmeticException arithmeticexception ) System.err.printf("\nException: %s\n", arithmeticexception); System.out.println("Nol adalah penyebut yang tidak sah. Coba lagi.\n"); // akhir blok catch while ( continueloop ); // akhir do...while // akhir method main // akhir kelas PembagianException1
I - 6 3. Kerjakan contoh program di bawah ini, perhatikan hasilnya kemudian pahami dan berikan penjelasan dari program tersebut. //Aplikasi untuk mendemonstrasikan try-catch-finally public class UsingException public static void main( String args[] ) try throwexception(); catch ( Exception e ) System.err.println( "Exception dihandle dalam main" ); doesnotthrowexception(); public static void throwexception() throws Exception //Lempar exception dan tangkap exception try System.out.println( "Method throwexception" ); throw new Exception(); // hasilkan exception catch( Exception e ) System.err.println("Exception dihandle dlm method throwexception" ); throw e; // lempar e kembali // jika ada coding apapun disini tidak akan dieksekusi
I - 7 finally System.err.println("Finally dieksekusi di dlm throwexception" ); // jika ada coding apapun disini tidak akan dieksekusi public static void doesnotthrowexception() try System.out.println( "Method doesnotthrowexception" ); catch( Exception e ) System.err.println( e.tostring() ); finally System.err.println("Finally dieksekusi di dlm doesnotthrowexception" ); System.out.println("Akhir dari method doesnotthrowexception" ); 4. Kerjakan contoh program di bawah ini, perhatikan hasilnya kemudian pahami dan berikan penjelasan dari program tersebut. // Demonstrasi getmessage dan PrintStackTrace dari kelas Exception public class UsingPrintStack public static void main( String args[] )
I - 8 try method1(); // call method1 // end try catch ( Exception exception ) // catch exception thrown in method1 System.err.printf( "%s\n\n", exception.getmessage() ); exception.printstacktrace(); // print exception stack trace // obtain the stack-trace information StackTraceElement[] traceelements = exception.getstacktrace(); System.out.println( "\nstack trace from getstacktrace:" ); System.out.println( "Class\t\tFile\t\t\tLine\tMethod" ); // loop through traceelements to get exception description for ( StackTraceElement element : traceelements ) System.out.printf( "%s\t", element.getclassname() ); System.out.printf( "%s\t", element.getfilename() ); System.out.printf( "%s\t", element.getlinenumber() ); System.out.printf( "%s\n", element.getmethodname() ); // end for // end catch // end main // call method2; throw exceptions back to main public static void method1() throws Exception method2(); // end method method1
I - 9 // call method3; throw exceptions back to method1 public static void method2() throws Exception method3(); // end method method2 // throw Exception back to method2 public static void method3() throws Exception throw new Exception( "Exception thrown in method3" ); // end method method3 // end class UsingExceptions 3. Tugas 1).