यहाँ अपवाद का उपयोग करने का एक सरल उदाहरण है:
class IntegerExceptionTest {
public static void main(String[] args) {
try {
throw new IntegerException(42);
} catch (IntegerException e) {
assert e.getValue() == 42;
}
}
}
टीआरआई बयान का शरीर एक दिए गए मूल्य के साथ अपवाद को फेंकता है, जिसे कैच क्लॉज द्वारा पकड़ा जाता है।
इसके विपरीत, एक नए अपवाद की निम्न परिभाषा निषिद्ध है, क्योंकि यह एक पैरामीटर प्रकार बनाता है:
class ParametricException<T> extends Exception { // compile-time error
private final T value;
public ParametricException(T value) { this.value = value; }
public T getValue() { return value; }
}
उपरोक्त रिपोर्ट को एक त्रुटि संकलन का प्रयास:
% 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
यह प्रतिबंध समझदार है क्योंकि इस तरह के अपवाद को पकड़ने का लगभग कोई भी प्रयास विफल होना चाहिए, क्योंकि प्रकार अस्वीकार्य नहीं है। एक अपवाद के एक विशिष्ट उपयोग की उम्मीद कर सकते हैं जैसे कुछ निम्नलिखित हो:
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;
}
}
}
यह अनुमति नहीं है, क्योंकि कैच क्लॉज में प्रकार पुन: प्रयोज्य नहीं है। इस लेखन के समय, सन कंपाइलर ऐसे मामले में वाक्य रचना त्रुटियों की एक झरना रिपोर्ट करता है:
% javac ParametricExceptionTest.java
ParametricExceptionTest.java:5: <identifier> expected
} catch (ParametricException<Integer> e) {
^
ParametricExceptionTest.java:8: ')' expected
}
^
ParametricExceptionTest.java:9: '}' expected
}
^
3 errors
क्योंकि अपवाद पैरामीट्रिक नहीं हो सकते हैं, वाक्यविन्यास प्रतिबंधित है ताकि टाइप को एक पहचानकर्ता के रूप में लिखा जाए, जिसमें कोई निम्न पैरामीटर न हो।