Java自定义异常–用户定义的异常

时间:2020-02-23 14:36:31  来源:igfitidea点击:

自定义异常或者用户定义的异常在Java应用程序中非常常见。
我们可以轻松地为不同用例创建自定义异常类。

有哪些不同类型的例外?

在Java中,有两类异常:

  • 已检查的异常–这些是可恢复的。
    这些是从Exception类派生的。
    例如,IOException和FileNotFoundException是已检查的异常。

  • 未检查的异常–这些不可恢复,并且在运行时发生。
    这些是从" java.lang.RuntimeException"类派生的。
    例如,NullPointerException和IllegalArgumentException是未经检查的异常。

深度阅读:Java中的异常处理。

接下来,让我们在下一部分中查看自定义例外。

Java自定义异常或者用户定义的异常

自定义异常是用户定义的异常。
这些是由程序员专门为那里的应用程序用例编写的。

要创建一个检查的自定义异常,它必须扩展Exception或者其子类。

未经检查的自定义异常扩展了RuntimeException或者其子类。

所有异常都是Throwable的子级。

在介绍实现部分之前,请注意一些要点。

  • 仅当自定义异常提供了可用异常均不提供的特定用例时,才创建自定义异常。

  • 所有自定义例外都必须遵循标准命名约定。
    那是骆驼的情况,以" Exception"一词结尾。

  • 在所有情况下都使用重载的构造函数。

1.自定义未经检查的异常

自定义未检查的异常示例如下。

package com.theitroad.java;

import java.util.ArrayList;

public class CustomExceptions {

  public static void main(String[] args) {
      ArrayList<String> arrayList = new ArrayList<>();

      arrayList.add("Monday");
      arrayList.add("Tuesday");
      arrayList.add("Wednesday");

      String day = "Sunday";

      if (!arrayList.contains(day)) {

          try {
              throw new DayNotAvailableException("Day not available",day);
          } catch (DayNotAvailableException e) {
              e.getLocalizedMessage();
              e.printStackTrace();
          }
      }

  }
}

class DayNotAvailableException extends RuntimeException {

  private String day;

  public DayNotAvailableException() {
      super();
  }

  public DayNotAvailableException(String message, String day) {
      super(message);
      this.day = day;
  }

  public DayNotAvailableException(String message, String day, Throwable cause) {
      super(message, cause);
      this.day = day;
  }

  @Override
  public String toString() {
      return super.toString();
  }

  @Override
  public String getMessage() {
      return super.getMessage() + " for the day :" + day;
  }

  @Override
  public String getLocalizedMessage() {
      return "The day "+day + " is not available.";
  }
}

Java自定义未经检查的异常

在上面的程序中,当ArrayList中不存在该值时,我们只是抛出一个错误。

在自定义异常中,我们定义了多个构造函数以涵盖不同的情况。

getMessage()和getLocalisedMessage()被重写以提供自定义响应。

2.用户定义的检查异常

这是用户定义的检查异常的简单示例。
我们将扩展Exception类并重写toString()方法。

package com.theitroad.java;

public class EmployeeNotFoundException extends Exception {

	private static final long serialVersionUID = -2872694086602732648L;

	private int id;

	EmployeeNotFoundException(int i, String message) {
		super(message);
		this.id = i;
	}

	EmployeeNotFoundException(int i, String message, String cause) {
		super(message, new Throwable(cause));
		this.id = i;
	}

	@Override
	public String toString() {
		return String.format("EmployeeNotFoundException[%d]", this.id);
	}

}