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."); } }
此程序生成以下输出:
![](http://img.voidme.com/vcimg/000/000/002/034_5d1_cdf.png)
例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); } } }
上面的代码生成以下结果。
![](http://img.voidme.com/vcimg/000/000/002/035_c24_2d1.png)