跳到主要内容

Java 程序:创建自定义异常

要理解这个示例,你需要了解以下 Java 编程 主题:

示例 1:Java 程序创建自定义已检查异常

import java.util.ArrayList;
import java.util.Arrays;

// 创建一个已检查异常类
class CustomException extends Exception {
public CustomException(String message) {
// 调用 Exception 类的构造器
super(message);
}
}

class Main {

ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript"));

// 检查异常条件
public void checkLanguage(String language) throws CustomException {

// 如果 ArrayList 中已存在该语言,则抛出异常
if(languages.contains(language)) {
throw new CustomException(language + " 已经存在");
}
else {
// 将语言添加到 ArrayList
languages.add(language);
System.out.println(language + " 已添加到 ArrayList");
}
}

public static void main(String[] args) {

// 创建 Main 类的对象
Main obj = new Main();

// 使用 try...catch 处理异常
try {
obj.checkLanguage("Swift");
obj.checkLanguage("Java");
}

catch(CustomException e) {
System.out.println("[" + e + "] 异常发生");
}
}
}

输出

Swift 已添加到 ArrayList
[CustomException: Java 已经存在] 异常发生

在上面的示例中,我们扩展了 Exception 类来创建一个名为 CustomException 的自定义异常。这里,我们使用 super() 关键字从 CustomException 类调用 Exception 类的构造器。

checkLanguage() 方法中,我们检查了异常条件,如果发生异常,try..catch 块处理异常。

这是一个已检查异常。我们也可以在 Java 中创建未检查的异常类。要了解更多关于已检查和未检查异常的信息,请访问 Java 异常

示例 2:创建自定义未检查异常类

import java.util.ArrayList;
import java.util.Arrays;

// 创建一个未检查异常类
class CustomException extends RuntimeException {
public CustomException(String message) {
// 调用 RuntimeException 的构造器
super(message);
}
}

class Main {

ArrayList<String> languages = new ArrayList<>(Arrays.asList("Java", "Python", "JavaScript"));

// 检查异常条件
public void checkLanguage(String language) {

// 如果 ArrayList 中已存在该语言,则抛出异常
if(languages.contains(language)) {
throw new CustomException(language + " 已经存在");
}
else {
// 将语言添加到 ArrayList
languages.add(language);
System.out.println(language + " 已添加到 ArrayList");
}
}

public static void main(String[] args) {

// 创建 Main 类的对象
Main obj = new Main();

// 检查是否已存在该语言
obj.checkLanguage("Swift");
obj.checkLanguage("Java");
}
}

输出

Swift 已添加到 ArrayList
Exception in thread "main" CustomException: Java 已经存在
at Main.checkLanguage(Main.java:21)
at Main.main(Main.java:37)

在上面的示例中,我们扩展了 RuntimeException 类来创建一个未检查的自定义异常类。

这里,您可以注意到,我们没有声明任何 try...catch 块。这是因为未检查的异常是在运行时检查的。

除此之外,未检查异常的其他功能与上述程序类似。