PEMROGRAMAN JAVA LANJUT
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.
PEMROGRAMAN JAVA LANJUT
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
PEMROGRAMAN JAVA LANJUT
} 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-3
PEMROGRAMAN JAVA LANJUT
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
PEMROGRAMAN JAVA LANJUT
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
PEMROGRAMAN JAVA LANJUT
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
throwException" ); throw e; // lempar e kembali
// jika ada coding apapun disini tidak akan dieksekusi }
method
PEMROGRAMAN JAVA LANJUT
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[] ) {
PEMROGRAMAN JAVA LANJUT
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-8
PEMROGRAMAN JAVA LANJUT
// 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) .
I-9