【问题标题】:Java custom exception class usage [duplicate]Java自定义异常类用法[重复]
【发布时间】:2012-11-25 20:52:20
【问题描述】:

可能重复:
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 中。

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

【问题讨论】:

标签: java exception


【解决方案1】:

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

在您的情况下,您当前正在定义一个已检查的异常,也许您想要一个未检查的异常。

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

检查的异常

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

在java中java.lang.Exception是一个检查异常,它的所有子类也将被检查。

未经检查的异常

另一方面,这种异常不需要成为方法签名的一部分,也不需要将抛出新的方法包装在try catch 块中。只是预计调用堆栈中的某个地方会有一个try catch 来处理它,否则如果它到达 JVM,它会很好地向您转储堆栈跟踪。

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

我的看法

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

【讨论】:

    【解决方案2】:

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

    .... method() throws YourException{
    

    【讨论】:

      【解决方案3】:

      你有 throw new InvalidSeverityException(); 的方法应该定义 throws InvalidSeverityException

      例子:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-28
          • 1970-01-01
          • 1970-01-01
          • 2019-11-12
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 2017-04-30
          相关资源
          最近更新 更多