异常处理

1. 异常机制

(1) 异常概念及常见异常

    ① 什么是(现实生活中的)异常?

        强强:正常上学路上,突然遇到钢管:亲密的接触:耽误上学

    ②什么是Java中的异常

        代码正常运行不会出问题,但是遇到意外,参数变量,不符合要求,发生意外,代码终止运行

        代码中的异常处理好了,代码就可以顺利的继续运行!

(2) 异常的体系结构



    异常都有继承结构分

(3)异常的处理方式

    ① 自己捕获处理

        自己处理,对可能发生异常的代码做处理:

           try{

            //可能发生异常的代码块

           }catch(发生异常的类型 形式参数){

               //在发生异常之后做相应的处理

            }catch(发生异常的类型形式参数){

            }catch(发生异常的类型 形式参数){

            }catch(发生异常的类型 形式参数){

            }finally{

            //一场代码块,执行完成之后,这个位置一定会执行的

          //一般在这里释放锁,或者关闭流资源

            }

        执行流程:进入try语句块----

        正常运行:finally

        发生异常:进入对应异常类型的catch语句块


    ② 自己不处理,抛出给别人

    a. 抛出异常 :自己不处理:抛出:给别人处理

    b. 如果直接抛出异常,发生异常之后的代码是不会运行的

    c. 什么时候可以抛出异常:  除非你发生异常之后的代码,不需要运行的,可以选择抛出

    d.抛出捕获一样的特点:   还是可以抛出父类类型

    e.可以抛出多个异常的

(4) 获得异常信息

    ①(捕获的异常类型 e)捕获的异常实际捕获一个异常对象,该对象e可以在catch语句块直接使用

    ②System.out.println(e);//①直接打印异常对象:发现父类toString覆写了

    ③ System.out.println(e.getMessage());//②异常对象调用方法获取异常信息

    ④ e.printStackTrace();//③【异常对象调用方法,方法内部打印信息】最常用方式用异常对象去获得异常信息

(5) finally语句块

        finally语句块

             try{

             }catch(){

             }fianlly{

  一定会执行的语句块【前提是没有关闭虚拟机】:释放锁,关闭流资源

              }

         finally:特点:return特点别讲解

         只要执行了,return结束方法【finally 结构结束无效:缓存:暂时存着,真的结束才给出去】

        (6) throw主动抛出异常

        异常情况很多,Java不可能写完所有的异常类型,自己写异常类型,表达你业务中的异常类型

        public static void main(String[] args) {

        UserName("李四");

        }

        static String[] name ={"王二","张三"};//创建一个String类型的数组,作为数据库,并赋值

        public static void UserName(String username){//设计一个方法,如果输入的用户名是数据库里有的,就自己抛出错误,如果没有就提示注册成功

            for (String a: name) {//遍历数据库中的值,

                if(username.equals(a)){//判断,如果的值如果和数据库中搞得值一样,则自己抛出错误

                        throw new NullPointerException("用户名已存在");//抛出错误

                }

            }

                System.out.println("注册成功");

}

(7) 自定义异常

    ① 为什么需要自定义异常:

    自定义异常类型,满足自己不同业务的:异常类型,描述的需求

        public class UserAccountExit extends RuntimeException{

        // 设计一个类,自定义错误类型,继承父类RuntimeException

        UserAccountExit(String b){//创建一个构造方法

        super();//信息,被传入到了父类的字段,并且父类已经覆写了toString

        }

你可能感兴趣的:(异常处理)