Java程序的输出|第 12 集(异常处理)
先决条件:异常处理,try-catch-finally 中的控制流
1)以下程序的输出是什么?
public class Test
{
public static void main(String[] args)
{
try
{
System.out.printf("1");
int sum = 9 / 0;
System.out.printf("2");
}
catch(ArithmeticException e)
{
System.out.printf("3");
}
catch(Exception e)
{
System.out.printf("4");
}
finally
{
System.out.printf("5");
}
}
}
一)1325
b) 1345
c) 1342
d) 135
答。 (d)
解释:一旦 try 块中发生异常,执行将传递到相应的 catch 语句,并且不会返回到 try 块。一次只执行一个 catch 块。 finally 块总是执行,无论是否发生异常。
2) 以下程序的输出是什么?
public class Test
{
private void m1()
{
m2();
System.out.printf("1");
}
private void m2()
{
m3();
System.out.printf("2");
}
private void m3()
{
System.out.printf("3");
try
{
int sum = 4/0;
System.out.printf("4");
}
catch(ArithmeticException e)
{
System.out.printf("5");
}
System.out.printf("7");
}
public static void main(String[] args)
{
Test obj = new Test();
obj.m1();
}
}
一)35721
b) 354721
c) 3521
d) 35
答。 (一种)
说明:如果在 catch 语句中处理了异常,则程序在执行与该异常对应的 catch 语句后继续正常执行。此外,当 try 块中发生异常时,不会执行 try 块中的其余程序。
3) 以下程序的输出是什么?
public class Test
{
public static void main(String[] args)
{
try
{
System.out.printf("1");
int data = 5 / 0;
}
catch(ArithmeticException e)
{
System.out.printf("2");
System.exit(0);
}
finally
{
System.out.printf("3");
}
System.out.printf("4");
}
}
一)12
b) 1234
三)124
d) 123
答。 (一种)
说明: finally 块中的代码不执行的唯一情况是在程序中显式调用 System.exit(0) 时。然后调用 exit 语句,程序终止,不再执行。
4) 以下程序的输出是什么?
public class Test
{
public static void main(String[] args)
{
try
{
System.out.printf("1");
int data = 5 / 0;
}
catch(ArithmeticException e)
{
Throwable obj = new Throwable("Sample");
try
{
throw obj;
}
catch (Throwable e1)
{
System.out.printf("8");
}
}
finally
{
System.out.printf("3");
}
System.out.printf("4");
}
}
a) 编译错误
b) 运行时错误
c) 1834
d) 134
答。 (C)
说明: catch 子句中可以抛出异常。这样做是为了在运行时更改异常类型。 catch 子句中的异常是通过创建 Throwable 类的实例来引发的,如程序所示。
5) 以下程序的输出是什么?
import java.io.EOFException;
import java.io.IOException;
public class Test
{
public static void main(String[] args)
{
try
{
System.out.printf("1");
int value = 10 / 0;
throw new IOException();
}
catch(EOFException e)
{
System.out.printf("2");
}
catch(ArithmeticException e)
{
System.out.printf("3");
}
catch(NullPointerException e)
{
System.out.printf("4");
}
catch(IOException e)
{
System.out.printf("5");
}
catch(Exception e)
{
System.out.printf("6");
}
}
}
一)1346
b) 136726
三)136
d) 13
答。 (d)
解释:在 multi-catch 语句中,异常必须从更具体到更一般列出。只执行一个最特定于发生的异常的 catch 语句。