如何在Java中创建自定义异常?
要定义受检查的异常,请创建的子类(或子类的层次结构)java.lang.Exception
。例如:
public class FooException extends Exception {
public FooException() { super(); }
public FooException(String message) { super(message); }
public FooException(String message, Throwable cause) { super(message, cause); }
public FooException(Throwable cause) { super(cause); }
}
可能引发或传播此异常的方法必须声明它:
public void calculate(int i) throws FooException, IOException;
…,并且调用此方法的代码必须处理或传播此异常(或同时处理):
try {
int i = 5;
myObject.calculate(5);
} catch(FooException ex) {
// Print error and terminate application.
ex.printStackTrace();
System.exit(1);
} catch(IOException ex) {
// Rethrow as FooException.
throw new FooException(ex);
}
你会在上面的示例中注意到该错误IOException已被捕获并重新抛出为FooException
。这是用于封装异常的常用技术(通常在实现API时)。
有时在某些情况下,你不想强制每个方法在其throws子句中声明你的异常实现。在这种情况下,你可以创建未经检查的异常。未经检查的异常是任何扩展的异常java.lang.RuntimeException
(其本身是的子类java.lang.Exception
):
public class FooRuntimeException extends RuntimeException {
...
}
方法可以抛出或传播FooRuntimeException异常而无需声明。例如
public void calculate(int i) {
if (i < 0) {
throw new FooRuntimeException("i < 0: " + i);
}
}
未经检查的异常通常用于表示程序员错误,例如,将无效的参数传递给方法或尝试破坏数组索引范围。
该java.lang.Throwable
班是所有的错误和异常,可以在Java中抛出的根源。 java.lang.Exception
和java.lang.Error
都是的子类Throwable
。子类的任何东西都Throwable可能被抛出或捕获。但是,捕获或抛出通常是一种不好的做法,Error因为这是用来表示JVM内部的错误,通常不能由程序员“处理”(例如OutOfMemoryError
)。同样,你应该避免catch Throwable
,这可能导致你Error除了Exceptions
之外还捕获s。
在一次采访中,我最近被问到以下问题: 有没有其他方法可以创建自定义的,而不使用: 扩展异常类或的子类,用于检查异常 为未检查的异常扩展或的子类。 可能的答案是什么?
问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU
我创建了一个小的测试项目来测试我的实现,下面是我的异常类头文件。 异常类的源文件为 在我的主应用程序中,我调用了一个函数,该函数抛出我的异常,并在try/catch中捕获它,如下所示: 现在要跑了。哦,天哪,我需要抛出一个异常 捕获的异常:这是我的异常错误。:( 相反,我得到的是 从我在各种帖子上看到的情况来看,我所做的是正确的,所以我错过了什么。
我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个
问题内容: 我不确定node.js如何在异步中实现哪些功能,在异步中没有实现的功能以及如何创建自定义异步功能。 说我想创建一个自定义的异步函数。如果只是因为我对异步函数回调或cb调用了我的最后一个参数而只知道其异步函数,我会感到惊讶: 我尝试了类似的方法,但它无法异步运行。您如何告诉node.js f实际上是异步的? 问题答案: 注意 :此答案写于2014年,在出现之前,在Promises流行之前
问题内容: 我想知道如何在java中设置自己的侦听器。例如,我有一个将数字从1递增到100的函数。我想在值达到50时设置侦听器。我该怎么做?请给我建议任何教程。 问题答案: 查看使用侦听器的所有类的源代码。实际上,这很容易: 为您的听众创建一个界面,例如 维护清单 侦听器应在每个事件上进行遍历,然后遍历列表并使用一些事件参数调用适当的方法 至于观察者模式以及一些Java代码,请看维基百科。