09 exceptions & file i/o
Post on 06-Jan-2016
43 Views
Preview:
DESCRIPTION
TRANSCRIPT
09 Exceptions 09 Exceptions & File I/O& File I/O
OOP JavaOOP Java
Materi hari iniMateri hari ini
•ExceptionsExceptions– Apa & kapan exception terjadiApa & kapan exception terjadi– Menangani exceptionMenangani exception– Menghindar (tidak menangani Menghindar (tidak menangani
exception)exception)
•File I/OFile I/O– Pengolahan filePengolahan file– Tulis data ke fileTulis data ke file– Baca data dari fileBaca data dari file
Dalam mengeksekusi Dalam mengeksekusi program program
dapat terjadi banyak dapat terjadi banyak kejadian ...kejadian ...
• File tidak adaFile tidak ada• Server downServer down
• Sehebat apapun Anda jadi Sehebat apapun Anda jadi DEVELOPER, Anda tidak dapat DEVELOPER, Anda tidak dapat mengontrol semuanyamengontrol semuanya
THINGS CAN GO WRONG !THINGS CAN GO WRONG !
Bugs dan ExceptionalBugs dan Exceptional
• Bugs adalah kesalahan (Bugs adalah kesalahan (errorerror) yang ) yang disebabkan disebabkan KODEKODE saya yang tidak benar saya yang tidak benar (salah sintaks, dll). (salah sintaks, dll).
SEDANGKANSEDANGKAN
• Exceptional adalah kesalahan (error) Exceptional adalah kesalahan (error) yang disebabkan oleh yang disebabkan oleh situasi yang situasi yang TIDAK DAPAT DIGARANSI 100% OKETIDAK DAPAT DIGARANSI 100% OKE ketika program dijalankan (saat ketika program dijalankan (saat runtimeruntime))
Jadi ... Jadi ...
• Ketika Ketika Anda mengkode sebuah Anda mengkode sebuah method yang beresikomethod yang beresiko, , Anda harus Anda harus menulis kode untuk meng-handlemenulis kode untuk meng-handle bagaimana apabila BAD THINGS seperti bagaimana apabila BAD THINGS seperti di atas terjadi ?di atas terjadi ?
Pertanyaannya…Pertanyaannya…• Bagaimana saya tahu sebuah method Bagaimana saya tahu sebuah method
itu BERESIKO ?itu BERESIKO ?• Dan di mana saya menaruh kode untuk Dan di mana saya menaruh kode untuk
meng-handle situasi meng-handle situasi exceptionalexceptional tersebut ?tersebut ?
Seperti apa sih Situasi Seperti apa sih Situasi EXCEPTIONAL yang EXCEPTIONAL yang
dimaksud ?dimaksud ?• Kode saya yang mengharapkan ADA FILE Kode saya yang mengharapkan ADA FILE di DIREKTORI C:\JAVA, namun di DIREKTORI C:\JAVA, namun kenyataannya TIDAK ADA.kenyataannya TIDAK ADA.
• Kode saya yang mengharapkan SERVER Kode saya yang mengharapkan SERVER SUDAH RUNNING, namun kenyataannya SUDAH RUNNING, namun kenyataannya TIDAK seperti yg diharapkan.TIDAK seperti yg diharapkan.
• Kode saya yang hendak membuat FILE Kode saya yang hendak membuat FILE BARU dengan nama Robinhood.java, BARU dengan nama Robinhood.java, namun kenyataannya sudah ADA file dg namun kenyataannya sudah ADA file dg nama yg sama.nama yg sama.
• Kode saya membutuhkan suatu OBJEK Kode saya membutuhkan suatu OBJEK TERTENTU namun kenyataannya objek TERTENTU namun kenyataannya objek tersebut TIDAK TERSEDIAtersebut TIDAK TERSEDIA
Contoh Situasi ExceptionalContoh Situasi Exceptional“Pembagian dengan NOL”“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 :Contoh Situasi Exceptional :Tipe data yg diinput user tidak Tipe data yg diinput user tidak
sesuaisesuai//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 Apa yang terjadi ketika method method
yang saya panggil yang saya panggil (kemungkinan bukan saya (kemungkinan bukan saya
yg tulis) BERESIKO ?yg tulis) BERESIKO ?• Contoh saya mau memanggil SEBUAH Contoh saya mau memanggil SEBUAH METHOD di dalam kelas yang bukan saya METHOD di dalam kelas yang bukan saya tulistulis
• METHOD tersebut melakukan SESUATU METHOD tersebut melakukan SESUATU yang BERESIKO, SESUATU yang mungkin yang BERESIKO, SESUATU yang mungkin TIDAK JALAN saat RUNTIMETIDAK JALAN saat RUNTIME
• Saya harus TAHU bahwa METHOD yang Saya harus TAHU bahwa METHOD yang dipanggil BERESIKOdipanggil BERESIKO
• Sehingga saya dapat MENULIS KODE yang Sehingga saya dapat MENULIS KODE yang meng-handle BILA KEGAGALAN TERJADI. meng-handle BILA KEGAGALAN TERJADI. SIAP2 aja, SEDIA PAYUNG SEBELUM SIAP2 aja, SEDIA PAYUNG SEBELUM HUJAN!HUJAN!
METHOD di JAVA METHOD di JAVA menggunakan menggunakan exceptionsexceptions untuk memberitahu kode untuk memberitahu kode
yang memanggilnya yang memanggilnya bahwa,bahwa,
”Something Bad ”Something Bad Happened. Saya GAGAL Happened. Saya GAGAL
mengatasinya ”mengatasinya ”
Bagaimana CARA untuk Bagaimana CARA untuk meng-handle KODE yang meng-handle KODE yang
beresiko ?beresiko ?• Caranya adalah dengan MEMBUNGKUS kode Caranya adalah dengan MEMBUNGKUS kode
BERESIKO di dalam bentuk BERESIKO di dalam bentuk try/catchtry/catch• Contoh MEMBUNGKUS dengan bentuk Contoh MEMBUNGKUS dengan bentuk try/catchtry/catch
public void play(){public void play(){
try{try{
//kode beresiko disini//kode beresiko disini
} catch(…) {} catch(…) { //tangkap exceptionnya//tangkap exceptionnya
//penanganan jika terjadi kesalahan//penanganan jika terjadi kesalahan
}}
} // close} // close
exception adalah sebuah exception adalah sebuah objek ...objek ...
dari kelas Exceptiondari kelas Exception
RuntimeExceptiRuntimeExceptionon
ThrowableThrowable
getMessage(getMessage())
printStackTrprintStackTrace()ace()
ExceptionExceptiontry{try{
// kode beresiko// kode beresiko
} catch(Exception ex){} catch(Exception ex){
// try to recover// try to recover
}}
Yang PENTING adalah TAHU Yang PENTING adalah TAHU Method yang Method yang throwsthrows exception exception
dan Method yang dan Method yang catchcatch-nya-nyapublic void takeRisk() throws BadException{public void takeRisk() throws BadException{ if(gagalSemua){if(gagalSemua){ throw new BadException();throw new BadException(); }}}}
//---------------------------------//---------------------------------
public void crossFingers(){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!”);System.out.println(“We made it!”);}}
Contoh Situasi Exceptional : Tipe Contoh Situasi Exceptional : Tipe data yg diinput user tidak sesuai data yg diinput user tidak sesuai
(sudah ditangani)(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 :Contoh Situasi Exceptional :Tipe data yg diinput user tidak Tipe data yg diinput user tidak
sesuai (sudah ditangani dg lebih sesuai (sudah ditangani dg lebih baik)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 Kapan finallyfinally digunakan ?digunakan ?
• Kalau developer mau masak sesuatu pake Kalau developer mau masak sesuatu pake kompor gas, maka developer memulainya kompor gas, maka developer memulainya dengan memutar tombol untuk menyalakan dengan memutar tombol untuk menyalakan api di komporapi di kompor
• Kalau gas keluar tapi api tidak nyala Kalau gas keluar tapi api tidak nyala (FAILURE), developer HARUS (FAILURE), developer HARUS MEMADAMKANNYAMEMADAMKANNYA
• Kalau api nyala (SUCCESS), selesai masak Kalau api nyala (SUCCESS), selesai masak developer HARUS MEMADAMKANNYA jugadeveloper HARUS MEMADAMKANNYA juga
• Jadi kode di dalam blok finally HARUS Jadi kode di dalam blok finally HARUS DIJALANKAN MESKIPUN TERJADI DIJALANKAN MESKIPUN TERJADI EXCEPTION ATAU TIDAK EXCEPTION ATAU TIDAK
Contoh penggunaan Contoh penggunaan finallyfinally
try{try{
turnKomporOn();turnKomporOn();
x.masak();x.masak();
} catch( MasakException ex ){} catch( MasakException ex ){
ex.printStackTrace();ex.printStackTrace();
} finally{} finally{
turnKomporOff();turnKomporOff();
}}
CelanaExcepCelanaExceptiontion
DalemanExceptiDalemanExceptionon
ExceptionException
IOExceptionIOException PakaianExceptPakaianExceptionion
BajuExceptiBajuExceptionon
TShirtExceptiTShirtExceptionon
KemejaExcepKemejaExceptiontion
Sebaiknya Developer mengkode Sebaiknya Developer mengkode catch block yang berbeda untuk catch block yang berbeda untuk setiap exception yang perlu setiap exception yang perlu diperlakukan bedadiperlakukan bedaBila ada blok catch lebih dari Bila ada blok catch lebih dari satu, maka blok catch harus satu, maka blok catch harus diurutkan dari terkecil ke terbesardiurutkan dari terkecil ke terbesartry{try{
laundry.doLaundry();laundry.doLaundry();} catch(TShirtException tex){} catch(TShirtException tex){ // silakan kode untuk TShirtException// silakan kode untuk TShirtException} catch(BajuException dex){} catch(BajuException dex){ // silakan kode untuk DalemanException// silakan kode untuk DalemanException} catch(PakaianException pex){} catch(PakaianException pex){ // silakan untuk semua exception// silakan untuk semua exception}}
Kalau ingin TIDAK Kalau ingin TIDAK menghandle, HINDARI menghandle, HINDARI
SAJA ...SAJA ...MENGHINDARI dengan cara MENGHINDARI dengan cara
MENDEKLARASIKAN exception MENDEKLARASIKAN exception tersebuttersebut
public void foo() throws ReallyBadException{public void foo() throws ReallyBadException{
// call risky method // call risky method withoutwithout a try/catch a try/catch
laundry.doLaundry();laundry.doLaundry();
}}
top related