我正在尝试调试一段 生产 代码。我没有写,所以请不要批评它。我知道这是多种原因的可怕做法,如果可以,我会改变它,但我不能。
代码如下:
try
{
...
// Multiple lines of code that can throw exceptions
...
}
catch (Exception e)
{
System.out.println("Exception: " + e.getMessage());
}
这些多行代码中没有任何地方是手动抛出的异常。
尽管如此,以下是我正在尝试调试的情况下打印的全部内容:
Exception: -1
Throwable.getMessage()的Java文档说
getMessage
public String getMessage()
Returns the detail message string of this throwable.
Returns:
the detail message string of this Throwable instance (which may be null).
可以抛出异常的所有非本机库方法都可以正确地捕获在较大的try-catch块中调用它们的位置。因此,特别是关于标准JDK中的异常,是否有任何可能的异常,其消息只是“-1”?
答案 0 :(得分:3)
异常名称通常是异常的一个非常重要的部分。有时它是异常中的唯一事物。请参阅getMessage()
的javadoc:
返回此Throwable实例的详细消息字符串(可能为null )。
没有消息的例外示例:
NullPointerException
StackOverflowError
所以,println(e.getMessage())
通常没有意义,因为它没有任何内容或完全没有上下文。
在没有例外名称的情况下消息毫无意义的例外情况:
-1
ArrayIndexOutOfBoundsException
foo.txt
FileNotFoundException
始终也包含例外名称,例如使用toString()
:
System.out.println("Exception: " + e.toString());
字符串连接将自动使用toString()
,因此它也可以只是:
System.out.println("Exception: " + e);
大多数情况下,最好打印堆栈跟踪,这样你就可以在代码中看到发生异常的 where :
e.printStackTrace(System.out);
答案 1 :(得分:2)
使用
e.printStackTrace()
您将看到抛出异常的位置以及原因。我的猜测是它将是一个数组IndexOutOfBound异常