异常就是在程序运行过程中发生了无法继续执行代码的情况 异常就是程序的运行不同于正常情况
谁也不能保证自己写好的程序没有一个异常出现。
就是在程序发生异常后的补救措施,就是发生异常后执行的代码
一旦发生异常,如果不处理,程序就会终止 处理异常后程序就继续运行,保证了程序的健壮性
使用try-catch语句:
try{ //程序代码 }catch(***Exception e){ //try中出现***Exception的处理代码 }finally块是异常处理机制的最后一块,它可以直接跟在try之后或者最后一个catch之后 finally确保程序只要执行到try当中,无论try语句中的代码是否出现错误,finally语句块都会被执行
try{ //程序代码 }catch(***Exception e){ //try中出现***Exception的处理代码 }finally{ //无论try语句中的代码是否出现错误,finally语句块都会被执行 }或
try{ //程序代码 }finally{ //无论try语句中的代码是否出现错误,finally语句块都会被执行 }由于finally块的特征,我们通常将不关乎出错但必须要执行的代码放在这里,比如释放资源这类操作,如IO中的close
package danei.exception; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * IO程序结合异常机制的编写 * * @author Wildmess * */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println("程序开始:"); FileOutputStream fos = null; try { //写一个不存在的文件路径 fos = new FileOutputStream("e://abc.txt"); fos.write(1); } catch (IOException e) { System.out.println("出错了!"); } finally { try { if(fos!=null) { fos.close(); } } catch (IOException e) { System.out.println("关闭时出错了!"); } } System.out.println("程序结束!"); } }上述方法中,finally块虽然可以保证对象一定会close,但是代码编写太麻烦了 于是在JDK7之后推出了一个自动关闭对象的变成结构
package com.tedu.exception; import java.io.FileOutputStream; import java.io.OutputStreamWriter; /** * JDK1.7之后推出了一个新特性:自动关闭 * @author Wildmess * */ public class FinallyDemo3 { public static void main(String[] args) { System.out.println("程序开始:"); /* * JDK7之后的这个特性允许我们将需要关闭的内容定义在try后面的()当中 * 但是需要注意:只有实现了AutoCloseable接口的类可以在这个定义 * 剩下的还是应当在try语句块中定义,否则会出现编译错误 * * 该特性是编译器认可,当编译成class文件后,自动的将try()中的资源自动的关闭 * 其实还是在finally中将流关闭 */ try( FileOutputStream fos = new FileOutputStream("e:/abc.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); ) { osw.write(1); } catch (Exception e) { System.out.println("文件不存在!"); } System.out.println("程序结束!"); } }