异常操作
异常操作
捕获异常
使用
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
譬如下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第三个元素的时候就会抛出一个异常。
// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{
public static void main(String args[]){
try{
int a[] = new int[2];
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}
}
/**
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block
**/
对于异常的捕获不应该觉得方便而将几个异常合成一个
多重捕获块
一个
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}
上面的代码段包含了
try {
file = new FileInputStream(fileName);
x = (byte) file.read();
} catch(FileNotFoundException f) { // Not valid!
f.printStackTrace();
return -1;
} catch(IOException i) {
i.printStackTrace();
return -1;
}
异常抛出
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用
public void test() throws Exception {
throw new Exception();
}
从上面这一段代码可以明显的看出两者的区别。
import java.io.*;
public class className
{
public void deposit(double amount) throws RemoteException
{
// Method implementation
throw new RemoteException();
}
//Remainder of class definition
}
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。例如,下面的方法声明抛出
import java.io.*;
public class className
{
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException
{
// Method implementation
}
//Remainder of class definition
}
finally 关键字
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
其示例如下:
public class ExcepTest{
public static void main(String args[]){
int a[] = new int[2];
try{
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
finally{
a[0] = 6;
System.out.println("First element value: " +a[0]);
System.out.println("The finally statement is executed");
}
}
}
/**
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed
**/
注意,
finally 与return
若有
try{
//待捕获代码
}catch(Exception e){
System.out.println("catch is begin");
return 1;
}finally{
System.out.println("finally is begin");
}
在
catch is begin
finally is begin
也就是说会先执行
try{
//待捕获代码
}catch(Exception e){
System.out.println("catch is begin");
return 1;
}finally{
System.out.println("finally is begin");
return 2 ;
}
返回的是