zoukankan      html  css  js  c++  java
  • 异常处理

              异常处理

    传统处理异常的方式缺点::       

          [1] 通过判断影响执行效率。

          [2] 判断逻辑和业务逻辑交织在一起,可维护性很差。

    Java异常处理机制:

          关键字   :try     /   catch

                 try     /   catch     /    inally

          try/catch   :把有可能产生异常的代码放到try代码块中,catch代码块负责捕获并处理异常。   

          假设:  [1]正常执行,没出现任何异常

             [2]出现异常,异常处理,打印异常,跳过异常继续运行

             [3]异常类型不匹配,跳过异常继续运行

               注意  :一个try可以多重catch

           try {
           
                
            }catch (ArithmeticException e) {
                
            }catch(InputMismatchException e) {
                
            }catch (Exception e) {
                
            }

          try/catch/finally

                  用途:把有可能产生异常的代码放到try中,catch负责匹配并处理异常,不管是否发生异常,finally总是执行进行收尾类工作。(关闭数据库、关闭文件、释放内存等资源)

          特殊情况(B)

                      [1] finally不执行的情况。System.exit(0) 正常推出jvm,finally不会执行。

                      [2]catch可以省略,变成try…finally块。出现异常,finally执行。

           [3]存在return的try/catch/finally执行顺序  ,finally执行顺序总是在return前面。

      public class Test02 {
    
        public static int div(int a, int b) {
    
            try {
                int r = a / b;
                return r;
    
            } catch (Exception e) {
                System.out.println("出现异常");
    
                return 0;
    
            } finally {
                System.out.println("我是finally");
            }
    
        }

    1   异常的分类

          Throwable 类是 Java 语言中所有错误(Error)或异常(Exception)的父类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。

          Error 类表示错误类。仅靠程序本身无法恢复的严重错误。jvm内存耗尽、jvm崩溃等。

          Exception 类表示异常类,可以通过java 异常处理机制处理。

          RuntimeException:运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。

          CheckedException:检查时异常。要求程序必须处理,不处理编译不通过。

          运行时异常   ,仍旧可以进行编译和运行。如果运行时发生异常,会输出异常的堆栈信息并中止程序执行。如下:

            ArithmeticException:数学计算异常。比如除数为0

            InputMismatchException:输入不匹配异常

            ArrayIndexOutofBoundsException:数组下标越界异常。

            NullPointException:空指针异常,对象没有初始化就使用时,jvm会抛出该异常

            IllegalArgumentException:非法参数异常。

            ClassCastException:强制类型转换异常。

            NumberFormatException:数字格式化异常。比如把“abc”格式化成数字。

              检查时异常,否则出现编译错误,无法通过编译。处理方式包括两种:通过try-catch捕获异常,通过throws声明抛出异常从而交给上一级调用方法处理

            ClassNotFoundException:类没有被发现异常。

            SQLException:数据库相关异常
            IOException:IO操作异常
            ParseException:解析错误异常
            FileNotFoundException:文件未发现异常。

    2   声明异常

            关键字    throws    

           作用:【1】一个方法可能存在异常,而此时自身又无法更好的处理,可以交给外界处理。此时用throws声明并抛出一种或多种异常。 

    public    static void show() throws Exception ,Error{
                    int a =0;
        }

             【2】 如果调用处也不知道如何处理异常,可选择继续声明异常,我们把这个过程称为异常上抛

         

        

    3  手动抛出异常

           关键字    throw     

           定义:除了系统自动抛出异常外,有些问题需要开发者手动抛出异常。使用关键字throw。

            一般结合throws 使用

    public void setGender(String gender) throws Exception{
            if(gender.equals("男") || gender.equals("女")) {            
                this.gender = gender;
            }else {
                throw new Exception("性别不合法!");
            }
        }

        

    自定义异常

          在系统不存异常,可以自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承        

          注意:【1】RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。

             【2】异常的命名方式,参考系统命名方式,以Exception结尾。

    异常提示

          【1】一般而言,异常堆栈信息很多,开发者只需要看懂

          【2】第一行:异常简单信息(异常类型,异常的描述等)

          【3】最后一行:异常出现的位置(类->方法->方法具体的行)

          【4】在控制台中异常堆栈信息输出位置不固定


       
    public class AgeException extends Exception{
    
        public AgeException() {
            super();
        }
    
        public AgeException(String message) {
            super(message);
        }
        
    }

          

        

  • 相关阅读:
    首篇
    typedef 的几种用法
    ftp 命令
    (zt)STL中的map与hash_map
    (zt)关于UDP网络游戏服务器的一些探讨
    (zt)UDP编程的时候,一次发送多少bytes好?
    (zt)界面技术概述
    (zt)这是对目前大部分平台都适用的内存对齐规则的定义
    (zt)高性能I/O设计模式Reactor和Proactor
    (zt)ACE高效PROACTOR编程框架一ClientHandle
  • 原文地址:https://www.cnblogs.com/dedema/p/10780509.html
Copyright © 2011-2022 走看看