finally块:
- 使用前提是必须要存在try块才能使用。
- finally代码块在任何情况下都会执行,除了jvm退出(System.exit(0))的情况。
- 适合做释放资源的工作,保证资源在任何情况下都会被释放。
补充
try块的三种组合方式:
- 第一种:比较适用于有异常要处理,但不需要释放资源
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
} - 第二种:比较适用于既有异常要处理,又要释放资源的代码
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
}finally{
释放资源的代码
} - 第三种:比较适用内部抛出的是运行时异常,并且有资源要被释放(开发中很少见)
try{
可能发生异常的代码
}finally{
释放资源的代码
}
class Demo{
public static void main(String[] args){
div(4, 0);
}
public static void div(int a, int b){
try{
int c = a/b;
System.out.println("c="+ c);
}catch(Exception e){
System.out.println("出现了除数为0的异常")
}finally{
System.out.println("finally代码块");
}
}
}
finally释放资源代码
import java.io.*;
class Demo{
public static void main(String[] args){
FileReader fileReader = null;
try{
//找到目标文件
File file = new File("f:\\test.txt");
//建立程序与文件的数据通道
fileReader = new FileReader(file);
//读取文件
char[] buf = new char[1024];
int length = 0;
length = fileReader.read(buf);
System.out.println("读取到的内容:"+ new String(buf, 0, length));
}catch(IOException e){
System.out.println("读取资源文件失败");
}finally{
try{
//关闭资源
fileReader.close();
System.out.println("释放资源文件成功");
}catch(IOException e){
System.out.println("释放资源文件失败");
}
}
}
}