Java异常捕获相关

异常的产生

    异常是程序之中导致程序中断的一种指令流,异常一旦出现并且没有进行合理处理的话,那么程序就将中断执行。 我们要做的是即使程序出现了异常,也要让程序在可控范围内正确的执行完毕。

Java异常类继承结构

继承结构

       Java所有的异常类型最高的继承类是Throwable,Throwable下有两个子类:
1. Error:指的是JVM错误,这个时候的程序并没有执行,无法处理;
2. Exception:指的是程序之中出现的错误信息,可以进行异常处理。通常只对Exception进行处理。

try、catch、finally结构

机构如下:

    try {
             可能出现异常的语句 ;
    } [ catch (异常类型 异常对象) {
             处理异常 ;
    } catch (异常类型 异常对象) {
             处理异常 ;
    } ... ] [finally {
             不管是否出现异常,都执行此代码 ;
    }]
  1. 当try内语句产生异常之后,那么JVM根据异常的类型,实例化一个指定异常类的对象;
  2. 首先异常类对象会与catch一个个匹配,匹配成功则执行相应的catch内语句,接下来执行finally(如果有)中的语句,之后程序继续往下执行。
  3. 没有catch将会查找是否有finally(事实上一般情况下try之后必须跟上catch操作,否则编译不通过),有则执行finally,之后程序继续往下执行。
  4. 程序中没有任何的异常处理操作(没有try),则这个异常类的实例化对象将交给JVM进行处理,而JVM的默认处理方式就是进行异常信息的输出,而后中断程序执行。

    • 对一段代码加上try,就等于显示地承诺编译器,对这段代码可能抛出的异常进行捕获而非向上抛出处理。如果是普通异常,编译器要求必须用catch捕获以便进一步处理;如果运行时异常,捕获然后丢弃并且+finally扫尾处理,或者加上catch捕获以便进一步处理。
    • 当try块存在多条语句,如果当前语句抛出异常,接下来的语句将不会执行;
    public static void main(String[] args) {
        File f = new File("");
        try {
            f.createNewFile();
            System.out.println("123");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("IOException");
            // e.printStackTrace();
        } finally {
            System.out.println("finally");
        }
    }

运行结果如下:

运行结构

  • 同常调用printStackTrace()方法进行异常信息的打印,这个方法将打印是完整的异常信息。

异常处理流程:

异常处理流程

throws关键字

    throws关键字主要是在方法定义上使用的,表示的是此方法之中不进行异常的处理,而交给被调用处处理(向上抛出)。

    public static void main(String[] args) {
        try {
            createFile();
        } catch (IOException e) {
            System.out.println("IOException");
            // TODO Auto-generated catch block
            // e.printStackTrace();
        }
    }

    public static void createFile()throws IOException {
        File f = new File("");
        f.createNewFile();
    }

main方法上throws将继续向上抛,交给JVM进行异常的处理,也就是采用默认的方式,输出异常信息,而后结束程序执行。

throw关键字

       在方法体内使用,表示人为的抛出一个异常类对象(这个对象可可以是自己实例化的,也可以是已存在的,通常用自定义异常)。

    try {
        throw new Exception("我的异常");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

RuntimeException类

       Java中规定,对于RuntimeException的异常类型,在编译的时候不会强制性的要求用户处理,用户可以根据需要有选择性的来进行处理,在开发之中,如果没有处理,那么出现异常之后将交给JVM默认进行处理。也就是说,RuntimeException的子异常类,可以由用户根据需要有选择性的来进行处理。

常见的RuntimeException子类

RuntimeException:
- NumberFormatException
- ClassCastException
- NullPointerException
- ArithmeticException
- ArrayIndexOutOfBoundsException。

引用

       感谢大神们无私分享的精神和辛勤的劳动,使我在学习的道路上得到了巨大的帮助和解除困惑。
[1]. Java 异常的捕获与处理详解(一)
[2]. Java 异常的捕获与处理详解(二)
[3]. Java 发生异常,仍然向下执行注意事项 - 感受微风 - ITeye技术网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值