在Java中创建一个自定义的异常类(附实例)

149 阅读2分钟

Java 提供了许多Exception 类的子类,这些子类应该足以处理所有在 Java 应用程序运行时可能发生的一般异常。

然而,有时你可能需要创建一个特定于你的应用逻辑的自定义异常。

要在Java中创建一个自定义的异常,你需要扩展默认的Exception ,该类是所有Java异常类型的超类。

让我们看一个例子,当一个字符串不包含某个单词时,抛出一个自定义异常。

在这种情况下,myString 变量需要包含单词Java 或者你需要抛出一个名为InvalidStringException 的自定义异常。

首先,创建InvalidStringException 类,它扩展了Exception 类。这个类至少需要有一个接受errorMessage 的构造函数,如下所示:

class InvalidStringException extends Exception {
public InvalidStringException(String errorMessage) {
super(errorMessage);
}
}

一旦你有了自定义异常类,下一步就是在你的代码中抛出这个自定义异常。

最简单的例子是这样的:

class Main {
public static void main(String[] args)
throws InvalidStringException {
String myString = "Programming Language";
 if (!myString.contains("Java")) {
 throw new InvalidStringException(
 "myString must contain the word Java"
 );
 }
 }
}

当你运行该代码时,在你的Java控制台中会抛出以下错误:

Exception in thread "main" InvalidStringException:
myString must contain the word Java

但是很明显,上面的if 块会因为初始化值而总是抛出自定义异常。

为了使代码更加真实,你可以在你的类中的一个static 方法中加入自定义异常,如下所示:

class Main {
public static void main(String[] args)
throws InvalidStringException {
String myString = "Programming Language";
 checkString(myString);
 }
 static void checkString(String test)
 throws InvalidStringException {
 if(!test.contains("Java")) {
 throw new InvalidStringException(
 "myString must contain the word Java"
 );
 }
 }
}

通过上面的代码,你的checkString() 方法可以被调用来检查不同的String 变量,而InvalidStringException 是用来在满足所需条件时抛出一个自定义异常。

一个自定义的异常可以用一个try...catch 块来处理,就像内置的Java异常一样。

在下面的代码中,一个try...catch 块被用来包围对checkString() 方法的调用:

String myString = "Programming Language";
try {
checkString(myString);
} catch (Exception e) {
System.out.println("Invalid String:");
System.out.println(e.getMessage());
}

Java不会抛出一个错误并停止程序,而是简单地将错误日志输出到控制台:

Invalid String:
myString must contain the word Java
Process finished with exit code 0

Java允许你在你的源代码中扩展有检查和无检查的异常。

有检查的异常扩展了Exception 类,而无检查的异常则扩展了RuntimeException 类。

这就是你如何在Java编程语言中创建一个自定义的异常。 😉