zoukankan      html  css  js  c++  java
  • Java基础——异常

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

    异常处理:

    可以挖很多个陷阱,但是不要都是一样的陷阱,要不然没有意义。
    一旦发生异常,产生一个异常对象,立即终止代码向下执行,寻找陷进处理异常,如果当前陷阱无法接受异常对象,就会向外抛,一直抛给能处理异常的陷阱。

    异常捕获:
    异常捕获是一种特殊的处理机制,跟if else不一样。If else是通过一个条件判断来进行分支,异常一旦发生就终止代码运行,马上去找捕获区(处理者)进行相应的处理。

    捕获语法: try{
    //可能会出错的代码
    }catch(陷阱类型){
    处理
    }

    例题1:打印结果为1、2、3、5、6.
    S.toString();出现了异常直接跳到了NullPointerException e 陷阱中,把4号的代码终止了,因为s.toString 出现了出错直接抛给了陷阱。进入陷阱后进行了相应的处理,代码再往下走。

    image

    例题2:
    打印结果:1、2、5、7。
    执行过程:从main方法开始,打印了“1”、“2”,发生了一个不能被0整除的错误,抛给了ArithmeticException e陷阱,打印了“5”、“7”。

    image

    例题3:
    打印结果:1、2、1、3、6、7.
    执行过程:先打印1,然后打印2, 1/1=1, 打印1,接着打印3,最后申请一个数组,数组长度为1,发生了数组下标越界错误,走进了(ArrayIndexOutOfBoundsException e)陷阱,走进陷进后打印了6,最后打印了7。

    image

    例题4:
    打印结果:1、2、3。
    执行过程:先打印了1、2、3,然后出现了下标越界错误,代码中并没有挖下标越界错误的陷阱,它是无法执行的。Java的原理:异常一旦抛出,就会疯狂的找对应异常的陷阱,找不着就往外面找,终止外面的代码执行,外面在找不着再往最外面找。会导致一直终止代码。

    image

    image

    例题5:先执行main方法,调用了m2(); ,m2调用了m1,m1调用了m,m出现了下标越界异常,m方法中没有处理数组越界的陷阱,所以无法处理数组越界异常。无法处理就向外抛,抛给了被调用者,m1没有处理者,又抛给了m2,m2又抛给了main方法,main方法中又相应的陷阱处理,跳到了数组越界处理的陷阱中,往下执行。(如果main方法没有相应的陷阱话,就会往外抛)

    image

    通用陷阱:
    抛异常都是对象形式,对象找陷阱时候的是使用instanceof 能通过的就可以。
    通用陷阱就是写他们的父类,用父类做陷阱类型,可以接受更多异常。

    异常家族:Object--------Throwable
    1.Exepion(程序抛出的异常) :RuntimeException(运行时异常)
    2.Error (虚拟机抛出的错误)

    Exepion:是一个比较严重的错误,要不然就写个try()catch{}伺候着,不然就向外抛出。 RuntimeException:这种错误是操作时的错误,这种错误一般认为,技术好有经验的话都可以避免。所以没有必要强制写try()catch{}。

    通用陷阱要挖在最后,不然就独有一个。(要不然没有意义)

    image

    finally:最终执行块。
    写在最后。
    出现异常,或者不出现异常都会执行finally最终执行块。

    写法:
    1.try()[
    }finally{
    }

    2.try{
    }catch(){
    }catch(){
    }finally{
    }

    例题:
    打印结果:1、2、4。
    执行过程:先执行打印1、2,然后出现不能被0整除异常,往外抛,往外抛之前要执行最终执行块。

    image

    例题2:
    打印结果:
    执行过程:先执行打印1、2,然后生发一个数组越界错误,执行4,然后抛到6.因为try 的结构结束了,里面的代码执行完了。然后异常抛给了6,打印了6,接着打印7、8.

    image

  • 相关阅读:
    详解Python模块导入方法
    第15天上课例子,sqllchemy运用
    【Demo 0075】获取系统进程列表
    【Demo 0076】获取进程中模块列表
    【Demo 0071】托盘小工具
    【Demo 0070】读取EXE\DLL中ICON
    【Demo 0073】复合文件拼拆
    【Demo 0072】启动外部应用程序
    【Demo 0078】获取系统版本信息
    【Demo 0079】进程继承关系
  • 原文地址:https://www.cnblogs.com/kaigexuetang/p/9357042.html
Copyright © 2011-2022 走看看