Try, Catch, Finally Throws Exception Handling Try, Catch, Finally Throws
Apa itu Exception? Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada program. Peristiwa ini biasanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita berakhir tidak normal. Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally. Apa yang kita lakukan dalam program kita adalah kita menempatkan pernyataan yang mungkin menghasilkan exception dalam blok ini.
Bentuk umum dari blok try-catch-finally adalah, //tulis pernyataan yang dapat mengakibatkan exception //dalam blok ini } catch( <exceptionType1> <varName1> ){ //tulis aksi apa dari program Anda yang dijalankan jika ada //exception tipe tertentu terjadi catch( <exceptionTypen> <varNamen> ){ finally{ //tambahkan kode terakhir di sini
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally: Notasi blok bersifat perintah Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally. Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau keduanya. Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari subclassesnya.
Menangkap Exception 1 public class TestExceptions{ public static void main( String[] args ){ for( int i=0; true; i++ ){ System.out.println("args["+i+"]=“+args[i]); } Compile dan jalankan program TestExceptions. Keluarannya akan tampak seperti ini: javac TestExceptions one two three args[0]=one args[1]=two args[2]=three Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at TestExceptions.main(1.java:4)
Ubah program TestExceptions untuk menangani exception, keluaran program setelah ditangkap exception-nya akan seperti ini: javac TestExceptions one two three args[0]=one args[1]=two args[2]=three Exception caught: java.lang.ArrayIndexOutOfBoundsException: 3 Quiting…
Menangkap Exception 2 Melakukan percobaan pada beberapa program yang telah Anda tulis adalah hal yang baik sebelummenghadapi exception. Karena pada program di atas Anda tidak menangkap exception, maka eksekusi dengan mudahnya berhenti mengeksekusi program Anda. Kembali kepada program diatas dan gunakan penanganan exception.
A Java Exception Handling Example Modifikasi program berikut, sehingga bisa di-kompile: public static void cat(File file) { RandomAccessFile input = null; String line = null; try { input = new RandomAccessFile(file, "r"); while ((line = input.readLine()) != null) { System.out.println(line); } return; } finally { if (input != null) { input.close(); } A Java Exception Handling Example
A Java Exception Handling Example Jawaban: public static void cat(File file) { RandomAccessFile input = null; String line = null; try { input = new RandomAccessFile(file, "r"); while ((line = input.readLine()) != null) { System.out.println(line); } return; } catch(FileNotFoundException fnf) { System.err.format("File: %s not found%n", file); } catch(IOException e) { System.err.println(e.toString()); } finally { if (input != null) { input.close(); } catch(IOException io) { } A Java Exception Handling Example
Object Oriented Concept Konsep kelas Membuat kelas Lingkup kelas Akses ke anggota kelas Mereferensikan obyek menggunakan perintah this Konstruktor Overload konstruktor
Class and how to defined Class (Kelas): kelas adalah persepsi untuk objek tertentu, kita dapat menggunakan definisi class untuk membuat objek dari tipe kelas.
Construktor : Pada saat membuat sebuah class, kita harus bisa memastikan tentang nilai awal yang disimpan oleh seluruh data objek. Karena data objek menunjuk-kan karakteristik objek tersebut, sehingga seluruh nilai yang tersimpan didalamnya haruslah logis dan valid, misalnya jari-jari lingkaran tidak boleh nol atau negatif. Kita bisa membuat sebuah method yang berfungsi untuk mengubah nilai seluruh data objek, contoh method initAllValue(). Namun persoalannya adalah bagaimana nilai yang disimpan oleh data objek saat objek tersebut diciptakan, bukan saat objek sudah ada. Method diatas hanya bisa dipanggil pada saat objek sudah ada, buka pada saat objek baru dibuat. Untuk mengatasinya, digunakanlah apa yang kita sebut constructor, yaitu sebuah metode OOP yang dipanggil secara otomatis pada saat sebuah objek diciptakan.
Isi constructor itu sendiri bisa berupa pemanggilan method internal atau intruksi lain. Sama seperti fungsi atau method pada umumnya, constructor juga bisa memiliki variasi parameter. Diantaranya: Single constructor, yaitu hanya ada satu constructor pada class Constructor dengan parameter, yaitu constructor dengan data yang bisa dikirim pada saat pennciptaan objek. Multiple constructor, yaitu terdapat beberapa constructor yang bisa kita pilih pada saat penciptaan objek.
1. Single constructor : Hanya ada satu construktor dalam class, ini bisa kita temukan pada contoh berikut : Contruktor untuk proses inisialisasi jari-jari. Dengan memberikan data awal 1 (satu) sebagai nilai default untuk jari-jari, dengan asumsi nilai ini nilai terkecil untuk sebuah satuan panjang. Bisa juga diberikan nilai lain kecuali nol atau negatif. Contoh program berikut adalah modifikasi program sebelumnya, dimana kita sudah menambahkan constructor pada class lingkaran tersebut. Perhatikan bagaimana constructor ini bekerja:
private double jariJari; public Lingkaran() { setJariJari (1); } class Lingkaran { private double jariJari; public Lingkaran() { setJariJari (1); } public void setJariJari (double r) { if (r>0) jariJari=r; } public double getJariJari() { return (jariJari); } public double hitungLuas() { return (Math.PI * jariJari * jariJari); } public double hitungKeliling() { return (Math.PI * 2.0 * jariJari); } } * Constuctor sebagai proses inisialisasi, yang berisi instruksi memanggil method internal setJariJari(). * Didefinisikan public * Memiliki nama sama dengan nama class
Kedua program diatas bisa dikompilasi tanpa kesalahan, namum tidak bisa dijalankan karena kode-kode tersebut hanya merupakan implementasi class. Jika kita menjalankan juga maka akan ada pesan kesalahan yang akan diberikan oleh java yang menyatakan fungsi main() tidak adal dalam file sbb: Exception in thread “main” java.lang.NoSuchMethodError: main Press any key to contonue . . . Solusinya adalah: Harus dibuatkan sebaah class yang berisikan rutin program yaitu dengan fungsi main(). Class baru ini memiliki karakteristik sbb : Dideklarasikan sebagai class public Nama Class menjadi nama file Berisi seluruh kode class Lingkaran
1 class Lingkaran 2 { 3 private double jariJari; 4 public Lingkaran() 5 { setJariJari (1); } 6 public void setJariJari (double r) 7 { if (r>0) jariJari=r; } 8 public double getJariJari() 9 { return (jariJari); } 10 public double hitungLuas() 11 { return (Math.PI * jariJari * jariJari); } 12 public double hitungKeliling() 13 { return (Math.PI * 2.0 * jariJari); } }
16 public class CobaLingkaran_1 17 { 18 pulic static void main(String[] args) { Lingkaran abc = new Lingkaran(); Lingkaran pqr = new Lingkaran(); Lingkaran xyz = new Lingkaran(); System.out.println (“Data Default :”); System.out.println (“-----------------”); System.out.println (“Jari – Jari ABC : ” + abc.getJariJari()); System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari()); System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari()); System.out.println ();
30 abc.setJariJari(5)); 31 pqr.setJariJari(3.2)); 32 xyz.setJariJari(1.8)); 33 34 System.out.println (“Data Sekarang :”); 35 System.out.println (“-------------------- ”); 36 System.out.println (“Jari – Jari ABC : ” + abc.getJariJari()); 37 System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari()); 38 System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari()); System.out.println (); }
Data dafault : ---------------- Jari – jari Lingkaran ABC : 1.0 Jari – jari Lingkaran PQR : 1.0 Jari – jari Lingkaran XYZ : 1.0 Data Sekarang : ------------------- Jari – jari Lingkaran ABC : 5.0 Jari – jari Lingkaran PQR : 3.2 Jari – jari Lingkaran XYZ : 1.8 Bila program ini dijalankan : Mula-mula ketiga class lingkaran abc, pgq dan xyz memiliki data jari-jari yang sama seperti yang telah ditentukan class constructor. Kemudian ketiga class ini diganti dengan nilai yang baru. Maka output dari program tersebut adalah:
Catt: Abc, pqr dan xyz adalah tiga objek yang berbeda sekalipun berasa dari class yang sama. Perubahan data pada satu objek tidak berpengaruh pada objek yang lain.
2. Constructor dengan Parameter : Kekurangan dari single constructor adalah kita tidak bisa menentukan secara langsung nilai dafault jari-jari lingkaran. Setidaknya kita memerlukan dua langkah untuk melakukan setting terhadap jari-jari sesuai yang kita kehendaki yaitu menciptakan objek dan memanggil metode setJariJari(). Dengan constructor ber-Parameter kita meringkas dua pekerjaan ini menjadi satu, yaitu dengan menentukan jari-jari langsung saat penciptaan objek. Dalam hal ini kita menyisipkan parameter pada construktor. Contoh program berikut adalah modifikasi program sebelumnya, dimana kita merubah constructor lingkaran menjari ber-parameter :
1 class Lingkaran 2 { 3 private double jariJari; 4 public Lingkaran(double r) { if (r > 0) jariJari = r; else jariJari = 1.0; } 7 public void setJariJari (double r) 8 { if (r>0) jariJari=r; } 9 public double getJariJari() 10 { return (jariJari); } 11 public double hitungLuas() 12 { return (Math.PI * jariJari * jariJari); } 13 public double hitungKeliling() 14 { return (Math.PI * 2.0 * jariJari); } 15 }
16 public class CobaLingkaran_2 17 { 18 pulic static void main(String[] args) { Lingkaran abc = new Lingkaran(5); Lingkaran pqr = new Lingkaran(3.2); Lingkaran xyz = new Lingkaran(1.8); System.out.println (“Data Default :”); System.out.println (“-----------------”); System.out.println (“Jari – Jari ABC : ” + abc.getJariJari()); System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari()); System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari()); System.out.println (); }
Modifikasi constructor pada program diatas berdampak pada bagian deklarasi objek ikut berubah karena constructor yang ada sekarang mengharuskan pengiriman data. Sehingga jika program tsb dijalankan menghasilkan : Data dafault : ---------------- Jari – jari Lingkaran ABC : 5.0 Jari – jari Lingkaran PQR : 3.2 Jari – jari Lingkaran XYZ : 1.8
3. Multiple Constructor : Seakan untuk memenuhi semua keinginan, kedua constructor diatas dirasakan belum bisa memenuhi keinginan user. Ada user yang ingin menggunakan constructor model pertama ada juga model kedua berparameter. Maka dibuatlah tipe ketiga yang memiliki dua tipe tadi. Semakin komplek class yang kita buat maka akan semakin banyak pula variasi construktor yang akan terjadi. Inilah yang pada akhirnya kita sebut sebagai multiple constructor. Contoh program berikut akan memperlihatkan bentuk dari multiple construktor.
1 class Lingkaran 2 { private double jariJari; public Lingkaran() { setJariJari(1) } 6 public Lingkaran(double r) 7 { if (r > 0) jariJari = r; 8 else jariJari = 1.0; } 9 public void setJariJari (double r) 10 { if (r>0) jariJari=r; } 11 public double getJariJari() 12 { return (jariJari); } 13 public double hitungLuas() 14 { return (Math.PI * jariJari * jariJari); } 15 public double hitungKeliling() 16 { return (Math.PI * 2.0 * jariJari); } 17 }
18 public class CobaLingkaran_3 19 { 20 pulic static void main(String[] args) 21 { 22 Lingkaran abc = new Lingkaran(); 23 Lingkaran pqr = new Lingkaran(3.2); 24 Lingkaran xyz = new Lingkaran(1.8); 25 26 System.out.println (“Data Default :”); 27 System.out.println (“-----------------”); 28 System.out.println (“Jari – Jari ABC : ” + abc.getJariJari()); 29 System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari()); 30 System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari()); 31 System.out.println (); 32 } 33 }
Pada program tersebut konstruktor pertama tanpa parameter, Didalamnya kita menetukan jari-jari default sama dengan satu. Kemudian pada constructor model ke dua berparameter, sehingga pemanggilannya pun berbeda yang bisa kita lihat pada bari 22, 23 dan 24 yang menghasilkan sbb: Data dafault : ---------------- Jari – jari Lingkaran ABC : 1.0 Jari – jari Lingkaran PQR : 3.2 Jari – jari Lingkaran XYZ : 1.8
Catt: Pada program tersebut secara tidak langsung objek abc akan diinisialisasikan dengan data 1.0, karena objek yang dibuat tanpa menyertakan data awal untuk jari-jari.
Contoh Program
Contoh Program
Contoh Program
Contoh Program
Terima Kasih