1 class Exc2 {
 2     public static void main(String args[]) {
 3         int d, a;
 4         try { // monitor a block of code.
 5             d = 0;
 6             a = 42 / d;
 7             System.out.println("This will not be printed.");
 8         } catch (ArithmeticException e) { // catch divide-by-zero error
 9             System.out.println("Division by zero.");
10         }
11         System.out.println("After catch statement.");
12     }
13 }

该程序输出如下:

1 Division by zero.
2 After catch statement.

注意在try块中的对println( )的调用是永远不会执行的。一旦异常被引发,程序控制由try块转到catch块。执行永远不会从catch块“返回”到try块。因此,“This will not be printed。”


将不会被显示。一旦执行了catch语句,程序控制从整个try/catch机制的下面一行继续。

一个try和它的catch语句形成了一个单元。catch子句的范围限制于try语句前面所定义的语句。一个catch语句不能捕获另一个try声明所引发的异常(除非是嵌套的try语句情况)。

被try保护的语句声明必须在一个大括号之内(也就是说,它们必须在一个块中)。你不能单独使用try。

构造catch子句的目的是解决异常情况并且像错误没有发生一样继续运行。例如,下面的程序中,每一个for循环的反复得到两个随机整数。这两个整数分别被对方除,结果用来除12345。最后的结果存在a中。如果一个除法操作导致被零除错误,它将被捕获,a的值设为零,程序继续运行。
 1 // Handle an exception and move on.
 2 import java.util.Random;
 3 
 4 class HandleError {
 5     public static void main(String args[]) {
 6         int a=0, b=0, c=0;
 7         Random r = new Random();
 8 
 9         for(int i=0; i<32000; i++) {
10             try {
11                 b = r.nextInt();
12                 c = r.nextInt();
13                 a = 12345 / (b/c);
14             } catch (ArithmeticException e) {
15                 System.out.println("Division by zero.");
16                 a = 0; // set a to zero and continue
17             }
18             System.out.println("a: " + a);
19         }
20     }
21 }

显示一个异常的描述

Throwable重载toString( )方法(由Object定义),所以它返回一个包含异常描述的字符串。你可以通过在println( )中传给异常一个参数来显示该异常的描述。例如,前面程序的catch块可以被重写成
1 catch (ArithmeticException e) {
2     System.out.println("Exception: " + e);
3     a = 0; // set a to zero and continue
4 }

当这个版本代替原程序中的版本,程序在标准javaJDK解释器下运行,每一个被零除错误显示下面的消息:

1     Exception: java.lang.ArithmeticException: / by zero

尽管在上下文中没有特殊的值,显示一个异常描述的能力在其他情况下是很有价值的——特别是当你对异常进行实验和调试时。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
  • 2021-07-16
  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
猜你喜欢
  • 2021-06-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-08
相关资源
相似解决方案