Berikut adalah contoh sederhana cara menggunakan pengecualian:
class IntegerExceptionTest {
public static void main(String[] args) {
try {
throw new IntegerException(42);
} catch (IntegerException e) {
assert e.getValue() == 42;
}
}
}
Tubuh pernyataan COBALAH melempar pengecualian dengan nilai yang diberikan, yang ditangkap oleh klausa tangkapan.
Sebaliknya, definisi pengecualian baru berikut ini dilarang, karena itu menciptakan tipe parameter:
class ParametricException<T> extends Exception { // compile-time error
private final T value;
public ParametricException(T value) { this.value = value; }
public T getValue() { return value; }
}
Upaya untuk mengkompilasi laporan di atas kesalahan:
% javac ParametricException.java
ParametricException.java:1: a generic class may not extend
java.lang.Throwable
class ParametricException<T> extends Exception { // compile-time error
^
1 error
Pembatasan ini masuk akal karena hampir semua upaya untuk menangkap pengecualian seperti itu harus gagal, karena jenisnya tidak dapat diverifikasi. Orang mungkin mengharapkan penggunaan pengecualian sebagai sesuatu seperti berikut ini:
class ParametricExceptionTest {
public static void main(String[] args) {
try {
throw new ParametricException<Integer>(42);
} catch (ParametricException<Integer> e) { // compile-time error
assert e.getValue()==42;
}
}
}
Ini tidak diizinkan, karena jenis dalam klausa tangkapan tidak dapat diverifikasi. Pada saat penulisan ini, kompiler Sun melaporkan kaskade kesalahan sintaksis dalam kasus seperti ini:
% javac ParametricExceptionTest.java
ParametricExceptionTest.java:5: <identifier> expected
} catch (ParametricException<Integer> e) {
^
ParametricExceptionTest.java:8: ')' expected
}
^
ParametricExceptionTest.java:9: '}' expected
}
^
3 errors
Karena pengecualian tidak bisa parametrik, sintaks dibatasi sehingga jenisnya harus ditulis sebagai pengidentifikasi, tanpa parameter berikut.