Exception Handling
Pengertian
Exception
Suatu
program apabila mengalami kesalahan akan menghasilkan suatu runtime errors seperti
gagal membuka file, suatu program melakukan akses diatas range array
dan lain-lain. ketika runtime errors tersebut terjadi, aplikasi akan
membuat suatu exception. Java exception merupakan
instance dari class Throwable. Throwable class terdapat dalam
java.lang package
Jenis-jenis
Exception
§
Exception
class merupakan
kesalahan yang disebabkan oleh program dan kesalahan external. Kesalahan
jenis ini dapat ditangkap dan diatasi oleh program. Exception terdiri
dari banyak subclass
§
Error
class merupakan
class yang berhubungan dengan kesalahan pada internal system.
Jika terjadi kesalahan jenis ini maka hanya dapat dilakukan bagaimana memberitahu
kepada pemakai dan melakukan pengakhiran program.
Cara menggunakan
Exception
Java exception
dibagi menjadi tiga buah operasi yaitu :
1. Claiming an
exception
Claiming
an exception dimaksudkan
dengan menyatakan exception apa saja yang mungkin terjadi dalam suatu
main() ataupun dalam method. Untuk system errors dan runtime errors tidak
perlu dilakukan klaim karena kedua macam kesalahan ini dapat terjadi dimana
saja.
Untuk
melakukan claiming an exception dilakukan dengan menggunakan throws
keyword. Contoh
:
public void myMethod() throws IOException
{
...
}
untuk
melakukan klaim terhadap banyak exception dapat dilakukan dengan menambahkan
exception dipisahkan dengan koma ( , ).
method_declaration throws Exception1, Exception2,
...Exception n
2. Throwing an
exception
Throwing
an exception dimaksudkan
dengan apabila suatu kesalahan terjadi maka method berisi statement yang
melakukan claiming an exception tersebut membuat suatu exception object
yang dilempar ke dalam sistem.
Untuk
melakukan throwing exception kita menggunakan keyword throw didalam method
yang telah melakukan claim exception.
throw ExceptionObjectInstance;
3. Catching an
exception
Catching
an exception dimaksudkan
apabila exception object yang dilempar kedalam sistem akan ditangkap
untuk diatasi dalam exception handler. Metode pencarian handler ini
dilakukan secara backward yaitu pencarian dimulai dengan method yang
dieksekusi sampai ke pemanggil method tersebut.
Untuk
melakukan catching an exception dapat dilakukan digunakan suatu blok
trycatch.
try {
statements; //
statements that may throw exceptions
}
catch (Exception1 ex) {
handler for
Exception1;
}
catch (Exception2 ex) {
handler for
Exception2;
}
...
catch(ExceptionN ex) {
handler for
ExceptionN;
}
jika
tidak terjadi suatu exception pada statements maka blok catch akan
dilewati. Jika ada suatu exception yang dikenali pada blok catch maka
exception akan diatasi oleh handler statement untuk exception tersebut.
Sedangkan jika ada suatu exception yang tidak dikenali maka java keluar
dari method dan mengirim exception ke method sebelumnya yang memanggil
method tersebut. Hal ini dilakukan sampai method pemanggil awal dicapai dan
bila masih belum terdapat handler dari exception ini maka program
terhenti dan menampilkan pesan ke java console. Exception object membawa
informasi penting mengenai exception yang terjadi.
Membuat
Exception Class
Selain
menggunakan exception class yang sudah ada pada java, exception class
dapat diturunkan menjadi suatu exception class yang baru. Cara
membuatnya adalah dengan menurunkan exception class dan meng-override
method toString() atau getLocalizedMessage().
Perhatikan
contoh berikut :
Pada
ExceptionTest.java
public class ExceptionTest {
public static void
main(String [] args) {
int x = 2;
int y = 3;
try {
if((x==2) && (y==3))
throw new MyException(x,y);
System.out.println(x/y);
} catch (MyException ex) {
System.out.println(ex.toString());
}
System.out.println("this
never executed");
}
}
Pada
MyException.java
class MyException extends Exception {
int x;
int y;
MyException(int
x,int y) {
super("MyException");
this.x = x;
this.y = y;
}
public String
toString() {
return(""+x+" divide by
"+y);
}
}
Rethrowing
Exception
Ketika
suatu exception terjadi dalam suatu method, maka alir program akan
keluar dari method jika suatu tidak ditangkap pada method tersebut. Jika ingin
melakukan beberapa operasi yang harus dilakukan sebelum keluar dari method maka
exception dapat ditangkap terlebih dahulu baru kemudian dilempar kembali
ke handler yang sebenarnya.
Strukturnya
adalah sebagai berikut :
try {
statements;
}
catch(TheException ex) {
perform operations
before exits;
throw ex;
}
Klausa finally
Finally
digunakan
apabila menginginkan menjalankan suatu operasi tanpa dipengaruhi apakah terjadi
exception atau tidak. Dengan finally suatu operasi tidak akan mengalami
peloncatan alur.
Struktur
try-cacth-finally adalah sebagai berikut :
try {
statements;
}
catch(TheException ex) {
handling ex
statements;
}
finally {
finalStatements;
}
Perhatikan tiga
kasus berikut :
1. Jika tidak ada exception dalam
blok try-catch, maka finalStatements akanselalu dieksekusi dan statement
selanjutnya setelah blok try-catch dieksekusi.
2. Jika salah satu statement dalam
blok try-catch menyebabkan exception dan ditangkap oleh blok catch
. Statement selanjutnya dalam blok try akan diloncati,
kemudian finalStatements. Jika exception tidak di lempar ulang dengan
menggunakan keyword throw maka statement setelah blok try-catch
akan dieksekusi. Akan tetapi sebaliknya maka eksekusi akan dikembalikan ke
method pemanggilnya.
3. Jika salah satu statement dalam
blok try-catch menyebabkan exception dan tidak ada blok catch yang
memenuhi exception tersebut maka statement dalam blok try akan
diloncati dan finalStatements dijalankan dan eksekusi akan dikembalikan ke
method pemanggilnya.
Garbage
Collection
Banyak bahasa
pemrogaman lain yang mengijinkan seorang pemrogram
mengalokasikan memori pada saat dijalankan.
Namun, setelah menggunakan alokasi memori tersebut, harus terdapat cara untuk
menempatkan kembali blok memori tersebut supaya program lain dapat
menggunakannya. Dalam C, C++ dan bahasa lainnya, adalah pemrogram yang mutlak
bertanggung jawab akan hal ini. Hal ini dapat menyulitkan bilamana pemrogram
tersebut alpa untuk mengembalikan blok memori sehingga menyebabkan situasi yang
dikenal dengan nama memory leaks.
Program Java
melakukan garbage collection yang berarti program tidak perlu menghapus sendiri
objek – objek yang tidak digunakan lagi. Fasilitas ini mengurangi beban
pengelolaan memori oleh pemrogram dan mengurangi atau mengeliminasi sumber
kesalahan terbesar yang terdapat pada bahasa yang memungkinkan alokasi dinamis.
Garbage
Collection adalah suatu mekanisme yang dilaksanakan dengan algoritma tersendiri
untuk melacak state dari object(object masih terpakai atau tidak) dan untuk
melakukan penghapusan object. Garbage Collection terus berlangsung selama
program kita berjalan. Pada saat-saat tertentu Garbage Collection akan
melakukan pencatatan state dari suatu object. Dan apabila object tersebut sudah
tidak terpakai lagi(misalnya tidak ada variabel yang merujuk kepada object
tersebut) maka object ini kemudian akan dianggap sampah dan apabila program
memerlukan memory tambahan maka object tersebut akan dihapus dan memory-nya
dibebaskan. Yang melaksanakan semua mekanisme ini disebut sebagai Garbage
Collector(Istilah lainnya Garbage Collector adalah sebuah bagian dari CLR yang
menjalankan mekanisme Garbage Collection).
Jadi pada C#,
object yang di-null-kan tidak langsung dihapus dari memory. Itu semua terserah
dari Garbage Collector dan bagaimana Algoritma Garbage Collection itu
dilaksanakan. Kita tidak dapat mengetahui secara pasti kapan suatu object
dihapus dari memory, tetapi ada suatu
keadaan dimana ketika object dihapus dari memory dan kita ingin program kita
melaksanakan sesuatu. Untuk itu maka C# punya yang namanya Destructor.
Destructor di C#
tidak lebih dari sebuah method yang akan dipanggil oleh CLR sesaat sebelum
object dihapus dari memory. Makanya Destructor di C# namanya harus didahului
dengan tanda ~, misalnya ~SomeClass. Tujuannya supaya program kita tidak bisa
memanggil Destructor secara langsung. Jadi Destructor di C# bisa dikatakan sangat
berbeda dengan destructor di C. Oleh karena itu Destructor di C# disebut juga
Finalize Method.
Modular Type
Checking for Hierarchically Extensible Data Types and Functions
Salah satu pendekatan yang
menjanjikan untuk menambahkan object-oriented (OO) fasilitas untuk bahasa
fungsional seperti ML adalah untuk menggeneralisasi datatype yang ada dan
konstruksi fungsi menjadi hirarkis dan extensible, sehingga varian datatype
mensimulasikan kelas dan kasus fungsi mensimulasikan metode. Pendekatan ini
memungkinkan datatypes ada untuk dengan mudah diperluas dengan kedua operasi
baru dan varian baru, menyelesaikan konflik lama antara gaya fungsional dan OO.
Namun, desain sebelumnya didasarkan pada pendekatan ini telah dipaksa untuk
menyerah modular typechecking, membutuhkan seluruh Program pemeriksaan untuk
memastikan keselamatan jenis. Kami menjelaskan ML Extensible (EML), bahasa
ML-seperti yang mendukung hirarkis, datatypes extensible dan fungsi sambil
menjaga murni modular typechecking. Untuk mencapai hasil ini, sistem tipe EML
yang memberlakukan beberapa persyaratan pada datatype dan diperpanjang fungsi,
namun EML masih mampu mengekspresikan idiom fungsional dan OO tradisional. Kami
telah diformalkan versi inti EML dan terbukti suara jenis sistem yang terkait,
dan kami telah mengembangkan prototipe untuk juru bahasa.
Secure
Code/Security Code
Hari ini
sistem komputer yang terhubung sangat sering terkena kode yang berasal dari
berbagai sumber yang mungkin tidak diketahui. Kode dapat dilampirkan ke e-mail,
yang terkandung dalam dokumen, atau di-download melalui Internet. Sayangnya,
banyak pengguna komputer telah mengalami langsung dampak dari kode mobile
berbahaya, termasuk virus dan worm, yang dapat merusak atau menghancurkan data
dan waktu biaya dan uang.
Mekanisme
keamanan yang paling umum memberikan hak kepada pengguna berdasarkan kredensial
logon mereka (biasanya password) dan membatasi sumber daya (sering direktori
dan file) bahwa pengguna diperbolehkan untuk mengakses. Namun, pendekatan ini
gagal untuk mengatasi beberapa masalah: pengguna mendapatkan kode dari berbagai
sumber, beberapa di antaranya mungkin tidak dapat diandalkan, kode dapat
mengandung bug atau kerentanan yang memungkinkan untuk dimanfaatkan oleh kode
berbahaya, dan kode kadang-kadang melakukan hal-hal bahwa pengguna tidak tahu
itu akan dilakukan. Akibatnya, sistem komputer bisa rusak dan data pribadi
dapat bocor ketika pengguna berhati-hati dan dapat dipercaya menjalankan
perangkat lunak berbahaya atau kesalahan-penuh. Mekanisme sistem operasi
keamanan yang paling mengharuskan setiap potongan kode harus benar-benar
dipercaya dalam rangka untuk menjalankan, kecuali mungkin untuk script pada
halaman web. Oleh karena itu, masih ada kebutuhan untuk mekanisme keamanan yang
berlaku secara luas yang memungkinkan kode yang berasal dari satu sistem
komputer untuk mengeksekusi dengan perlindungan pada sistem yang lain, bahkan
ketika tidak ada hubungan kepercayaan antara sistem.
Untuk
membantu melindungi sistem komputer dari kode ponsel berbahaya, untuk
memungkinkan kode dari asal tidak diketahui untuk menjalankan dengan
perlindungan, dan untuk membantu mencegah kode terpercaya dari mengorbankan
keamanan sengaja atau tidak sengaja, Framework. NET menyediakan mekanisme
keamanan yang disebut kode keamanan akses. Kode keamanan akses memungkinkan
kode bisa dipercaya untuk berbagai derajat tergantung di mana kode berasal dan
pada aspek lain dari identitas kode itu. Kode akses keamanan juga memberlakukan
berbagai tingkat kepercayaan pada kode, yang meminimalkan jumlah kode yang
harus dipercaya sepenuhnya dalam rangka untuk menjalankan. Menggunakan kode
keamanan akses dapat mengurangi kemungkinan bahwa kode Anda dapat
disalahgunakan oleh kode berbahaya atau kesalahan-penuh. Hal ini dapat mengurangi
kewajiban Anda karena Anda dapat menentukan seperangkat operasi kode Anda harus
diizinkan untuk melakukan serta operasi kode Anda tidak boleh diizinkan untuk
melakukan. Kode akses keamanan juga dapat membantu meminimalkan kerusakan yang
dapat terjadi akibat kerentanan keamanan dalam kode Anda.Semua kode dikelola
yang menargetkan runtime bahasa umum menerima manfaat keamanan kode akses,
bahkan jika kode yang tidak membuat kode akses panggilan keamanan tunggal.
Namun, semua aplikasi harus membuat permintaan kode akses, seperti yang
dijelaskan dalam Dasar-Dasar Keamanan Kode Akses.
http://sutondoscript.blogspot.com/2011/03/pengertian-java-virtual-machine-jvm.html