java流的控制_最终在Java中尝试流控制

一种方法使用try和catch关键字的组合来捕获异常。在可能产生异常的代码周围放置了一个try / catch块。try / catch块中的代码称为受保护的代码,使用try / catch的语法如下所示-

语法try {

//受保护的代码

} catch (ExceptionName e1) {

//渔获

}

容易出现异常的代码放在try块中。当发生异常时,该异常发生由与其关联的catch块处理。每个try块都应紧随其后的是catch块或finally块。

catch语句涉及声明您要捕获的异常类型。如果受保护的代码中发生异常,则将检查try之后的catch块。如果在catch块中列出了发生的异常类型,则将异常传递到catch块的方式与将参数传递给方法参数的方式一样。

示例

以下是声明了2个元素的数组。然后代码试图访问3次,其抛出异常数组的元件。// File Name : ExcepTest.java

import java.io.*;

public class ExcepTest {

public static void main(String args[]) {

try {

int a[] = new int[2];

System.out.println("访问元素三:" + a[3]);

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("抛出异常:" + e);

}

System.out.println("Out of the block");

}

}

这将产生以下结果-

输出结果抛出异常:java.lang.ArrayIndexOutOfBoundsException: 3

Out of the block

多个捕获块

一个try块之后可以是多个catch块。多个catch块的语法如下所示-

语法try {

//受保护的代码

} catch (ExceptionType1 e1) {

//渔获

} catch (ExceptionType2 e2) {

//渔获

} catch (ExceptionType3 e3) {

//渔获

}

前面的语句演示了三个catch块,但是一次尝试后可以有任意多个。如果在受保护的代码中发生异常,则将该异常引发到列表中的第一个catch块。如果抛出的异常的数据类型与ExceptionType1相匹配,它将在此处被捕获。如果不是,则异常传递到第二个catch语句。这种情况一直持续到捕获到异常或通过所有捕获捕获异常为止,在这种情况下,当前方法停止执行,并且异常被抛出给调用堆栈中的上一个方法。

示例

这是显示如何使用多个try / catch语句的代码段。try {

file = new FileInputStream(fileName);

x = (byte) file.read();

} catch (IOException i) {

i.printStackTrace();

return -1;

} catch (FileNotFoundException f) // Not valid! {

f.printStackTrace();

return -1;

}

捕获多种类型的异常

从Java 7开始,您可以使用单个catch块处理多个异常,因此此功能简化了代码。这是您将如何做-catch (IOException|FileNotFoundException ex) {

logger.log(ex);

throw ex;

最后一块

finally块位于try块或catch块之后。无论是否发生异常,始终都会执行一个finally代码块。

通过使用finally块,无论受保护的代码发生了什么,您都可以运行要执行的任何清理类型的语句。

最后一个块出现在catch块的末尾,语法如下:

语法try {

//受保护的代码

} catch (ExceptionType1 e1) {

//渔获

} catch (ExceptionType2 e2) {

//渔获

} catch (ExceptionType3 e3) {

//渔获

}finally {

//finally块始终执行。

}

示例public class ExcepTest {

public static void main(String args[]) {

int a[] = new int[2];

try {

System.out.println("访问元素三:" + a[3]);

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("抛出异常:" + e);

} finally {

a[0] = 6;

System.out.println("First element value: " + a[0]);

System.out.println("The finally statement is executed");

}

}

}

这将产生以下结果-

输出结果抛出异常:java.lang.ArrayIndexOutOfBoundsException: 3

First element value: 6

The finally statement is executed

请注意以下内容-没有try语句,catch子句将不存在。

每当存在try / catch块时,都不必具有finally子句。

没有catch子句或finally子句,try块将不存在。

在try,catch和finally块之间不能存在任何代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值