原文: https://beginnersbook.com/2013/04/user-defined-exception-in-java/

在 java 中我们已经定义了异常类,例如ArithmeticExceptionNullPointerException等。这些异常已经设置为在预定义条件下触发,例如当你将数字除以零时它会触发ArithmeticException,在上一个教程中我们学习了如何抛出这些异常根据您使用throw关键字的条件明确显示。

在 java 中,我们可以创建自己的异常类,并使用throw关键字抛出该异常。这些异常称为用户定义的自定义异常。在本教程中,我们将了解如何创建自己的自定义异常并将其抛出到特定条件。

要理解本教程,您应该具备try-catch java 中的throw 的基本知识。

Java 中用户定义的异常示例

  1. /* This is my Exception class, I have named it MyException
  2. * you can give any name, just remember that it should
  3. * extend Exception class
  4. */
  5. class MyException extends Exception{
  6. String str1;
  7. /* Constructor of custom exception class
  8. * here I am copying the message that we are passing while
  9. * throwing the exception to a string and then displaying
  10. * that string along with the message.
  11. */
  12. MyException(String str2) {
  13. str1=str2;
  14. }
  15. public String toString(){
  16. return ("MyException Occurred: "+str1) ;
  17. }
  18. }
  19. class Example1{
  20. public static void main(String args[]){
  21. try{
  22. System.out.println("Starting of try block");
  23. // I'm throwing the custom exception using throw
  24. throw new MyException("This is My error Message");
  25. }
  26. catch(MyException exp){
  27. System.out.println("Catch Block") ;
  28. System.out.println(exp) ;
  29. }
  30. }
  31. }

输出:

  1. Starting of try block
  2. Catch Block
  3. MyException Occurred: This is My error Message

说明:

你可以看到,在抛出自定义异常时,我在括号中给出了一个字符串(throw new MyException("This is My error Message");)。这就是为什么我的自定义异常类中有参数化构造函数(带有String参数)的原因。

注意:

  1. 用户定义的异常必须扩展Exception类。
  2. 使用throw关键字抛出异常。

自定义异常的另一个例子

在这个例子中,我们从方法中抛出一个异常。在这种情况下,我们应该在方法签名中使用throws子句,否则你将得到编译错误,说“方法中未处理的异常”。要了解throws子句的工作原理,请参考本指南:java 中的throw关键字

  1. class InvalidProductException extends Exception
  2. {
  3. public InvalidProductException(String s)
  4. {
  5. // Call constructor of parent Exception
  6. super(s);
  7. }
  8. }
  9. public class Example1
  10. {
  11. void productCheck(int weight) throws InvalidProductException{
  12. if(weight<100){
  13. throw new InvalidProductException("Product Invalid");
  14. }
  15. }
  16. public static void main(String args[])
  17. {
  18. Example1 obj = new Example1();
  19. try
  20. {
  21. obj.productCheck(60);
  22. }
  23. catch (InvalidProductException ex)
  24. {
  25. System.out.println("Caught the exception");
  26. System.out.println(ex.getMessage());
  27. }
  28. }
  29. }

输出:

  1. Caught the exception
  2. Product Invalid