Belajar Pemrograman Java Dari Dasar

Mengenal Tipe-tipe Exception Pada Java

Seperti sudah anda ketahui sbelumnya bahwa exception merupakan sebuah objek. Dan pada Java objek didefinisikan dari suatu class.

Jadi class apakah yang menghasilkan objek exception? Root class untuk exception adalah java.lang.Throwable.

Pada pembahasan sebelumnya anda sudah mengetahui mengenai ArithmeticException dan InputMismatchException. Apakah masih ada lagi tipe exception lainnya? Atau apakah anda bisa menetapkan sendiri class-class exception tersebut? Jawabannya adalah masih banyak lagi tipe lainnya dan anda bisa menetapkan sendiri class exception anda.

Tipe Exception Java


Pada Java API terdapat banyak sekali class-class exception yang sudah didefinisikan sebelumnya. Gambar di bawah ini menujukkan hirarki untuk ArithmeticException dan InputMismatchException.

hirarki exception Java


Nama-nama class seperti Error, Exception, dan RuntimeException agak membingungkan. Ketiga class tersebut adalah exceptions dan semua error terjadi pada saat runtime.

Semua exceptions dalam Java inherit secara langsung ataupun tidak langsung dari class Throwable. Anda dapat membuat sendiri class-class exceptions dengan membuat subclass dari class Exception.

Klasifikasi Class-class Exceptions

Class-class exceptions itu sendiri dapat diklasifikasikan menjadi 3 tipe, yaitu:
  • System error
  • Exceptions
  • Runtime exceptions
System error dilontarkan oleh JVM dan direpresentasikan pada class Error. Error class ini akan menjelaskan mengenai sistem error internal, meskipun hal ini jarang terjadi. Namun jika error ini terjadi maka tidak banyak yang bisa dilakukan selain memberitahu user dan menghentikan program dengan baik.

Beberapa subclass dari class Error adalah:
  • AnnotationFormatError
  • AssertionError
  • AWTError
  • CoderMalfunctionError
  • FactoryConfigurationError
  • FactoryConfigurationError
  • IOError, LinkageError
  • ServiceConfigurationError
  • ThreadDeath
  • TransformerFactoryConfigurationError
  • VirtualMachineError
Exceptions direpresentasikan dalam class Exception yang menggambarkan kesalahan yang disebabkan karena program anda sendiri dan oleh sebab eksternal. Namun, error ini dapat ditangkap dan ditangani oleh program anda.

Beberapa subclass dari class Exception diantaranya adalah:
  • IOException,
  • RuntimeException, 
  • TimeoutException
  • UnsupportedLookAndFeelException
  • XMLParseException
dan masih sangat banyak lagi yang lainnya.

Runtime exceptions direpresentasikan pada class RuntimeException yang menjelaskan mengenai kesalahan pada pemrograman seperti kesalahan casting, mengakses array out-of-bounds, dan juga error numerik. Runtime exceptions ini pada umumnya dilontarkan oleh JVM.

Beberapa subclass dari class RuntimeException  diantaranya adalah:
  • ClassCastException
  • EmptyStackException
  • EventException
  • IllegalArgumentException, 
  • IndexOutOfBoundsException
  • NullPointerException
dan lain sebagainya.

Unchecked dan Checked Exceptions

RuntimeException, Error, dan para subclassnya adalah termasuk unchecked exceptions. Sementara itu, exceptions lainnya disebut dengan checked exceptions yang artinya compiler akan memaksa programmer untuk memeriksa dan mengatasinya dengan blok try-catch atau mendeklarasikannya pada header method.



Di dalam kebanyakan kasus, unchecked exceptions mencerminkan logic error pada pemrograman yang tidak terpulihkan.

Misalnya NullPointerException akan muncul ketika anda mengakses objek melalui variabel referensi sebelum objek tersebut ditetapkan pada referensi tersebut. Atau contoh lainnya adalah IndexOutOfBoundsException yang muncul ketika anda mencoba untuk mengakses elemen array di luar dari indexnya.

Logic error ini harus dikoreksi di dalam program. Unchecked exceptions dapat terjadi di mana saja di dalam program. Oleh karena itu, untuk menghindari penggunaan blok try-catch yang tidak praktis, maka Java tidak memandatkan menulis kode untuk menangkap atau mendeklarasikan unchecked exceptions tersebut.

Checked exceptions digunakan dalam situasi di mana kegagalan harus diantisipasi. Salah satu alasan umum kegagalan adalah input dan output. File mungkin saja rusak dan koneksi jaringan mungkin gagal.

Sejumlah class-class exception inherit dari IOException, dan Anda harus menggunakan yang sesuai untuk melaporkan error-error yang Anda hadapi. Misalnya, ketika file yang seharusnya ada ternyata tidak ada, maka FileNotFoundException akan terlontar.

Terkadang perlu untuk menggunakan keputusan ketika membedakan antara checked dan unchecked exception. Misalkan ketika memanggil method Integer.parseInt (str) yang akan melontarkan unchecked  NumberFormatException saat str tidak mengandung integer yang valid. Di sisi lain, method Class.forName (str) akan melontarkan checked ClassNotFoundException bila str tidak mengandung nama kelas yang valid.

Apa bedanya dari kedua hal di atas?

Alasannya adalah menjadi sesuatu yang mungkin untuk memeriksa apakah sebuah string adalah integer sebelum memanggil Integer.parseInt, namun tidak mungkin untuk mengetahui apakah sebuah class dapat di load sampai Anda benar-benar mencoba untuk me-load-nya.

Java API menyediakan banyak kelas exception, seperti IOException, IllegalArgumentException, dan sebagainya. Anda harus menggunakan ini jika sesuai dengan keperluan.

Namun, jika tidak ada kelas exception standar yang sesuai untuk tujuan Anda, maka Anda dapat membuatnya sendiri dengan mewarisi atau extend dari class Exception, RuntimeException, atau class exception lainnya. Bila Anda melakukan hal tersebut, merupakan ide yang baik jika Anda memberikan konstruktor tanpa argumen dan konstruktor dengan string pesan.

Seperti contoh di bawah ini:


Share on Facebook
Share on Twitter
Share on Google+

Tempat berbagi pengetahuan untuk bahasa pemrograman Java

Related : Mengenal Tipe-tipe Exception Pada Java