Java教程-Java自定义异常

Java自定义异常
在Java中,我们可以创建自己的异常,这些异常是Exception类的派生类。创建自定义异常也称为自定义异常或用户定义异常。基本上,Java自定义异常用于根据用户的需要自定义异常。
考虑示例1,其中InvalidAgeException类扩展了Exception类。
使用自定义异常,我们可以拥有自己的异常和消息。在这里,我们将一个字符串传递给父类的构造函数,即Exception类的构造函数,可以使用getMessage()方法获取我们创建的对象的消息。
在本节中,我们将学习如何在Java程序中实现和使用自定义异常。
为什么要使用自定义异常?
Java异常涵盖了编程中可能出现的几乎所有常见类型的异常。然而,有时我们需要创建自定义异常。
以下是使用自定义异常的几个原因:
- 捕获和针对现有Java异常的特定处理。
- 业务逻辑异常:这些异常与业务逻辑和工作流程有关。对于应用程序用户或开发人员来说,了解确切的问题非常有用。
为了创建自定义异常,我们需要扩展属于java.lang包的Exception类。
考虑以下示例,我们创建一个名为WrongFileNameException的自定义异常:
public class WrongFileNameException extends Exception {
public WrongFileNameException(String errorMessage) {
super(errorMessage);
}
}
注意:我们需要编写一个以字符串为错误消息的构造函数,并且调用父类构造函数时使用super()方法。同时,可以在不使用参数的情况下调用Exception类的构造函数,但调用super()方法并非强制性。
示例1:
让我们看一个简单的Java自定义异常的例子。在下面的代码中,InvalidAgeException的构造函数以字符串作为参数。这个字符串通过super()方法传递给父类Exception的构造函数。也可以在不使用参数的情况下调用Exception类的构造函数,但调用super()方法并非强制性。
TestCustomException1.java
//表示自定义异常的类
class InvalidAgeException extends Exception
{
public InvalidAgeException (String str)
{
// 调用父异常的构造函数
super(str);
}
}
// 使用自定义异常 InvalidAgeException 的类
public class TestCustomException1
{
// 检查年龄的方法
static void validate (int age) throws InvalidAgeException{
if(age < 18){
// 抛出一个用户定义异常的对象
throw new InvalidAgeException("age is not valid to vote");
}
else {
System.out.println("welcome to vote");
}
}
//主要方法
public static void main(String args[])
{
try
{
// 调用方法
validate(13);
}
catch (InvalidAgeException ex)
{
System.out.println("Caught the exception");
//打印来自 InvalidAgeException 对象的消息
System.out.println("Exception occured: " + ex);
}
System.out.println("rest of the code...");
}
}
输出:
示例2:
TestCustomException2.java
// 表示自定义异常的类
class MyCustomException extends Exception
{
}
//使用自定义异常 MyCustomException 的类
public class TestCustomException2
{
// 主要方法
public static void main(String args[])
{
try
{
// 抛出一个用户定义异常的对象
throw new MyCustomException();
}
catch (MyCustomException ex)
{
System.out.println("Caught the exception");
System.out.println(ex.getMessage());
}
System.out.println("rest of the code...");
}
}
输出: