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);
。
我有以下代码
`
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);
。