Java Exception.getMessage()返回-1

时间:2016-12-17 23:42:03

标签: java debugging exception exception-handling

我正在尝试调试一段 生产 代码。我没有写,所以请不要批评它。我知道这是多种原因的可怕做法,如果可以,我会改变它,但我不能。

代码如下:

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”?

2 个答案:

答案 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异常