异常处理机制"/>
异常处理机制
java的异常处理机制try{}catch,注意try不能单独使用,后面需要紧接着catch将异常抛出。
try{
可能重写异常的代码片段,
JVM执行到这里时如果发生异常就会实例化一个对应的异常实例,并将程序执行过程设置进去,
然后将异常抛出
如:
String line=null;
System.out.println(line.length);//错误代码}catch(NullPinterExceptione e){//去捕获对应的异常}catch(NullPointerException ||Exception){//可以同时捕获多异常 也可以直接用异常超类扩大范围,避免因为捕获异常而中断程序的运行}
异常机制中的fainlly块
finally块是异常处理机制的最后一块,它可以跟着try之后或者最后的catch后面。
finally可以保证只要程序执行到try语句块中。无论try中是否程序异常,finally最终都会必定执行
通常我们将释放这类操作放在finall中确保运行,例如Io操作后的最终class()调用
public class File1 {public static void main(String[] args) {FileOutputStream fos=null;try {fos.write(1);fos.close();} catch (Exception e) {e.printStackTrace();}finally {if (fos!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}
还有个更简洁的版本
public class File2 {/**jdk7之后推出了一个自动关闭特性但只有编译器认可,编译器读取完后,再帮你转回原来的样子传给java虚拟机在异常处理机制中用用跟精简的写法完成IO的关闭特性**/public static void main(String[] args) {try (//里面有finally的属性,而且还帮你加close方法FileOutputStream fos=new FileOutputStream("XXX");//注意的是不是所有东西都可以放进去,这个可以因为继承了//OutputStream的类和AutoClose接口(此接口可以自动调用close方法)){fos.write(3);} catch (Exception e) {e.printStackTrace();}}
}
finally好处:
try {//String line="abc";String line=null;System.out.println(line.length());System.out.println("aaaaaaaaa");return;//如果前面代码报错那么就不执行return,//走catchd代码块}catch (Exception e){System.out.println("出错了");}finally {System.out.println("AAAAAAAAAA");//一定先执行finally的代码块,再执行return;结束方法}}
}
更多推荐
异常处理机制
发布评论