Java RuntimeException 捕获多个 catch 块

Java RuntimeException catching multiple catch blocks

我有以下代码

`

package com.test.Custom;

public class StreamError 
  {

    public static void main(String[] args) 
    {
        try
        {
            String str = "Hello";
        if (!str.equals("Hello"))
            {
                throw new RuntimeException("None of the Directories Exists-Message failed");
            }
           int inf = ster(9);
            System.out.print(inf);
        }
            catch (RuntimeException stex)
              {
               //getTrace().addWarning("Failing the message");
                RuntimeException rme = new RuntimeException("None of the Directories Exists-Message failed", stex);
               throw rme;
              }
        
    }
    public  static int ster(int intg)
    {  try
       {
        if (intg >6)
        {
            throw new RuntimeException("None of the files Exists-Message failed");
        }
        else
            return intg;
        }
    catch (RuntimeException ste)
      {
       //getTrace().addWarning("Failing the message");
        RuntimeException pme = new RuntimeException("None of the files  Exists-Message failed", ste);
     throw pme;
      }
        
    }
}
`

当我对大于 6 的整数(例如 9)执行此操作时,我可以看到它从两个 catch 块中抛出运行时异常 - 即使目录部分是正确的,即 String str = Hello。

Exception in thread "main" java.lang.RuntimeException: None of the Directories Exists-Message failed
    at com.test.Custom.StreamError.main(StreamError.java:21)
Caused by: java.lang.RuntimeException: None of the files  Exists-Message failed
    at com.test.Custom.StreamError.ster(StreamError.java:39)
    at com.test.Custom.StreamError.main(StreamError.java:11)
Caused by: java.lang.RuntimeException: None of the files Exists-Message failed
    at com.test.Custom.StreamError.ster(StreamError.java:31)
    ... 1 more

但是,当我 运行 这是错误的目录(比如 abcd)和正确的整数(比如 2)时,它 returns 只有 运行 来自目录 catch 块的时间异常。

Exception in thread "main" java.lang.RuntimeException: None of the Directories Exists-Message failed
    at com.test.Custom.StreamError.main(StreamError.java:22)
Caused by: java.lang.RuntimeException: None of the Directories Exists-Message failed
    at com.test.Custom.StreamError.main(StreamError.java:13

) 我错过了一些非常基本的东西吗?请帮忙。

谢谢 菅田

如果您捕获异常只是为了进一步抛出它,那么首先捕获它是没有意义的。这就是您示例中的问题,不要在 catch 块中抛出异常,只需处理它(记录消息或其他内容)。

这是因为,即使在第一个 try 块中字符串是 "Hello",您也在调用 ster (9)。所以,在 ster(9) 你有一个异常,但这个异常也打破了第一个 try 语句。因此,它进入两个 catch 语句(第一个和第二个)。如果你不想要它,你可以在 try 语句之外调用它 int inf = ster(9);