ব্যতিক্রমটি কীভাবে ব্যবহার করবেন তার একটি সাধারণ উদাহরণ এখানে:
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
যেহেতু ব্যতিক্রমগুলি প্যারাম্যাট্রিক হতে পারে না, সিনট্যাক্সটি সীমিত করা হয় যাতে টাইপটি সনাক্তকারী হিসাবে লিখতে হবে, নিম্নলিখিত প্যারামিটার ছাড়াই।