讲师笔记,Java基础学习之路之day12——异常,方法重写

异常    Exception
    不正常,没有按照原有计划执行
    在java中,用来描述现实生活中的问题这一类事物 ,并将问题封装成对象。
    
    编译器能够发生的错误叫做编译错误  不叫异常
    异常是在运行时发生的不正常情况。
    
异常的分类
    Throwable 所有异常的父类
        有两个子类:Error Exception
        
    对于严重的问题  java是通过Error类来进行描述
        Error:硬件,虚拟机在运行期间发生的错误,程序员不需要关心如何处理
    对于不严重的问题  java是通过Exception类来进行描述
        出现exception异常程序员必须给出相应的处理方案

java异常处理机制:
    try{
        //可能会出现异常的代码块
    }
    catch(异常类型1  异常对象名1){
        //处理异常的代码块
    }
    catch(异常类型2  异常对象名2){
    }....
    异常处理过程:
    1.抛出异常
    2.捕获异常
    3.处理异常
    
    注意:
    1.try里面一旦抛出异常立马跳到catch中处理,try里面没有异常抛出。跳过catch执行后续代码。
    2.当异常处理的代码执行结束后,不会回到try中去执行尚未执行的代码.

throws
    声明方法 可能会发生哪些异常
    throws后面,可以跟多个异常类型,中间用逗号隔开
    throws抛出的异常,由调用者来解决
    
throws和trycatch区别:
    trycatch 自行处理异常  不需要外部了解出现的问题
    throws    让调用者来处理异常   需要外部关心出现的问题
    
    
自定义异常:
    自定义异常类   extends Exception        
    并且提供构造方法


throw 和 throws 区别:
    throws用在方法定义上  表示会引发的异常可能性 
    throw明确抛出某个异常对象
    
Exception体系中:
    RuntimeException extends Exception extends Throwable
    
        RuntimeException运行时异常 / 非检查性异常
            如果出现该类异常,不必在程序中声明对该类异常的处理,就可以通过编译。
        Exception检查性异常 /非运行时异常
            如果出现该类异常,必须给出相应的处理代码,否则无法通过编译。
            
        运行时异常:
            NullPointerException
            ArrayIndexOutOfBoundsException
            ArithmaticException
            ClassCastException
        检查性异常:
            FileNotFoundException
            IOException
            ClassNotFoundException
    
    解决异常:
        从堆栈信息从上往下找 找第一行自己写的代码
        如果有caused by 从caused by第一行开始找
    

方法重写中声明异常的原则:
    子类声明的异常范围不能超过父类声明异常范围
    1.父类没有声明异常,子类不能声明异常
    2.不可以抛出重写方法抛出的异常类的父类或者上层类
    3.抛出的异常类型数目 不可以 比 原有方法还多  (不是指的个数  是类型)
    
    以上限制只针对检查性异常

---------------------------------------------------------

try{

}
catch(){
}
finally{
    //不管是否有异常产生 都要执行的代码块
    //一般会存放关闭资源相关的代码
}

try{
    连接数据库
    数据操作 // throw new SQLException("数据库访问失败");
}
catch(SQLException e){
    对数据库进行异常处理   
    throw new SerivceException("服务器正忙");
    
}
finally{
    关闭数据库    //无论数据操作是否成功 一定要关闭资源
}


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


return 和 finally 执行顺序:
    1.先执行try catch 遇到return  保存返回值
    2.执行finally
    3.方法结束 返回值
    
    此时,return的作用:把某个值放到方法区的返回值区域内,并没有结束方法。
    

猜你喜欢

转载自blog.csdn.net/u011189148/article/details/81417076