【问题标题】:Throwing multiple exceptions from one method [closed]从一种方法引发多个异常[关闭]
【发布时间】:2014-03-06 15:42:06
【问题描述】:

如何从一种方法一次抛出多个异常?示例:

public void doA() throws Exception1, Exception2{
    throw new Exception1("test1");
    throw new Exception2("test2");
}

如何实现这样的工作?

编辑:一个条件同时抛出 Exception1 和 Exception2。可能的? 这只是一个测试抛出异常的演示文件。

【问题讨论】:

  • 它应该达到什么目的?

标签: java exception throw


【解决方案1】:

您应该检查抛出Exception 的方法是否有问题。这是一个示例:

public void doA() throws Exception1, Exception2 {
    if (<some unexpected condition>) {
        throw new Exception1("test1");
    }
    if (<another unexpected condition>) {
        throw new Exception2("test2");
    }
    //rest of the implementation...
}

如果您的意思是如何同时抛出多个异常,那是不可能的,因为抛出异常会中断方法的执行(类似于return)。您一次只能抛出一个Exception

【讨论】:

  • @downvoter 需要解释一下吗?
  • 这根本不是 OP 所要求的,只是随机建议。
  • @Warlord 来自 OP 的问题:一个条件同时抛出 Exception1 和 Exception2。可能吗?.
【解决方案2】:

一次只能抛出一个异常。你不能做你所要求的。相反,请考虑在您的代码中使用自定义异常,并根据情况使用它们(我不确定您需要抛出两个异常的原因):

class CustomException extends Exception
{
    //Parameterless Constructor
    public CustomException() {}

    //Constructor that accepts a message
    public CustomException(String message)
    {
     super(message);
    }
}

然后在需要的时候扔掉:

public void doA() throws Exception1, Exception2{
   throw new CustomException("test1, test2");
}

【讨论】:

    【解决方案3】:

    如果您的问题是如何同时从方法中抛出多个异常,那么答案就是您不能。在引发第一个异常后,控件退出此方法,异常在其父方法中滚动。如果没有任何东西可以捕获它,那么它会转到它的父方法等等......

    【讨论】:

      【解决方案4】:

      我认为一次抛出多个异常是不可能的。

      但是,根据要求,当您需要根据上下文传递(原文如此)第二个异常时,您可以抛出嵌套异常:

      throw new Exception("My exception", new Exception("The cause of My Exception"));
      

      【讨论】:

        【解决方案5】:

        抛出异常是将控制单向转移到另一行代码(如汇编语言中的跳转)。这意味着在抛出语句之后,程序必须在该范围之外执行另一行代码(首先调用堆栈中处理该异常的代码)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多