下面是一个简单的例子,展示了如何创建一个自定义异常类并重写what函数:
时间: 2024-10-11 15:12:35 浏览: 9
在Java中,你可以创建自定义异常类来更好地组织和管理特定类型的错误情况。下面是一个简单的示例:
```java
// 首先,创建一个名为CustomException的新类,它继承自Java内置的Exception类或其子类(如RuntimeException)
public class CustomException extends Exception {
// 如果需要提供额外的信息,可以添加构造函数,并传递给父类
public CustomException(String message) {
super(message); // 将自定义消息传递给父类构造函数
}
// 自定义方法,比如你想重写的"what"函数,实际上这里通常会叫做toString(),因为这是默认行为
@Override
public String toString() {
return "This is a custom exception with the message: " + getMessage(); // 返回异常的详细描述
}
}
// 然后,在程序中,当遇到特定条件时抛出这个自定义异常
try {
// 一些可能会引发CustomException的操作
} catch (CustomException e) {
System.out.println(e.toString()); // 输出异常信息
}
相关问题
C++自定义一种异常类
当我们需要在C++中处理特定类型的错误时,可以自定义异常类来表示这些错误。在C++中,自定义异常类通常是通过继承标准异常类std::exception来实现的。
下面是一个示例代码,展示了如何自定义一个名为MyException的异常类:
```cpp
#include <exception>
#include <string>
class MyException : public std::exception {
public:
MyException(const std::string& errorMessage) : errorMessage(errorMessage) {}
const char* what() const noexcept override {
return errorMessage.c_str();
}
private:
std::string errorMessage;
};
```
在这个示例中,我们定义了一个名为MyException的异常类,它继承自std::exception类。我们通过构造函数接受一个字符串参数,用于设置异常的错误信息。在what()方法中,我们重写了std::exception类的what()方法,以便返回我们自定义的错误信息。
我们可以在程序中使用这个自定义的异常类,例如:
```cpp
#include <iostream>
void divide(int dividend, int divisor) {
if (divisor == 0) {
throw MyException("Divisor cannot be zero!");
}
std::cout << "Result: " << dividend / divisor << std::endl;
}
int main() {
try {
divide(10, 0);
} catch (const MyException& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
}
return 0;
}
```
在上述示例中,我们定义了一个divide()函数,用于进行整数相除操作。如果除数为零,我们就抛出一个MyException类型的异常。在main()函数中,我们使用try-catch块来捕获并处理这个异常。如果捕获到异常,我们会输出异常的错误信息。
这样,我们就可以根据需要自定义各种类型的异常类来表示特定的错误情况,并在程序中进行相应的处理。
fisoc的std::exception::what: std::exception问题
`std::exception` 是 C++ 标准库中定义的一个异常类。所有的标准异常类都是继承自 `std::exception` 类的。`std::exception` 类提供了两个关键的成员函数:
1. `const char* what() const throw();`:这个成员函数返回一个描述异常信息的 C 风格字符串(const char*),该字符串应该提供关于异常原因的简短信息。这个函数不会抛出异常(即它不会引发新的异常),因此可以在异常处理的上下文中安全地调用。
2. `virtual ~exception() throw();`:这是一个虚析构函数,确保派生类的析构函数被调用,从而进行正确的资源清理。
当你通过 `what()` 函数获得信息时,返回的字符串通常是简短的,不应该包含复杂的错误处理逻辑,它只是用来提供错误发生时的描述。这些信息对于调试程序和给用户提供错误信息非常有用。
`std::exception` 类是异常处理中非常重要的基础,它允许开发者编写自定义异常类并使用 `what()` 函数来提供错误信息。自定义异常类通常会重写 `what()` 函数以返回与特定异常相关的信息。