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

    异常的处理
    异常的概念
    异常指的是运行期间出现的错误,程序开始执行,在执行期内出现的问题。出现了异常过后我们要关注异常的类型 、 异常出现的行号。
    在java中,java的异常时java提供的用与处理程序错的一种机制。
    错误值得是在程序运行过程中发生的一系列异常事件,比如下标越界、空指针、除数为0
    异常处理机制:一旦异常发生过后,使用异常处理机制让程序不会直接中断或者影响虚拟机运行
    1
    2
    3
    4
    异常的分类
    1、Error:称为错误(不是异常)、java虚拟机生成并抛出,虚拟机加错误、动态链接失败之类的等等、程序控制不了、用户也无法控制。jvm的运行环境问题
    2、Exceptinon:用户的错误、或者程序无法预见的一些问题。所有异常的f父类、很多个子类,每一个子类都对应到异常情况。一旦出现exception这种异常,需要开发者自己去处理(捕获)
    3、Runtime Exception:运行时异常是程序在运行过长中发生的可以被程序员避免的异常。如果你不处理,抛出异常后提示开发要关注
    常见的异常:
    ClassNotFoundException
    IOException
    SQL Exception
    NoSuchFieldException
    RuntimeException
    ClassCastException
    NullPointerException
    UnknownTypeException
    IndexOutOfBoundsException
    ArithmeticException /算术异常
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    在开发过程中的异常先不去处理


    异常的执行流程
    在方法执行过程中,方法押入到方法栈中,在某一个方法中出现了运行时异常,没有处理这种异常,后边方法的内容无法执行,异常抛给了虚拟机,中断了虚拟机继续运行
    方法栈:方法在调用的过程中,先执行的方法后退出
    运行流程:
    1、main在栈的最底部,method2栈的最顶部,method2抛出一个异常,method2从栈中取出来
    2、将异常抛给method1,method1并没有处理这个异常,将异常抛给main方法。此刻method移除栈
    3、main方法接收到method1抛出来的异常,main也没有处理这个异常,当前这个异常就会抛给虚拟机,虚拟机就会创建一个异常对象。识别异常分类,直接将异常信息打印到控制台,结束程序。
    1
    2
    3
    4
    5
    6
    异常的结构体系
    throwable 所有异常的根基类,也可以抛出
    Error:表示错误,开发过程中程序无法去控制和处理
    Exception:表示异常,开发过程中,可以去进行处理
    RuntimeException
    SQL Exception

    Exception:
    检查异常:编译器要求你必须要处理的异常,不处理程序无法运行。当你代码没有运行的时候,编译器就检查出来的问题。
    非检查异常:编译器不强制要求处理的异常。虽然在运行中有可能出问题,但是不要求你处理(ClassCastException
    NullPointerException)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    异常的基本用法
    捕获异常
    语法1:

    try{
    运行过程中要执行的逻辑代码,这段代码可能会出现问题,捕获异常
    }catch(Exception e){//声明一个父类异常,接受一个异常
    //提示当前系统出现了什么样的异常
    e.printStackTrace();//打印错误信息
    }
    1
    2
    3
    4
    5
    6
    语法2:
    try{

    }catch(Exception e){

    }catch(Exception e){

    }
    1
    2
    3
    4
    5
    语法3 :
    try{

    }catch(Exception e){

    }catch(Exception e){

    }finally {

    }
    1
    2
    3
    4
    5
    6
    7
    1、finally 为异常提供了一个统一的出口,使得当前程序在跳转到另外程序的流程之前,能够对程序进行统一的管理。
    2、无论try模块中的内r容是否执行,finally代码都执行一次
    3、通常我们在fianlly里面要执行的内容是资源的关闭,或者日志的记录

    语法4:
    try{

    }fianaly{

    }
    1
    2
    3
    申明并抛出异常
    在本方法中、如果出现了异常,本方法可以不进行处理,抛给调用者来处理。
    将异常一层一层往外抛,在达到虚拟机之前处理好整个程序运行流程不受影响。

    throw:将异常进行抛出(动作)
    throws:声明将要抛出何种类型的异常(声明)
    在catch 方法块中 throw new 异常类型() ,在本方法后面加上 throws 异常类型,表示向上一层抛出,用了throw之后,如果try里面的代码块有异常 ,后面的代码就不会再执行了

    重写方法的时候,子类和父类异常问题
    1、父类方法没有抛出异常、而子类重写的方法抛出了异常,是不被允许的。编译都通过不了
    2、父类抛出了异常,子类重写方法抛出跟父类同样的异常,没有问题
    3、父类抛出异常,子类重写方法不抛出异常,编译器能编译通过,不推荐这样写。
    4、父类抛出一个Exception,子类可以抛出比Exception小的异常,子类的异常不能比父类的异常大
    5、父类抛出异常小于子类的异常,不行,编译报错
    6、父类抛出一个Exception。子类抛出多个字异常,编译 通过

    自定义异常
    输入的年龄大于100岁,性别选择中性
    好处:
    在团队开发过程中,都是分模块、分功能进行开发的,在项目找那个统一制定自己的异常,对外统一显示内容。
    1、在用户发请求进行数据验证的时候,如果数据验证失败,自己抛出自定义异常
    2、在开发过程中,遇到某些逻辑上面的问题,判断性别出现中性的时候。java没有提供性别中性异常,自定义
    3、系统提供的异常,如果直接给用户,体验不是特别好,包括异常的信息,代码。代码中能抛出去的 异常,用户处理过的异常

    1、不管自定义异常还是系统提供的异常,都必须是Throwable的子类
    2、写一个检查性的异常,需要写一个类继承Exception
    3、写一个运行时异常,需要写一个类继承RuntimeException
    ---------------------

  • 相关阅读:
    Java构造和解析Json数据的两种方法详解一
    微信小程序-自定义组件
    微信小程序
    微信公众号
    微信小程序
    微信小程序
    微信小程序
    vue
    vue
    sass 和 css 互转网址
  • 原文地址:https://www.cnblogs.com/ly570/p/11102425.html
Copyright © 2011-2022 走看看