首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

11.2 捕获错误

2012-10-17 
11.2 捕获异常捕获异常必须设置try/catch语句块,最简单的try语句:try {//code//more code} catch (Excepti

11.2 捕获异常

捕获异常必须设置try/catch语句块,最简单的try语句:

try {//code//more code} catch (ExceptionType e){//handler for this type}
1、如果在try语句中的任何代码抛出了catch子句中说明的异常类:

1)程序跳过try语句块的其余代码

2)程序执行catch字句中的处理器代码

2、如果try语句块中没有抛出任何异常类则跳过catch子句。

3、如果方法中任何代码抛出了在catch子句中没有声明的异常类型,该方法会立即退出。

public void read(String filename) {try {InputStream in = new FileInputStream(filename);int b;while ((b = in.read()) != -1) {//process input}} catch (IOException exception) {exception.printStackTrace();}}

11.2.1捕获多个异常

try {//code that might throw exceptions}catch (MalformedURLException e1) {//emergency action for malformed URLs}catch (UnknownHostException e2) {//emergency action for malformed hosts}catch (IOException e3) {//emergency action for all other I/O problems}
要想获得对象更多的信息,可以使用:e3.getMessage()

想得到详细的错误信息(如果有的话),使用:e3.getClass().getName()得到异常对象的实际类型


11.2.2再次抛出异常与异常链接

在catch子句中可以抛出一个异常,这样可以改变异常的类型。

下面是捕获异常并再次抛出的基本方法:

try {//access the database}catch (SQLException e) {Throwable se = new ServletException("database error");se.initCause(e);throw se;}
捕获异常后可以用Throwable e = se.getCause();语句得到原始异常。


11.2.3Finally子句

不管是否有异常被捕获,都要执行finally子句中的代码。

下列例子程序将释放所以环境中的图形设备文本:

package core.stacktracetest_11_1;import java.util.Scanner;/** * @author vincent */public class StackTraceTest {    public static int factorial(int n) {        System.out.println("factorial(" + n + "):");                Throwable t = new Throwable();        StackTraceElement[] frames = t.getStackTrace();        for (StackTraceElement f : frames)            System.out.println(f);        int r;        if (n <= 1) r = 1;        else r = n * factorial(n - 1);        System.out.println("return" + r);        return r;    }    public static void main(String[] args) {        @SuppressWarnings("resource")        Scanner in = new Scanner(System.in);        System.out.println("Enter n: ");        int n = in.nextInt();        factorial(n);    }}

热点排行