day15 java 异常类

   

异常 : 指的是在程序运行的过程中,出现非正常的情况导致程序终止
        注意:异常不是指的语法错误或逻辑代码错误

    JVM(系统)是如何处理异常的
        Java中把不同的异常用不同的类表示。一旦发生某种异常。系统就会创建对应异常类的对象并抛出。
        该异常是可以被catch到如果catch到后可以做相应的处理。如果没有catch动作程序终止运行。

    异常体系结构:
        |------Throwable
            |-------Error: 表示严重错误。无法catch只能程序挂掉。
            |-------Exception :表示普通异常是可以被catch到的。catch到后可以做相应的处理程序不会挂掉。没有catch到程序一样终止运行。
                |------编译时异常(受检异常):在程序编译的时候发生的异常-不一定会真正的发生异常只是有可能会发生异常
                        例:有一个程序该程序需要读取配置文件,但该配置文件有可能找不到不是说一定找不到。
                            那这个读取文件的操作(方法)就会在编译时发生异常-所以需要处理该异常-万一找不到了怎么办。
                |------运行时异常(非受检异常)(RuntimeException及子类):在程序运行的时候发生的异常。
                            这类异常是由程序员的代码编写错误导致(比如:空指针  下角标越界 类型转换异常)
 

我们提到的异常指的是Exception

处理异常:
    方式一 :try-catch-finally
    方式二 :throws

处理异常方式一:try-catch-finally
   格式:
        try{
            可能会发生异常的代码
            代码1
            代码2 --> 发生异常。代码3就不再执行了
            代码3
        }catch(异常类型1){
            异常类型1的处理
        }catch(异常类型2){
            异常类型2的处理
        }
        .......
        finally{
            一定要执行的代码
        }
   说明:
     1.如果try中的代码没有发生异常 那么会执行完try中所有的代码后跳到finally中执行finally中的代码。
        然后跳出try-catch-finally结果继续向下执行其它代码

     2.如果try中的代码发生了异常 那么在try中发生异常的代码后面的try中代码不再执行。
        系统会根据相应的异常创建异常类的对象并抛出。因为我们会catch异常所以会和catch后面的异常类型匹配。
        如果和第一个catch后面的异常类型匹配失败继承向下匹配直到匹配成功并执行相应catch中的代码执行完后
        跳到finally中并执行finally中的代码执行完后跳出try-catch-finally并继续向下执行其它代码。
        如果向下匹配失败那么会进入finally中执行finally中的代码然后终止程序的运行(因为没抓到异常-没有匹配成功)。

    3.注意:finally可以省略不写 ,如果有finally无论什么情况finally中的代码一定会执行。

异常的API :
    getMessage() : 获取异常信息 -- 将异常信息写到日志文件
    printStackTrace() : 将异常信息打印到控制台

异常的类型写父类还是具体的类型呢?
    场景1(异常类型写父类) : 无论什么异常全部是统一处理方式
    场景2(异常类型要写具体的类型 最后用父类兜底) :不同的异常不同的处理方法
注意:如果要匹配多种异常类型 小的(异常的子类)在前面大的(异常的父类)在后面。

try-catch : 有异常要处理 没有一定要执行的代码
try-catch-finally : 有异常要处理 而且有一定要执行的代码(比如 ①关闭资源 ②保存某些数据 ③保存某些状态)
try-finally : 有异常不处理  有一定要执行的代码(比如 ①关闭资源 ②保存某些数据 ③保存某些状态

在jdk1.7的时候 catch中的写法可以这么写 :catch(异常的类型 | 异常的类型2 e)

finally : finally中的代码一定会执行(除非System.exit(0) 关闭JVM).

1.就算在try-catch中有return finally中的代码也一定要执行
2.如果finally中出现return那么try-catch中的return就失效了 -- (其实发生覆盖)

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值