Exception&Kelas

Download Report

Transcript Exception&Kelas

Try, Catch, Finally
Throws


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,
try{
//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> ){
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
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.
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…

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.
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();
}
}
}
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) {
try {
input.close();
} catch(IOException io) {
}
}
}
}
Konsep kelas
Membuat kelas
Lingkup kelas
Akses ke anggota kelas
Mereferensikan obyek menggunakan perintah this
Konstruktor
Overload konstruktor
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:
1. Single constructor, yaitu hanya ada satu constructor pada class
2. Constructor dengan parameter, yaitu constructor dengan data yang
bisa dikirim pada saat pennciptaan objek.
3. 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:
class Lingkaran
{
private double jariJari;
public Lingkaran()
* Constuctor sebagai
{
setJariJari (1); }
proses inisialisasi, yang
public void setJariJari (double r)
berisi instruksi memanggil
method internal
{
if (r>0) jariJari=r;
}
setJariJari().
public double getJariJari()
* Didefinisikan public
{
return (jariJari);
}
* Memiliki nama sama
public double hitungLuas()
{
return (Math.PI * jariJari * jariJari); dengan
} nama class
public double hitungKeliling()
{
return (Math.PI * 2.0 * jariJari);
}
}
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 :
1. Dideklarasikan sebagai class public
2. Nama Class menjadi nama file
3. 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);
14 }
15
}
}
16 public class CobaLingkaran_1
17 {
18
pulic static void main(String[] args)
19
{
20
Lingkaran abc = new Lingkaran();
21
Lingkaran pqr = new Lingkaran();
22
Lingkaran xyz = new Lingkaran();
23
24
System.out.println (“Data Default :”);
25
System.out.println (“-----------------”);
26
System.out.println (“Jari – Jari ABC : ” + abc.getJariJari());
27
System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari());
28
System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari());
29
System.out.println ();
30
31
32
33
34
35
36
37
38
39
40
41 }
abc.setJariJari(5));
pqr.setJariJari(3.2));
xyz.setJariJari(1.8));
System.out.println (“Data Sekarang :”);
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 ();
}
Bila program ini dijalankan :
Mula-mula ketiga class lingkaran
abc, pgq dan xyz memiliki data jarijari yang sama seperti yang telah
ditentukan class constructor.
Kemudian ketiga class ini diganti
dengan nilai yang baru. Maka output
dari program tersebut adalah:
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
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)
5
{
if (r > 0)
jariJari = r;
6
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)
19
{
20
Lingkaran abc = new Lingkaran(5);
21
Lingkaran pqr = new Lingkaran(3.2);
22
Lingkaran xyz = new Lingkaran(1.8);
23
24
System.out.println (“Data Default :”);
25
System.out.println (“-----------------”);
26
System.out.println (“Jari – Jari ABC : ” + abc.getJariJari());
27
System.out.println (“Jari – Jari PQR : ” + pqr.getJariJari());
28
System.out.println (“Jari – Jari XYZ : ” + xyz.getJariJari());
29
System.out.println ();
30
}
31 }
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 {
3
private double jariJari;
4
public Lingkaran()
5
{
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.

Terima Kasih