Java自定义异常类用法

时间:2012-12-07 16:31:58

标签: java exception

  

可能重复:
  Throws or try-catch

我正在编写API,我希望编写代码,以便在特定场景中引发异常。我创建了一个异常类,如下所示: -

public class InvalidSeverityException extends Exception {
    private static final long serialVersionUID = 1L;
    public InvalidSeverityException() {
        // TODO Auto-generated constructor stub
    }
}

在代码库中我有以下内容来调用代码: -

throw new InvalidSeverityException();

然而,Eclipse建议我使用throws或将其括在try ... catch块中。我觉得我不应该抓住这个错误,并且使用我的API的开发人员应该将代码包含在try...catch中。

这有意义吗?我做错了吗?

4 个答案:

答案 0 :(得分:4)

在Java中处理异常时,您必须了解已检查异常未经检查的异常的概念。

在你的情况下,你现在正在定义一个已检查的异常,也许你想要一个未经检查的异常。

以下是每种类型的简要说明:

已检查的例外情况

此异常必须是引发它们的方法签名的一部分(或者调用一个方法),或者必须使用try catch块捕获它们并处理问题。通常在有关错误的事情时以及当您希望开发人员意识到可能发生此类错误并且必须处理时,使用已检查的异常。

在java中java.lang.Exception是一个已检查的异常,并且还将检查其所有子类。

未经检查的例外

另一方面,此异常不需要创建方法签名的一部分,也不必包装在try catch块中抛出new的方法。只是期望调用堆栈中的某个位置会有try catch来处理它,否则如果它到达JVM,它将很好地转储堆栈跟踪。

在java java.lang.RuntimeException中是一个未经检查的异常,它的所有子类都是如此。

我的意见

如果您要定义API我的建议是使用已检查的异常,这主要是因为您明确告知使用您的API的开发人员可能会发生此类异常(因此无论如何他们都可以处理它)要)。

答案 1 :(得分:1)

您拥有throw new InvalidSeverityException();的方法应定义抛出InvalidSeverityException

示例:

  void yourMethod() throws InvalidSeverityException
    {
    ........//Some code
    throw new InvalidSeverityException();

    }

答案 2 :(得分:1)

你是对的,你不应该抓住它。正如eclipse所建议的那样,你应该使用throws,这样开发人员就会知道你的方法可能会引发异常,然后可以捕获它。

.... method() throws YourException{

答案 3 :(得分:1)

那么你肯定遵循Eclipse的第一个建议并设置你的方法来抛出异常。

public void myMethod() throws InvalidSeverityException {
    //throw it somewhere in here so that other 
    //developer can catch it while calling your method
}