zoukankan      html  css  js  c++  java
  • 异常处理的设计和重构学习二

    【一】

    Exception异常--->意思是例外。
    一:异常处理机制代码和程序源代码放一块坏处1)-->逻辑代码和错误处理代码放在一起,降低程序的可读性
                                                                         2)--->程序员在编写程序时考虑的例外情况多,对程序员本身要求高
    二:异常机制-->当程序出现错误,程序如何安全退出的机制。
                                    java的异常机制就是JDK中以Throwable类为父类所有可能出现的意外情况
    三:java中采用面向对象的方式来处理异常---过程--->1)抛出异常:执行代码,发生异常,产生代表该异常的对象,并停止当前代码,并把异常交予jre处理(jvm)
                                                                             ------->2)捕获异常:jre得到异常后,寻找相应代码处理。
    四:异常分类
           
                          --->Error(UnCheckedException)java运行系统内部错误或资源耗尽。例如Jvm崩溃,断电。程序员不能处理
    Throwable《                        
                         --->Exception--->1)RuntimeException(UnCheckedException)编译时不报错,运行时报错。例:除数为0
                                                                                           
                                                 
                                                --->2)非RuntimeException(CheckedException)编译时报错,★[需要运用异常机制处理异常]
    运行时异常(Run异常处理机制代码和程序源代码放一块坏处1)-->逻辑代码和错误处理代码放在一起,降低程序的可读性timeException)[UnCheckedException]--->程序员自己逻辑出现错误,可以通过修改代码处理异常。强制停止程序运行,便于程序员修改,增强程序【安全性】
    非运行时异常,编译异常[CheckedException]--->需要通过异常机制去处理的异常,增强代码的【健壮性】
    处理异常和有用代码放在一起的坏处
    1逻辑混乱
    2对程序员自身要求高
    java处理异常的方法
    1:抛出异常。
    2:捕获异常。

    【二】

    第一种办法:抛出异常,捕获异常(try catch)
    【格式】
    try{
         //可能产生异常的源代码
        }catch(Exception e){
                           //处理异常方法
                           }finally{
                                           //释放资源                
                                   }
    语法特点1)一个try语句必须至少带有一个catch{}或finally{}块
                2)catch(对象)如果存在多个catch,那么对象从上往下的对象 ---> 【 小(子类)在上,大(父类)在下 】
                3 ) 一个try语句可以产生多个catch,一个catch语句只能捕获一个异常对象
                4)catch块中的常用方法 --->a)  toString()-->显示异常类的类名和产生异常的原因
                                                   ---->b)  GetMessage()-->只显示产生异常的原因,不显示异常类名
                                                   ---->c)  printStackTrace()-->显示异常类类名,产生异常原因,打印栈堆信息(常用)

    【三】

    第二种办法:自动抛出异常--->throws子句
    格式:
    方法名+ throws 异常类 (){
                   //可能出现异常的源代码
    }
    自动抛出异常的特点--->1)当编译时异常( CheckedExcption )出现时,不一定处理它,可以把异常向上抛出,让调用它的方法处理。可以不断向上抛出,在main方法中处理,即程序运行时处理。
                                   --->2)如果一个方法体内抛出多个异常,那么异常类在方法名后用【,】隔开
    方法重写中声明异常的原则(1)-->父类方法没有声明异常,子类重写方法不能声明异常
                                           (2)-->重写方法抛出的异常类,与被重写方法抛出的异常类关系。子类<=父类 (继承父子)
                                             (3)--->子类抛出异常类的数目,不可多余父类抛出异常类的数目 (不是指个数,指的是类型)

    【四】

    手动抛出异常类throw
    步骤:1)找一个合适的异常类
              2)创建该类的对象
              3)将对象手动抛出
              4)throw后的代码不执行。
    例子--->在方法体内抛出异常。throw
    public static int sum( int a, int b) {
                    if(b==0){
                           throw new MyzeioException();
                   } else {
                            int sum=0;
                           sum=a/b;
                            return sum;
                   }
    例子--->
    public static void main(String[] args ) {
                    sdf ();
                   System. err .println( "sxf" ); // 不运行
           }
       
        public static void sdf(){
               System. out .println( "PaymentRequestServiceImpl.sdf()" ); // 运行
                int a =1/0;
               System. err .println( "tt" ); // 不运行
       }
    例子--->
      public static void main(String[] args ) {
                    try {
                            sdf ();
                   } catch (Exception e ) {
                            // TODO Auto-generated catch block
                            e .printStackTrace();
                   }
                   System. out .println( "PaymentRequestServiceImpl.main(sxf)" ); // 运行
           }
       
        public static void sdf() throws Exception{
               System. out .println( "PaymentRequestServiceImpl.sdf()" ); // 运行
                if ( true ){
                        throw new Exception();
               } else {
                       System. out .println( "PaymentRequestServiceImpl.sdf(dddd)" ); // 不运行
               }
                System. out .println( "PaymentRequestServiceImpl.sdf(stttt)" ) ; // 不运行
       }
      

    【五】

    第四种办法:--->自定义异常类
    什么时候自定义异常类--->当jdk中的异常机制里的异常类 不能满足程序员编写代码可能产生的异常时 ,需自建异常类
    * 第四种实现方法   自定义异常
             * 当系统提供 Exception 不能满足 我们自身
             * 个性话的 需要的时候
             * 1 、创建一个异常的子类
             * 2 、创建两个构造器
             * 3 、有参数的构造器可以借助
             *     super( 参数 ) 去调用父类中的
             *     含有参数参数的构造器  
    1、一般情况下 继承Exception或下面的子类(除了RuntimeException)  ---》在编译时候 需要处理  MyCheckException (大多数自定义异常类继承Exception)
    2、继承RuntimeException类  =======》在运行时候处理  RuntimeException (少之又少)
    例子:
    //自定义的异常类
    public class MyzeioException extends Exception {
            public MyzeioException (){}
           
            public MyzeioException(String str){
                    super (str);
           }
    }
    // 测试类
    public class Test{
           public static void main(String args){
                   try{
                           sum(2,0);
                     }catch(MyzeioException e){
                           e.printStackTack();
                   }
    }
    public static int sum( int a, int b) throws MyzeioException {
                    if (b==0){
                            throw new MyzeioException();
                   } else {
                            int sum=0;
                           sum=a/b;
                            return sum;
                   }
    }

  • 相关阅读:
    Mosaic 前端微服务框架
    使用skipper 扩展fabio 的路由&&http proxy 功能
    Introducing Makisu: Uber’s Fast, Reliable Docker Image Builder for Apache Mesos and Kubernetes
    lua-resty-shell 多任务执行
    openresty 使用lua-resty-shell 执行shell 脚本
    ncm 让跨项目配置一致性简单的工具
    lapis 项目添加prometheus 监控集成grafana
    使用prometheus+ grafana+nginx-module-vts 模块监控openresty
    两天快速开发一个自己的微信小程序
    笔记本如何查看mac地址
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4855833.html
Copyright © 2011-2022 走看看