笔记(十五):异常

    科技2024-11-03  11

    异常

    什么是异常什么是异常处理为什么需要异常处理如何处理异常try-catch异常处理实例 finally块finally实例基本功能实例利用finally块关闭IO流

    什么是异常

    异常就是在程序运行过程中发生了无法继续执行代码的情况 异常就是程序的运行不同于正常情况

    谁也不能保证自己写好的程序没有一个异常出现。

    什么是异常处理

    就是在程序发生异常后的补救措施,就是发生异常后执行的代码

    为什么需要异常处理

    一旦发生异常,如果不处理,程序就会终止 处理异常后程序就继续运行,保证了程序的健壮性

    如何处理异常

    使用try-catch语句:

    try{ //程序代码 }catch(***Exception e){ //try中出现***Exception的处理代码 }

    try-catch异常处理实例

    package com.tedu.exception; /** * try-catch语句的使用 * Exception类是所有异常类的父类 * * @author Wildmess * */ public class TryCatchDemo { public static void main(String[] args) { System.out.println("程序开始:"); try { /* * 在try块中发生的异常会匹配catch块中指定的异常类型 * 如果匹配就进入catch运行 */ String str = null; System.out.println(str.length()); System.out.println(str.charAt(1)); } catch (NullPointerException e) { System.out.println("出现了空指针异常!"); //e.printStackTrace(); //这个方法会输出程序的异常类型 } catch(StringIndexOutOfBoundsException e) { System.out.println("出现了字符串索引越界异常!"); } catch (Exception e) { //最后最好写上父类Exception,让没有考虑到的异常全都可以被匹配到,让程序可以正常运行 e.printStackTrace(); } //可以查看是否运行到此处 System.out.println("程序结束!"); } }

    finally块

    finally块是异常处理机制的最后一块,它可以直接跟在try之后或者最后一个catch之后 finally确保程序只要执行到try当中,无论try语句中的代码是否出现错误,finally语句块都会被执行

    try{ //程序代码 }catch(***Exception e){ //try中出现***Exception的处理代码 }finally{ //无论try语句中的代码是否出现错误,finally语句块都会被执行 }

    try{ //程序代码 }finally{ //无论try语句中的代码是否出现错误,finally语句块都会被执行 }

    finally实例

    基本功能实例

    package danei.exception; public class FinallyDemo1 { public static void main(String[] args) { System.out.println("程序开始:"); try { String str = null; System.out.println(str.length()); System.out.println(str.charAt(1)); } catch (Exception e) { System.out.println("出现了异常!"); } finally { System.out.println("我finally是一定要执行的!"); } System.out.println("程序结束!"); } }

    利用finally块关闭IO流

    由于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("程序结束!"); } }
    Processed: 0.022, SQL: 8