İstisnanın nasıl kullanılacağına dair basit bir örnek:
class IntegerExceptionTest {
public static void main(String[] args) {
try {
throw new IntegerException(42);
} catch (IntegerException e) {
assert e.getValue() == 42;
}
}
}
TRy ifadesinin gövdesi, catch cümlesi tarafından yakalanan belirli bir değerdeki istisnayı fırlatır.
Buna karşılık, yeni bir istisnanın aşağıdaki tanımı, parametreli bir tür oluşturduğundan yasaklanmıştır:
class ParametricException<T> extends Exception {
private final T value;
public ParametricException(T value) { this.value = value; }
public T getValue() { return value; }
}
Yukarıdakileri derleme girişimi bir hata bildirir:
% javac ParametricException.java
ParametricException.java:1: a generic class may not extend
java.lang.Throwable
class ParametricException<T> extends Exception {
^
1 error
Bu kısıtlama mantıklıdır, çünkü bu tür bir istisnayı yakalamaya yönelik hemen hemen her girişimin başarısız olması gerekir, çünkü tür yeniden yapılandırılabilir değildir. İstisnanın tipik kullanımının aşağıdaki gibi olması beklenebilir:
class ParametricExceptionTest {
public static void main(String[] args) {
try {
throw new ParametricException<Integer>(42);
} catch (ParametricException<Integer> e) {
assert e.getValue()==42;
}
}
}
Catch cümlesindeki tür yeniden belirtilebilir olmadığından buna izin verilmez. Bu yazının yazıldığı sırada, Sun derleyicisi böyle bir durumda bir dizi sözdizimi hatası rapor eder:
% javac ParametricExceptionTest.java
ParametricExceptionTest.java:5: <identifier> expected
} catch (ParametricException<Integer> e) {
^
ParametricExceptionTest.java:8: ')' expected
}
^
ParametricExceptionTest.java:9: '}' expected
}
^
3 errors
İstisnalar parametrik olamayacağından, sözdizimi sınırlandırılmıştır, böylece tip, aşağıdaki parametre olmadan bir tanımlayıcı olarak yazılmalıdır.