鉴于以下内容:
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.
除了这个具体的例子,我选择不在程序的代码中捕获异常:
如果检查或取消选中任何异常,我怎样才能找到JVM显示的默认消息?
对于我自己编写的自定义异常类,以及我在代码中使用' throw'生成的此类对象。关键字(但是,再次选择不捕获),我可以设置JVM显示的默认消息吗?
答案 0 :(得分:5)
- 我怎样才能发现,对于任何异常,无论是选中还是未选中,JVM将会是什么默认消息 显示?
醇>
正如您可能已经怀疑的那样,答案是"一般情况下,您可以&#t;#34;。大多数情况下,消息是从接受字符串消息的异常的构造函数之一设置的。如果您很幸运,该消息将是有意义的并提供有用的信息。否则,通常的做法是,异常的语义基本上驻留在其类名和关联的Javadoc中。还要考虑异常消息通常是本地化的。
- 对于我自己编写的自定义异常类,以及我在代码中使用' throw'生成的此类对象。关键词 (但是,再次选择不捕捉它),我可以设置默认消息 JVM会显示什么?
醇>
这完全取决于你。您可以在默认构造函数中设置默认消息,如下所示:
public class MyException extends Exception {
public MyException() {
super("my default message");
}
public MyException(String message) {
super(message);
}
}
答案 1 :(得分:3)
有Thread.setDefaultExceptionHandler
,所有未捕获的异常都会去那里,所以你可以在程序开头的某个地方提供自己的异常处理程序作为该方法的参数。
我认为,您也可以自己构建任何异常,并按以下方式查看消息
new IOException().getMessage()
虽然在这种情况下消息可能是空的,但我没有尝试
答案 2 :(得分:3)
我只能回答你的第二个问题。 在Exception类中(应该从java.lang.Exception派生)添加(覆盖)接受String作为参数的构造函数。将您希望抛出异常的消息传递给新构造函数的字符串etvoilà→您有一个针对您的异常的个性化消息。如果您需要默认消息,只需在默认消息中使用此构造函数。希望有所帮助。
答案 3 :(得分:1)
任何类型或扩展运行时异常的异常都是未经检查的异常。休息是检查异常。
您只需要扩展运行时异常,然后就不需要处理抛出的异常。并且您可以通过ovveriding getMessage方法为该异常打印默认消息。