【问题标题】:Exception in Java, print msg according to the class [duplicate]Java中的异常,根据类打印味精[重复]
【发布时间】:2018-11-11 19:01:09
【问题描述】:

我构建了一些异常类(目前没有从任何类继承)。我想做一个“尝试”和“捕捉”,并在捕捉中打印与已抛出的特定异常类相关的错误消息。 有没有办法可以做

try(something){
}
catch(){
   System.out.println(error.printMsg());
}

并且根据excpetion,它会打印与类相关的msg?

编辑:我将改进我的问题,在尝试和捕捉中,可以抛出一些我构建的可能的异常类,我想要而不是这样做:

catch(Error1){
System.err.println(Error1.ERROR_MSG);
}
catch(Error2){
System.err.println(Error2.ERROR_MSG);
}

要做的事情:

catch(ERROR1 | ERROR2){
System.out.println(GenarlError.ERROR_MSG)
// maybe to do a class that all the Excpetion will inhirt from, and somehow 
//do upcasting,or something like that (but If I will do upcasting it would 
//print the message or the right class?
}

【问题讨论】:

  • 就像你写的一样..
  • 为什么您的自定义异常没有扩展 RunTimeExceptions??
  • 如果它们至少不继承 Exception 类,你打算如何扔掉它们?
  • 不直接或间接继承Throwable的类不能与try/catch一起使用。
  • @Henry 继承自Throwable 的类不一定是异常。

标签: java exception try-catch


【解决方案1】:

如果你想捕获多个异常并对每个异常做不同的事情,你可以编写如下代码:

try {
    // Execute code
} catch(MyException e) {
    System.out.println(e.getMessage());
} catch(MyNextException e) {
    System.out.println(e.getMessage());
}

如果你想对每个异常做同样的事情,你可以用更简洁的方式捕捉它们:

try {
    // Execute code
} catch(MyException | MyNextException e) {
    System.out.println(e.getMessage());
}

注意,要做到这一点,尽管您的异常需要以某种形式扩展异常

【讨论】:

  • 我想在捕获时打印与该类相关的自定义消息
  • @Georg 尝试使用这个:catch(MyException | MyNextException e) { System.out.println(e.getMessage()) } 或替代使用方法e.printStackTrace()
  • @Georg - 我更改了代码以突出显示如何根据每个异常打印出消息。如果这是记录信息,那么使用记录器比 println() 更好。
  • @0x1C1B 谢谢,可以了,只需要添加接口
  • @D.Salter 也谢谢你,我需要一个自定义的 msg,所以记录器不会有帮助,但是 u 和 0x1C1B 提供的相同想法适用于我的自定义 msg。
【解决方案2】:

在 catch 块中你必须有异常类型:

public class Main throws Exception{
try{
  ...
}
catch(Exception error){
   System.out.println(error.printStackTrace());
}
}

如果您想创建自己的异常,请创建并扩展 Exception 类。并在你的主类上抛出异常

【讨论】:

  • 为什么要在方法签名中添加异常?如果不重新抛出捕获的异常,该方法不会抛出异常...
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2015-04-30
相关资源
最近更新 更多