我正在回答一些基本的 Java 练习测试问题,而在参加测试时,以下问题的正确答案从我身边溜走了。
问题:“如果没有捕获到异常,finally 块将运行并跳过方法的其余部分 - TRUE 还是 FALSE?”
我试图用 ThrowTest 类(粘贴在底部)来证明答案,但我发现 Java 异常处理有点陌生。我按原样编译该类,并将 catch 块的 ArrayIndexOutOfBoundsException 部分注释掉。然后我在不传递输入参数的情况下执行该类,从而创建一个异常(ArrayIndexOutOfBoundsException 异常)。我希望最终的 System.out.println 不会执行,实际上它不会。
我发现如果我取消注释 ArrayIndexOutOfBoundsException 捕获块并重新编译,那么该类会在运行时捕获该特定错误并在底部执行“方法的其余部分”println。那么,我的代码是否证明了“方法的其余部分被跳过”的其余部分,还是我必须从主要方法以外的方法对其进行测试?也许有一种更直接的测试方法。
public class ThrowTest
{
public static void main(String[] args)
{
try
{
String anyString = args[0];
System.out.println("Try code executes");
}
catch(SecurityException e) //any old exception
{
System.err.println ("Error: SecurityException. ");
e.printStackTrace();
}
/* begin comment
catch(ArrayIndexOutOfBoundsException e)
{
System.err.println("Error: Caught ArrayIndexOutOfBoundsException. ");
e.printStackTrace();
}
end comment */
finally
{
System.out.println("finally block executes!");
}
System.out.println("Rest of method executes!");
}
}