【问题标题】:How to send a message with an automatically thrown exception?如何发送带有自动抛出异常的消息?
【发布时间】:2020-04-29 23:10:32
【问题描述】:

手动抛出异常时,可以发送小消息:

throw new Exception("this message");

但是在运行这段代码时,我必须输入一个浮点数,所以如果我输入一个字符串,例如,代码本身会抛出一个异常,但我如何发送相同类型的消息?

public class Main {

    public static void main(String[] args) {

        Scanner scan;
        float feeHold;

        System.out.println("\nEnter Registration Fee (only numbers)");

        try {
            scan = new Scanner(System.in);
            feeHold = scan.nextFloat();

            System.out.println("\n" + feeHold);
        }
        catch (InputMismatchException e) {
            e.printStackTrace();
        }
    }
}

像这样:

【问题讨论】:

  • catch 块中添加System.out.println 语句。
  • @VGR 这只是一个常规的打印语句。下面的答案建议在 catch 中抛出一个新异常,该异常以某种方式工作
  • 如果您没有创建异常,则无法更改其消息。充其量,您可以使用自己选择的消息创建新异常,并将捕获的异常作为新异常的原因。但是您的问题是“自动抛出异常”,所以我不知道这是否满足您的目标。

标签: java exception message throw throwable


【解决方案1】:

您可以捕获InputMismatchException,因为您做得正确,但您可以使用自定义消息抛出一个新异常,而不是调用e.printStackTrace()。请记住,您还需要声明您的 main 可能会引发异常。

public class Main {

    public static void main(String[] args) throws Exception {

        Scanner scan;
        float feeHold;

        System.out.println("\nEnter Registration Fee (only numbers)");

        try {
            scan = new Scanner(System.in);
            feeHold = scan.nextFloat();

            System.out.println("\n" + feeHold);
        } catch (InputMismatchException e) {
            throw new Exception("Here's your custom message");
        }
    }
}

输出:

Enter Registration Fee (only numbers)
abc
Exception in thread "main" java.lang.Exception: Here's your custom message
at Main.main(Main.java:19)

这只是按照您的要求做的一种方式,可能不是最合适的。 稍微看一下Exception documentation,您一定会找到一种更有条理、更优雅的方式来完成您的任务。

【讨论】:

  • 这行得通,但是解释异常的其他“at”行消失了。这些都不是强制性的,我只是尽可能多地集思广益。是的,可能有更好的方法,但这适用于我正在做的任务。谢谢
  • @PardeepKumar 是的,因为我放弃了e.printStackTrace() 调用,以便专注于仅输出自定义消息。在catch 块中,您可以访问 (InputMismatch)Exception e,因此您还可以输出有关您捕获的所有类型的信息。当然,必须在 抛出新异常之前完成,或者在进一步的 try-catch 块中完成,但同样,这不是我想说的最干净的代码。
【解决方案2】:

您可以直接通过将异常代码包装到新的try-catch 块中并从catch 抛出新的自定义异常来做到这一点,但是这段代码真的很糟糕,而且,您不应该这样做,因为库/sdk供应商想要抛出确切的异常。但是,如果您想打印自己的消息,只需在 catch 子句中调用 System.out.println("your own message") 即可。

【讨论】:

  • 是的,我可以保持原样或打印一些东西,我只是想知道是否可以做这样的事情。这只是一个作业,所以我不必担心代码的性能和效率,所以只需尝试不同的方法,并在出现问题时尝试找到出路。谢谢
猜你喜欢
  • 2011-07-16
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多