تعریف یک استثناء توسط کاربر

در جاوا می توان یک استثناء سفارشی ایجاد کرد. استثناء سفارشی استثنایی است که توسط کاربر تعریف می شود و باید از کلاس پایه Exception ارث بری کند. برای این کار یک کلاس جداگانه که از کلاس پایه Exception ارث می برد ایجاد می کنیم. به کد زیر توجه کنید :

   1: package myfirstprogram;
   2: 
   3: import java.util.Scanner;
   4: 
   5: 
   6: class NegativeNumberException extends Exception
   7: {
   8:     public NegativeNumberException()        
   9:     {
  10:         super("The operation will result to a negative number.");
  11:     }
  12: 
  13:     public NegativeNumberException(String message)
  14:     {
  15:         super(message);
  16:     }
  17: 
  18:     public NegativeNumberException(String message, Exception inner)
  19:     {
  20:         super(message, inner);
  21:     }
  22: }
  23: 
  24: public class MyFirstProgram 
  25: {
  26: 
  27:     public static void main(String[] args) 
  28:     {   
  29:         Scanner input = new Scanner(System.in);
  30:         
  31:         int firstNumber, secondNumber, difference;
  32: 
  33:         System.out.print("Enter the first number: ");
  34:         firstNumber = input.nextInt();
  35: 
  36:         System.out.print("Enter the second number: ");
  37:         secondNumber = input.nextInt();
  38: 
  39:         difference = firstNumber - secondNumber;
  40: 
  41:         try
  42:         {
  43:             if (difference < 0)
  44:             {
  45:                 throw new NegativeNumberException();
  46:             }
  47:         }
  48:         catch (NegativeNumberException error)
  49:         {
  50:             System.out.println(error.getMessage());
  51:         }
  52:     }   
  53: }
Enter the first number: 10
Enter the second number: 11
The operation will result to a negative number.

در خط 6 مشاهده می کنید کلاس ایجاد شده توسط ما از کلاس Exception ارث بری کرده است. به عنوان یک قرارداد باید به آخر نام کلاس های استثنایی که توسط کاربر تعریف می شوند کلمه Exception اضافه شده و 3 سازنده برای آنها تعریف شود.
اولین سازنده بدون پارامتر می باشد.
دومین سازنده یک آرگومان از نوع رشته برای نمایش پیغام خطا قبول می کند.
سومین سازنده که دو آرگومان قبول می کند ، یکی پیغام خطا را نمایش داده و یکی بخش inner است آن برای نشان دادن علت وقوع استثناء می باشد. حال می خواهیم یک کلاس استثناء خیلی سفارشی ایجاد کنیم. به خطوط 51-29 توجه کنید. چون که قرار است که از کاربر ورودی دریافت کنیم از کلاس Scanner در خط 29 استفاده کرده ایم. از آنجاییکه تولید یک عدد منفی در هیچ برنامه ای یک استثناء محسوب نمی شود، ما به صورت دستی و برای خودمان یک استثناء ایجاد کرده ایم. ابتدا از کاربر می خواهیم که دو مقدار را وارد کند(خطوط 37-33). سپس تفاوت دو عدد را محاسبه می کنیم (خط 39). در داخل بلوک try تست می کنیم که آیا حاصل تفریق دو عدد، یک عدد منفی است (خط 47-41). اگر یک عدد منفی بود سپس یک نمونه از کلاس NegativeNumberException ایجاد می کنیم (خط 45). بعد از ایجاد نمونه به وسیله بلوک catch و برای نشان داده پیغام خطا آن را اداره می کنیم (خطوط 51-48).