finally
一、实现方法:
1. try{ // 可能发生异常的代码 } catch(异常类的类型 e ){ //当发生指定异常的时候的处理代码 }catch...
比较适合用于专门的处理异常的代码,不适合释放资源的代码。
2.try{ } catch(){} finally{ // 释放资源的代码 }
finally块是程序在正常情况下或异常情况下都会运行的, 比较适合用于既要处理异常又有资源释放的代码。
3. try{ }finally{ // 释放资源 }
比较适合处理的都是运行时异常且有资源释放的代码。
二、总结
finally关键字主要用于释放系统资源,在处理异常的时候该语句块只能有一个。无论程序正常还是异常,都执行finally。但是如果JVM退出System.exit(0),finally就不执行。return都不能停止finally的执行过程。
三、案例
运行流程:
使用FileInputStream加载文件,导入包import java.io.FileInputStream;
FileNotFoundException,导入包import java.io.FileNotFoundException;
IOException,import java.io.IOException;
public class FinallyDemo { // 本例子使用finally关闭系统资源。 public static void main(String[] args) {
FileInputStream fin = null; try { System.out.println("1创建io流可能出现异常"); fin = new FileInputStream("aabc.txt");// 加载硬盘的文本文件到内存,通过流 // System.out.println(fin); } catch (FileNotFoundException e) { System.out.println("2没有找到abc.txt文件"); System.out.println("3catch了"); // System.exit(0); // return; } // finally finally { System.out.println("4fianlly执行"); if (fin != null) {// 如果流对象为null流对象就不存在,没有必要关闭资源 try { fin.close(); } catch (IOException e) { e.printStackTrace(); System.out.println("close异常"); }
} System.out.println("5finally over"); } System.out.println("6mainover"); } }
// 2:无论程序正常还是异常,都执行finally。 但是遇到System.exit(0);jvm退出。 // finally用于必须执行的代码,try{} catch(){}finally{} // try{}finally{} |