【问题标题】:Java, default exception messagesJava,默认异常消息
【发布时间】:2015-05-30 05:58:21
【问题描述】:

鉴于以下情况:

public abstract class Test {
    public static void main(String[] args) {
        int[] testArray = {6, 3, 2};
        System.out.println(testArray[3]);
    }
}

当我运行程序时,我得到:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at Test1.main(Test1.java:5)

在这种情况下,JVM 显示超出范围的索引,即 3。

抛开这个具体的例子,假设我选择不在程序代码中捕获异常:

  1. 对于任何已选中或未选中的异常,我如何找出 JVM 将显示的默认消息是什么?

  2. 对于我自己编写的自定义异常类,以及我在代码中使用“throw”关键字生成的此类对象(但再次选择不捕获),我可以设置JVM 将显示的默认消息?

【问题讨论】:

    标签: java exception message default


    【解决方案1】:
    1. 对于任何已选中或未选中的异常,我如何才能查明 JVM 的默认消息是什么? 显示?

    您可能已经怀疑,答案是“一般来说,您不能”。大多数情况下,消息是从接受字符串消息的异常的构造函数之一设置的。如果幸运的话,该消息将是有意义的并提供有用的信息。否则,按照惯例,异常的语义本质上将驻留在其类名和相关的 Javadoc 中。还要考虑到异常消息通常是本地化的。

    1. 对于我自己编写的自定义异常类,以及我在代码中使用“throw”关键字生成的此类对象 (但是,再次,选择不抓住它),我可以设置一个默认消息 JVM 会显示吗?

    这完全取决于您。您可以像这样在默认构造函数中设置默认消息:

    public class MyException extends Exception {
      public MyException() {
        super("my default message");
      }
    
      public MyException(String message) {
        super(message);
      }
    }
    

    【讨论】:

      【解决方案2】:

      Thread.setDefaultExceptionHandler,所有未捕获的异常都会到那里,因此您可以在程序开始的某处提供自己的异常处理程序作为该方法的参数。

      我想,你也可以自己构造任何异常,看到消息如下

      new IOException().getMessage()
      

      虽然这种情况下的消息可能是空的,但我没有尝试

      【讨论】:

        【解决方案3】:

        我只能回答你的第二个问题。 在您的 Exception 类(应从 java.lang.Exception 派生)中添加(覆盖)接受 String 作为参数的构造函数。将您希望抛出的异常作为字符串传递给新的构造函数等消息→您收到了针对您的异常的个性化消息。如果您需要默认消息,只需在默认消息中使用此构造函数。希望对您有所帮助。

        【讨论】:

          【解决方案4】:

          任何类型的异常或扩展运行时异常都是未经检查的异常。其余为检查异常。

          你只需要扩展运行时异常然后你不需要处理抛出的异常。您可以通过 ovveriding getMessage 方法打印该异常的默认消息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多