考虑我有一个包含3个语句的try块,并且所有这些语句都会导致异常。我希望所有3个例外都由它们相关的catch块处理..是否可能?
类似的东西 - >
class multicatch
{
public static void main(String[] args)
{
int[] c={1};
String s="this is a false integer";
try
{
int x=5/args.length;
c[10]=12;
int y=Integer.parseInt(s);
}
catch(ArithmeticException ae)
{
System.out.println("Cannot divide a number by zero.");
}
catch(ArrayIndexOutOfBoundsException abe)
{
System.out.println("This array index is not accessible.");
}
catch(NumberFormatException nfe)
{
System.out.println("Cannot parse a non-integer string.");
}
}
}
是否可以获得以下输出? - >>
Cannot divide a number by zero.
This array index is not accessible.
Cannot parse a non-integer string.
答案 0 :(得分:10)
是否可以获得以下输出?
不,因为只会抛出其中一个例外。抛出异常后,执行将离开try
块,并假设存在匹配的catch
块,它将继续存在。它不会返回try
块,因此您无法获得第二个例外。
有关异常处理的一般教训,请参阅Java tutorial,有关详细信息,请参阅section 11.3 of the JLS。
答案 1 :(得分:2)
如果要捕获多个异常,则必须将代码拆分为多个try / catch块。
更好的方法是验证您的数据并记录错误,而不会触发执行此操作的例外。
答案 2 :(得分:0)
要添加Jon的答案,虽然您不会从单个try
块中捕获多个异常,但您可以让多个处理程序处理单个异常。
try
{
try
{
throw new Exception("This is an exception.");
}
catch(Exception foo)
{
System.Console.WriteLine(foo.Message);
throw; // rethrows foo for the next handler.
}
}
catch(Exception bar)
{
System.Console.WriteLine("And again: " + bar.Message);
}
这会产生输出:
This is an exception.
And again: This is an exception.
答案 3 :(得分:0)
这是一个非常糟糕的做法,但您可以做下一步(使用finally
阻止解决您的问题):
private static void Main()
{
int[] c={1};
String s="this is a false integer";
try
{
int z = 0;
int x = 5/z;
}
catch (ArithmeticException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
finally
{
try
{
c[10] = 12;
}
catch(IndexOutOfRangeException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
finally
{
try
{
int y = int.Parse(s);
}
catch (FormatException exception)
{
Console.WriteLine(exception.GetType().ToString());
}
}
Console.ReadKey();
}
}
答案 4 :(得分:0)
一次显示所有异常处理是不可能的。每个例外catch
的目标是对每个Exception
类型进行不同的处理,否则将它们全部打印在一起毫无意义。
答案 5 :(得分:0)
不,
它不会执行所有三个catch语句。 TRY 块检查错误,然后执行来自TRY块。然后适合捕获将被执行。在您的情况下, ArithmeticException 位于异常层次结构的顶部。因此它将执行,然后程序终止。
如果你在 ArithmeticException 之前给出 Catch(例外e),那么将执行异常捕获...更好地阅读MSDN <上的SystemException层次结构/ p>