Java 为什么异常被捕获3次?

Java 为什么异常被捕获3次?,java,exception,log4j2,Java,Exception,Log4j2,我正在捕获FileNotFoundException并通过log4j2将其记录到文件中。log语句被调用三次。我用sysout语句替换了log语句,以检查它是否打印了3次消息。它确实在控制台上打印了3次。为什么要调用sysout语句或log语句3次? 下面是代码片段 prop = new Properties(); String path ="invalid path"; try { FileInputStream fis = new FileInputStream(path); } c

我正在捕获FileNotFoundException并通过log4j2将其记录到文件中。log语句被调用三次。我用sysout语句替换了log语句,以检查它是否打印了3次消息。它确实在控制台上打印了3次。为什么要调用sysout语句或log语句3次? 下面是代码片段

prop = new Properties();
String path ="invalid path";
try {
    FileInputStream fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
    log.error("FileInputStream exception");
    System.out.println("Exception");
}

这个问题不应该一开始就发布。问题的根本原因是3类继承了一个基类,基类构造函数中的一个方法被调用了三次。将此init方法移出解决了问题。

您可能会调用您的方法三次。如果您在独立模式下运行,是否会得到三次调用,如果没有,则函数可能会在某个地方被调用三次。请阅读如何创建一个。然后使用链接改进您的问题,不要通过评论添加更多信息。否则,我们将无法回答您的问题并帮助您。请将IDE设置为调试模式,并检查它是否被调用3次。提示:您可以打印整个堆栈跟踪,而不必只执行PrintLException。堆栈跟踪准确地告诉您是哪个调用堆栈导致您出现这种情况。换句话说:您已经拥有了识别这些调用堆栈中的代码路径所需的所有信息。因此,不要把它们扔掉,而是打印或记录它们,然后阅读正在发生的事情。