200 likes | 318 Views
09 Exceptions & File I/O. OOP Java. Materi hari ini. Exceptions Apa & kapan exception terjadi Menangani exception Menghindar (tidak menangani exception) File I/O Pengolahan file Tulis data ke file Baca data dari file. Dalam mengeksekusi program dapat terjadi banyak kejadian.
E N D
09 Exceptions & File I/O OOP Java
Materi hari ini • Exceptions • Apa & kapan exception terjadi • Menangani exception • Menghindar (tidak menangani exception) • File I/O • Pengolahan file • Tulis data ke file • Baca data dari file
Dalam mengeksekusi program dapat terjadi banyak kejadian ... • File tidak ada • Server down • Sehebat apapun Anda jadi DEVELOPER, Anda tidak dapat mengontrol semuanya THINGS CAN GO WRONG !
Bugs dan Exceptional • Bugs adalah kesalahan (error) yang disebabkan KODE saya yang tidak benar (salah sintaks, dll). SEDANGKAN • Exceptional adalah kesalahan (error) yang disebabkan oleh situasi yang TIDAK DAPAT DIGARANSI 100% OKE ketika program dijalankan (saat runtime)
Jadi ... • Ketika Anda mengkode sebuah method yang beresiko, Anda harus menulis kode untuk meng-handle bagaimana apabila BAD THINGS seperti di atas terjadi ? Pertanyaannya… • Bagaimana saya tahu sebuah method itu BERESIKO ? • Dan di mana saya menaruh kode untuk meng-handle situasi exceptional tersebut ?
Seperti apa sih Situasi EXCEPTIONAL yang dimaksud ? • Kode saya yang mengharapkan ADA FILE di DIREKTORI C:\JAVA, namun kenyataannya TIDAK ADA. • Kode saya yang mengharapkan SERVER SUDAH RUNNING, namun kenyataannya TIDAK seperti yg diharapkan. • Kode saya yang hendak membuat FILE BARU dengan nama Robinhood.java, namun kenyataannya sudah ADA file dg nama yg sama. • Kode saya membutuhkan suatu OBJEK TERTENTU namun kenyataannya objek tersebut TIDAK TERSEDIA
Contoh Situasi Exceptional“Pembagian dengan NOL” str = cons.bacaString(); a = Integer.parseInt(str); str = cons.bacaString(); b = Integer.parseInt(str); c = a / b; //ada kemungkinan user memasukkan nilai 0 pada // variabel b
Contoh Situasi Exceptional :Tipe data yg diinput user tidak sesuai //file : AddArguments.java //note : tanpa exception handling, // error jika argumen bukan integer semua public class AddArguments { public static void main(String[] args) { int sum = 0; for (int i = 0; i <args.length; i++) { sum += Integer.parseInt(args[i]); } System.out.println("Sum = " + sum); } }
Apa yang terjadi ketika method yang saya panggil (kemungkinan bukan saya yg tulis) BERESIKO ? • Contoh saya mau memanggil SEBUAH METHOD di dalam kelas yang bukan saya tulis • METHOD tersebut melakukan SESUATU yang BERESIKO, SESUATU yang mungkin TIDAK JALAN saat RUNTIME • Saya harus TAHU bahwa METHOD yang dipanggil BERESIKO • Sehingga saya dapat MENULIS KODE yang meng-handle BILA KEGAGALAN TERJADI. SIAP2 aja, SEDIA PAYUNG SEBELUM HUJAN!
METHOD di JAVA menggunakan exceptions untuk memberitahu kode yang memanggilnya bahwa,”Something Bad Happened. Saya GAGAL mengatasinya ”
Bagaimana CARA untuk meng-handle KODE yang beresiko ? • Caranya adalah dengan MEMBUNGKUS kode BERESIKO di dalam bentuk try/catch • Contoh MEMBUNGKUS dengan bentuk try/catch public void play(){ try{ //kode beresiko disini } catch(…) { //tangkap exceptionnya //penanganan jika terjadi kesalahan } } // close
exception adalah sebuah objek ...dari kelas Exception try{ // kode beresiko } catch(Exception ex){ // try to recover }
Yang PENTING adalah TAHU Method yang throws exception dan Method yang catch-nya public void takeRisk() throws BadException{ if(gagalSemua){ throw new BadException(); } } //--------------------------------- public void crossFingers(){ try{ anObject.takeRisk(); } catch(BadException ex){ System.out.println(“Aaargh!”); ex.printStackTrace(); } System.out.println(“We made it!”); }
Contoh Situasi Exceptional : Tipe data yg diinput user tidak sesuai (sudah ditangani) //file : AddArguments2.java //note : dengan exception handling public class AddArguments2 { public static void main(String[] args) { try { int sum = 0; for (int i = 0; i <args.length; i++) { sum += Integer.parseInt(args[i]); } System.out.println("Sum = " + sum); } catch (NumberFormatException nfe) { System.err.println("Salah satu argumen bukan integer!"); } } }
Contoh Situasi Exceptional :Tipe data yg diinput user tidak sesuai (sudah ditangani dg lebih baik) //file : AddArguments3.java //note : dengan exception handling yg lebih baik public class AddArguments3 { public static void main(String[] args) { int sum = 0; for (int i = 0; i <args.length; i++) { try { sum += Integer.parseInt(args[i]); } catch (NumberFormatException nfe) { System.err.println("Argumen ["+ args[i] + "] bukan integer!"); } } System.out.println("Sum = " + sum); } }
Kapan finally digunakan ? • Kalau developer mau masak sesuatu pake kompor gas, maka developer memulainya dengan memutar tombol untuk menyalakan api di kompor • Kalau gas keluar tapi api tidak nyala (FAILURE), developer HARUS MEMADAMKANNYA • Kalau api nyala (SUCCESS), selesai masak developer HARUS MEMADAMKANNYA juga • Jadi kode di dalam blok finally HARUS DIJALANKAN MESKIPUN TERJADI EXCEPTION ATAU TIDAK
Contoh penggunaan finally try{ turnKomporOn(); x.masak(); } catch( MasakException ex ){ ex.printStackTrace(); } finally{ turnKomporOff(); }
Sebaiknya Developer mengkode catch block yang berbeda untuk setiap exception yang perlu diperlakukan bedaBila ada blok catch lebih dari satu, maka blok catch harus diurutkan dari terkecil ke terbesar try{ laundry.doLaundry(); } catch(TShirtException tex){ // silakan kode untuk TShirtException } catch(BajuException dex){ // silakan kode untuk DalemanException } catch(PakaianException pex){ // silakan untuk semua exception }
Kalau ingin TIDAK menghandle, HINDARI SAJA ... MENGHINDARI dengan cara MENDEKLARASIKAN exception tersebut public void foo() throws ReallyBadException{ // call risky method without a try/catch laundry.doLaundry(); }