Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehIrham Nurhasanah Telah diubah "10 tahun yang lalu
1
09 Exceptions & File I/O OOP Java
2
Materi hari ini ExceptionsExceptions – Apa & kapan exception terjadi – Menangani exception – Menghindar (tidak menangani exception) File I/OFile I/O – Pengolahan file – Tulis data ke file – Baca data dari file
3
Dalam mengeksekusi program dapat terjadi banyak kejadian... File tidak adaFile tidak ada Server downServer down Sehebat apapun Anda jadi DEVELOPER, Anda tidak dapat mengontrol semuanyaSehebat apapun Anda jadi DEVELOPER, Anda tidak dapat mengontrol semuanya THINGS CAN GO WRONG !
4
Bugs dan Exceptional Bugs adalah kesalahan (error) yang disebabkan KODE saya yang tidak benar (salah sintaks, dll).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)Exceptional adalah kesalahan (error) yang disebabkan oleh situasi yang TIDAK DAPAT DIGARANSI 100% OKE ketika program dijalankan (saat runtime)
5
Jadi... Ketika Anda mengkode sebuah method yang beresiko, Anda harus menulis kode untuk meng-handle bagaimana apabila BAD THINGS seperti di atas terjadi ?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 ?Bagaimana saya tahu sebuah method itu BERESIKO ? Dan di mana saya menaruh kode untuk meng- handle situasi exceptional tersebut ?Dan di mana saya menaruh kode untuk meng- handle situasi exceptional tersebut ?
6
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 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 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 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 TERSEDIAKode saya membutuhkan suatu OBJEK TERTENTU namun kenyataannya objek tersebut TIDAK TERSEDIA
7
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
8
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); }
9
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 tulisContoh saya mau memanggil SEBUAH METHOD di dalam kelas yang bukan saya tulis METHOD tersebut melakukan SESUATU yang BERESIKO, SESUATU yang mungkin TIDAK JALAN saat RUNTIMEMETHOD tersebut melakukan SESUATU yang BERESIKO, SESUATU yang mungkin TIDAK JALAN saat RUNTIME Saya harus TAHU bahwa METHOD yang dipanggil BERESIKOSaya harus TAHU bahwa METHOD yang dipanggil BERESIKO Sehingga saya dapat MENULIS KODE yang meng- handle BILA KEGAGALAN TERJADI.Sehingga saya dapat MENULIS KODE yang meng- handle BILA KEGAGALAN TERJADI. SIAP2 aja, SEDIA PAYUNG SEBELUM HUJAN!
10
METHOD di JAVA menggunakan exceptions untuk memberitahu kode yang memanggilnya bahwa, ”Something Bad Happened. Saya GAGAL mengatasinya ”
11
Bagaimana CARA untuk meng- handle KODE yang beresiko ? Caranya adalah dengan MEMBUNGKUS kode BERESIKO di dalam bentuk try/catchCaranya adalah dengan MEMBUNGKUS kode BERESIKO di dalam bentuk try/catch Contoh MEMBUNGKUS dengan bentuk try/catchContoh MEMBUNGKUS dengan bentuk try/catch public void play(){ public void play(){try{ //kode beresiko disini } catch(…) {//tangkap exceptionnya //penanganan jika terjadi kesalahan } } // close } // close
12
exception adalah sebuah objek... dari kelas Exception RuntimeException ThrowablegetMessage()printStackTrace() Exceptiontry{ // kode beresiko // kode beresiko } catch(Exception ex){ // try to recover // try to recover}
13
Yang PENTING adalah TAHU Method yang throws exception dan Method yang catch-nya public void takeRisk() throws BadException{ if(gagalSemua){ if(gagalSemua){ throw new BadException(); throw new BadException(); }}//--------------------------------- public void crossFingers(){ try{ try{ anObject.takeRisk(); anObject.takeRisk(); } catch(BadException ex){ } catch(BadException ex){ System.out.println(“Aaargh!”); System.out.println(“Aaargh!”); ex.printStackTrace(); ex.printStackTrace(); } System.out.println(“We made it!”); }
14
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!"); }
15
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); }
16
Kapan finally digunakan ? Kalau developer mau masak sesuatu pake kompor gas, maka developer memulainya dengan memutar tombol untuk menyalakan api di komporKalau 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 MEMADAMKANNYAKalau gas keluar tapi api tidak nyala (FAILURE), developer HARUS MEMADAMKANNYA Kalau api nyala (SUCCESS), selesai masak developer HARUS MEMADAMKANNYA jugaKalau api nyala (SUCCESS), selesai masak developer HARUS MEMADAMKANNYA juga Jadi kode di dalam blok finally HARUS DIJALANKAN MESKIPUN TERJADI EXCEPTION ATAU TIDAKJadi kode di dalam blok finally HARUS DIJALANKAN MESKIPUN TERJADI EXCEPTION ATAU TIDAK
17
Contoh penggunaan finally try{ turnKomporOn(); turnKomporOn(); x.masak(); x.masak(); } catch( MasakException ex ){ ex.printStackTrace(); ex.printStackTrace(); } finally{ turnKomporOff(); turnKomporOff();}
18
CelanaExceptionDalemanException Exception IOException PakaianException BajuException TShirtExceptionKemejaException
19
Sebaiknya Developer mengkode catch block yang berbeda untuk setiap exception yang perlu diperlakukan beda Bila ada blok catch lebih dari satu, maka blok catch harus diurutkan dari terkecil ke terbesar try{ laundry.doLaundry(); laundry.doLaundry(); } catch(TShirtException tex){ // silakan kode untuk TShirtException // silakan kode untuk TShirtException } catch(BajuException dex){ // silakan kode untuk DalemanException // silakan kode untuk DalemanException } catch(PakaianException pex){ // silakan untuk semua exception // silakan untuk semua exception}
20
Kalau ingin TIDAK menghandle, HINDARI SAJA... MENGHINDARI dengan cara MENDEKLARASIKAN exception tersebut public void foo() throws ReallyBadException{ // call risky method without a try/catch // call risky method without a try/catch laundry.doLaundry(); laundry.doLaundry();}
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.