Java 异常

Java教程 - Java异常


异常是在运行时在代码序列中出现的异常状况。例如,读取一个不存在的文件。

Java异常是描述异常条件的对象发生在一段代码中。

关键词

Java异常处理通过五个关键字管理: try,catch,throw,throws和finally。

try block包含要监视的程序语句异常。

如果在块中发生异常,则抛出异常。

catch 语句可以捕获异常并以合理的方式处理它。

要手动抛出异常,请使用关键字throw。

任何抛出的异常一个方法必须由一个 throws 子句指定。

任何代码绝对必须是在try块完成之后执行的命令被放在 finally 块中。


语法

要处理一个异常,我们把可能有的代码在try ... catch语句中的异常。

try { 
// block of code to monitor for errors 
} 
catch (ExceptionType1 exOb) { 
// exception handler for ExceptionType1 
}
catch (ExceptionType2 exOb) { 
// exception handler for ExceptionType2 
}

可能有异常的程序语句包含在 try 块中。异常处理程序使用 catch 语句进行编码。

这里, ExceptionType 是发生的异常的类型。


例子

在try块和catch子句中封装要监视的代码。

下面的程序包括一个try块和一个catch子句处理由除法生成的ArithmeticException错误:

public class Main {
  public static void main(String args[]) {
    int d, a;
    try { // monitor a block of code.
      d = 0;
      a = 42 / d;
      System.out.println("This will not be printed.");
    } catch (ArithmeticException e) { // catch divide-by-zero error
      System.out.println("Division by zero.");
    }
    System.out.println("After catch statement.");
  }
}

此程序生成以下输出:

例2

一旦抛出异常,程序控制就会从try块转移到catch块中。执行从未从catch返回到try块。

以下代码处理异常并继续。

import java.util.Random;

public class Main {
  public static void main(String args[]) {
    int a = 0, b = 0, c = 0;
    Random r = new Random();
    for (int i = 0; i < 32000; i++) {
      try {
        b = r.nextInt();
        c = r.nextInt();
        a = 12345 / (b / c);
      } catch (ArithmeticException e) {
        System.out.println("Division by zero.");
        a = 0; // set a to zero and continue
      }
      System.out.println("a: " + a);
    }
  }
}

上面的代码生成以下结果。