JavaSE进阶-异常

    异常                  【重点】

异常的概述
    什么是异常
        在Java程序编译和运行过程中,出现的不正常情况

        Java是面向对象的语言,在Java中研究任何的东西都必须封装成对象,异常也不例外
        有对象肯定有类,并且在Java的不正常可能非常多种,那么对应异常的类也会非常多,这些类
        的共性不断向上抽取,就形成了异常的继承体系结构。

    异常的体系结构
        Throwable
            |-Error:错误,严重问题,不要使用异常处理语句进行处理,这种错误情况的发生和代码逻辑、硬件等是有关系
                     这不是我们要研究和学习的问题
            |-Exception:异常,非严重问题
                |-编译时异常
                |-运行时异常

    异常的分类
        编译时异常和运行时异常

    编译时异常和运行时异常的区别
        编译时异常
            1、在Exception类下,除了RuntimeException及其子类之外的都是编译时异常
            2、编译时异常在编译时期会报出,编译时期必须处理否则编译无法通过
        运行时异常
            1、在Exception类下,RuntimeException及其子类都是运行时异常
            2、运行时异常在编译时期不会报出,编译时期可以处理也可以不处理

            编译时期异常报出问题更早一些,起到提前提醒的作用


JVM默认处理异常的方式
    JVM调用main方法,当main方法中出现了异常并且没有处理,则最终会交给JVM来进行处理
    JVM如何处理:
        1、将异常信息以红色字体显示在控制台
        2、在出现异常的那行代码处结束程序

异常处理的方式
    这里是程序员(我们)处理异常的方式

    方式一:throws声明抛出处理
        在方法的声明处使用throws关键字抛出处理异常
        格式:
            修饰符 返回值类型 方法名(参数列表) throws 异常类名1,异常类名2,... {
                方法体;
            }

        这种处理异常的方式并没有真正的处理异常,而是将异常抛给调用者处理。
        throws没有真正的处理问题,只是将编译的报错处理,从而可以编译通过
        throws处理异常一般都只处理编译时异常,一般不去处理运行时异常,因为基本上没有意义

    方式二:try...catch捕获处理
        格式一:
            try{

            }catch(异常类型 变量名){

            }
        格式二:
            try{

            }catch(异常类型 变量名){

            }finally{

            }
        格式三:
            try{

            }finally{

            }

        格式上的注意事项:
            1、只有以上三种组合的格式
            2、格式中包含catch的,其中的catch块可以有多个
            3、try、catch和finally都是关键字
                try:检测,存放可能出现异常的代码
                catch:捕获,小括号用于捕获,大括号用于处理
                finally:最终,存放一定会执行的代码,不论异常是否产生其中的代码一定会执行
                        finally一般由于做一些收尾工作,比如:IO流释放资源

         这种方式才是真正处理异常的方式,这种方式既可以处理编译时异常,也可以处理运行时异常
         处理编译时异常:
            throws:不知道如何处理,或者不该在这里处理,或者懒得处理的这些情况,都是有throws
            try...catch

            总结:学习阶段判断编译时异常基本都throws处理即可

         处理运行时异常
            try...catch

    注意事项:
        1. 如果 try 中没有遇到问题,怎么执行?
            把try中所有的代码执行完毕,并且不会进入到catch中,
            try...catch语句下面有代码会继续执行
        2. 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
            try中出现问题之后,下面的代码不会执行,会在出现问题的代码处直接进到catch执行
            try...catch语句下面有代码会继续执行

        3. 如果出现的问题没有被捕获,那么程序如何运行?
            没有被捕获就相当于没有处理,最终还是交给JVM处理

        4. 同时有可能出现多个异常怎么处理?
            (1)每个异常使用一个try...catch语句单独处理
            (2)一个try...catch语句,但是使用多个catch块
                注意:大异常必须放在最后的catch中

Throwable的常见方法
     String getMessage():获取异常信息,异常的原因
     String toString():获取异常信息,原因和类型
     void printStackTrace() :打印异常信息,原因、类型和位置

throws和throw的区别
    throws:异常处理的方式之一
            使用在方法声明上
            throws后面跟的是异常类名,可以跟多个,多个之间使用逗号分隔

    throw:不是异常处理的方式之一,你可以认为它是制造异常的方式
            使用在方法体内
            throw后面跟的是异常对象(名),只能跟一个,不能跟多个

自定义异常       [了解]
    为什么要自定义异常
        为了做到见名知义,JDK提供了很多异常的类,但是这些类无法穷举程序中碰到的问题,
        此时我们可能需要自定义异常,看到这个异常的名字就能反映这个异常产生的原因

    如何自定义异常
        1、自定义一个类,继承RuntimeException或者Exception
            自定义运行时异常:继承RuntimeException
            自定义编译时异常:继承Exception
        2、建议生成两个构造方法
            一个是空参
            一个是带一个字符串参数的构造:字符串参数的作用是可以传递异常产生的原因

    自定义异常之后如何使用
        和JDK提供的异常一样使用
        编译时异常,编译时期不处理会编译不通过,必须处理,可以throws也可以try...catch
        运行时异常,编译时期不处理不会编译报错,一般try...catch处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值