09 Exceptions & File I/O

13
ISLAMOPHOBIA İSLAM KORKUSU by Sadık ÇELİK Islamic Script Teacher (High School Principal)

description

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. - PowerPoint PPT Presentation

Transcript of 09 Exceptions & File I/O

Page 1: 09 Exceptions & File I/O

09 Exceptions 09 Exceptions & File I/O& File I/O

OOP JavaOOP Java

Page 2: 09 Exceptions & File I/O

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

Page 3: 09 Exceptions & File I/O

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 !

Page 4: 09 Exceptions & File I/O

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))

Page 5: 09 Exceptions & File I/O

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 ?

Page 6: 09 Exceptions & File I/O

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

Page 7: 09 Exceptions & File I/O

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

Page 8: 09 Exceptions & File I/O

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);

}

}

Page 9: 09 Exceptions & File I/O

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!

Page 10: 09 Exceptions & File I/O

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 ”

Page 11: 09 Exceptions & File I/O

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

Page 12: 09 Exceptions & File I/O

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

}}

Page 13: 09 Exceptions & File I/O

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!”);}}

Page 14: 09 Exceptions & File I/O

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!");

}

}

}

Page 15: 09 Exceptions & File I/O

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);

}

}

Page 16: 09 Exceptions & File I/O

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

Page 17: 09 Exceptions & File I/O

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();

}}

Page 18: 09 Exceptions & File I/O

CelanaExcepCelanaExceptiontion

DalemanExceptiDalemanExceptionon

ExceptionException

IOExceptionIOException PakaianExceptPakaianExceptionion

BajuExceptiBajuExceptionon

TShirtExceptiTShirtExceptionon

KemejaExcepKemejaExceptiontion

Page 19: 09 Exceptions & File I/O

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}}

Page 20: 09 Exceptions & File I/O

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();

}}