A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 sun2ice 于 2018-1-4 17:32 编辑

#day08异常

##异常概述异常的体系结构
*    异常:不正常,我们写代码的时候出现的编译或者运行时的错误
*    异常体系
    *    Thowable(顶层)
        *    Error:不应该试图捕获的严重问题,不能够处理的异常
        *    Exception:可以处理的异常  #编译时异常
            *    RuntimeException   #运行时异常
##异常处理
*    JVM处理
    *    把异常的类型,原因还有位置显示在命令行 并终止程序,异常后面的代码不执行
*    捕获处理
    *    try...catch语句格式
```
try{
    有可能出现问题的代码
}catch(异常类型 变量名){
    处理异常
}
try...catch 的执行顺序:首先执行try语句
有异常,异常代码那一行下面的代码不在执行,,直接到catch语句中,继续执行catch后面的代码
没有异常,跳过catch语句,执行后面的代码
```
    *    多个try...catch语句try...catch...catch
```
使用try-catch捕获多个异常:
try{
     编写可能会出现异常的代码
}catch(异常类型A  e){  当try中出现A类型异常,就用该catch来捕获.
     处理异常的代码
     //记录日志/打印异常信息/继续抛出异常
}catch(异常类型B  e){  当try中出现B类型异常,就用该catch来捕获.
     处理异常的代码
     //记录日志/打印异常信息/继续抛出异常
}
注意:
1):一个catch语句,只能捕获一种类型的异常,如果需要捕获多种异常,就得使用多个catch语句.
2):代码在一瞬间只能出现一种类型的异常,只需要一个catch捕获,不可能同时出现多个异常.
多个catch之间的顺序
可以有子父类关系 父类放在子类后面
平级之间没有顺序
```
*    JDK1.7后
    *    `catch(异常1 | 异常2 异常变量名){  }`
*    抛出异常   
    ```
    *    throw:  运用于方法内部,用于给调用者返回一个异常对象,和return一样会结束当前方法.
    throw语句:
    运用于方法内部,抛出一个具体的异常对象.
    throw  new  异常类("异常信息"); 终止方法.
    throw:
    一般的,当一个方法出现不正常的情况的时候,我们不知道该方法应该返回什么,此时就返回一个错误,在catch语句块中继续向上抛出异常.
    return 是返回一个值,throw 是返回一个错误,返回给该方法的调用者.
    ```
    ```
    *    throws: 运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).   
如果每一个方法都放弃处理异常都直接通过throws声明抛出,最后异常会抛到main方法,如果此时main方法不处理,继续抛出给JVM,底层的处理机制就是打印异常的跟踪栈信息.
    ```
   
##Throwable常用方法
```
1):String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因).
2):String toString():获取异常的类型和异常描述信息(不用).
3):void printStackTrace():打印异常的跟踪栈信息并输出到控制台.  不需要使用System.out.println.包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace.
记住:现在在catch语句块中,必须写:e.printStackTrace();目的:查看异常的具体信息,方便调试和修改.
```
##finally的使用
*    组合trycatch使用,用于释放资源等收尾工作,无论try...catch语句如何执行执行,finally的代码一定会执行
```     
    try{
        可能出现的问题
    }catch(异常对象){
        处理异常
    }finally{
        释放资源
        清理垃圾
    }
```
##异常的分类
*    运行时期异常  
    *    继承RuntimeException
    *    编译期间可处理可不处理
*    编译时期异常
    *    继承Exception的子类 非RuntimeException 得子类
    *    编译期间必须处理
##自定义异常类
*    什么是自定义异常类:
    *    在开发中根据自己业务的异常情况来定义异常类.
*    异常类如何定义:
    *    方式1):自定义一个受检查的异常类: 自定义类 并继承于`java.lang.Exception.`
    *    方式2):自定义一个运行时期的异常类:自定义类 并继承于`java.lang.RuntimeException.`
    ##递归
*    原理 将打的问题拆分为小问题,将小问题在拆分更小的问题,放过来解决
*    在方法本身不断的调用方法自己
*    注意事项
    *    递归一定要有出口,内存溢出
    *    递归次数不宜过多,内存溢出
    *    递归可以用循环实现 反之不一定
   

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马