关于异常

一 异常
    1.概念
        1)指程序在执行过程中,出现的非正常情况(不是语法错误),最终会导致JVM的非正常停止
        2)Java处理异常的方式: 中断处理
        3)异常根类似 java.lang.Throwable 其有两个子类
                            |
                            |----java.lang.Error
                            |
                            |----java.lang.Exception
                                            |
                                            |---RuntimeException
                                            |
                                            |---除RuntimeException外的其他异常(编译期异常):这和语法错误不同。
    2.常用方法
        public void printStackTrace()
            打印异常的跟踪栈信息
            详细信息包括异常的类型、原因以及出现的位置。在开发和调试阶段都要使用printStackTrace。
        public String getMessage()
            获取发生异常的原因
            终于将错误信息提示给用户
        public String toString()
            获取异常的类型和异常描述信息(不用)

    2.Error 子类和 Exception 子类
        1)Error
            (1)系统内部错误,程序员不能够处理的异常,只能尽量事先避免
            (2)不能处理的错误
                    (a)内存溢出
                    (b)系统崩溃
                    ...
        2)Exception
            (1)由于用户或程序员使用不当导致的异常,可以避免,通过代码的方式纠正,使程序继续运行,是必须要处理的。
            (2)Exception 分类
                    (a)编译时期异常(checked 异常)
                        在编译时期就会检查,如果没有处理,无法通过编译。
                    (b)运行时期异常(runtime 异常)
                        在运行时期检查异常,在编译时期编译器不会报错。
    3.异常处理的关键字
        try、 catch、 finally、 throw、 throws
        1)throw
            用来抛出一个指定的异常对象
            抛出异常具体操作
            (1)创建一个异常对象。封装一些提示信息(信息可以自己编写)
            (2)需要将异常对象通过throw告知给调用者,throw 用在方法内,用来跑出一个异常对象,传递给调用者,并结束当前方法的执行
                    (a)格式
                        throw new 异常类名(参数);
        2)throws
            将问题标识出来,报告给调用者。如果方法内通过throw跑出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者取处理
            throws用于方法声明之上,表示当前方法不处理异常,而是该方法的调用者来处理异常。
            (1)格式
                修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2...{}
                注:若该方法有多种异常情况,可以再throws后面写多个异常类,用逗号隔开。
    4.异常处理方式
        1)捕捉处理 try...catch
            try{
                编写可能会出现异常的代码
            }catch(异常类型 e){
                处理异常的代码
                //记录日志/打印异常信息/继续抛出异常
            }
            注:try 和 catch 都不能单独使用
        2)使用throws继续将问题声明出去
    5.多个异常使用捕获处理方法
        1)多个异常分别处理
        2)多个异常一次捕获,多次处理(常用)
        3)多个异常一次捕获,一次处理
        注:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的
            关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
    6.finally 代码块
        1)功能
            一些特定的代码无论异常是否发生,有需要自行。另外异常会引发程序跳转,防止一些语句执行不到。
            注:finally 不能单独使用。
        2)格式
            try{
                编写可能会出现异常的代码
            }catch(异常类型 e){
                处理异常的代码
                //记录日志/打印异常信息/继续抛出异常
            }finally{
                无论异常是否发生都需要运行的代码
            }
        注:当只有 try 或者 catch 中调用退出 JVM 的相关方法,此时finally中的代码才不会执行。
    7.异常注意事项
        1)运行时异常可以不做处理,即不捕获也不声明抛出。
        2)如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集    
        3)父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕捉处理,不能声明抛出
        4)当多异常处理时,捕获处理,前边的类不能是后边类的父类
        5)在 try / catch 后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
        6)如果finally有return语句,永远返回finally中的结果,避免该情况。
    8.常见的几种异常
        1)空指针异常        
                Throwable
                    |---Exception
                            |---RuntimeException
                                    |---NullPointerException
        2)数组下标越界异常
                Throwable
                    |---Exception
                            |---RuntimeException
                                    |---IndexOutOfBoundsException
                                            |---ArrayIndexOutOfBoundsException
        3)数字转换异常
                Throwable
                    |---Exception
                            |---RuntimeException
                                    |---IllegalArgumentException
                                            |---NumberFormatException
        4)算数运算异常
                Throwable
                    |---Exception
                            |---RuntimeException
                                    |---ArithmeticException
        5)转换异常    
                Throwable
                    |---Exception
                            |---ParseException
                
    9.自定义异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值