zoukankan      html  css  js  c++  java
  • 异常的捕获及处理

     

    知识点:

    1.异常的产生以及对于程序的影响;

    2.异常处理的格式;

    3.异常的处理流程;

    4.Throw,throws关键字的使用;

    5.异常处理的使用标准;

    6.自定义异常.

    异常的描述:

    异常是导致程序终端的一种指令刘,如果异常没有进行合理处理的话,会导致程序终端执 行

    一旦出现异常,产生异常以后的语句不再执行

    异常处理可以使程序即使出现了异常,也可以让程序正常的执行完毕

    处理异常格式:

    Java提供了三个关键字 try catch finally

    try{

    //有异常的代码

    }catch(异常类型 对象){

    //异常处理

    }catch(异常类型 对象){

    //异常处理

    }catch(异常类型 对象){

    //异常处理

    }finally{

    //不管是否出现异常,都执行的统一代码

    }

    对于以上的操作组合:try...catch,try...catch...finally,try...finally(不建议使用)

    使用异常处理,即使程序中出现了异常,也可以正常执行

    出现异常的目的是解决异常,所以为了能够进行异常的处理,可以使用异常类中提供的printStackTrace()方法进行异常信息的输出.

     

    异常处理范例:

    public class Test{

    public static void main(String[] args) {

    System.out.println("算术运算开始");

    try{

    System.out.println(10/0);

    }catch(Exception e){

    e.printStackTrace();

    }finally{

    System.out.println("不管是否有异常我都会执行");

    }

    System.out.println("算术运算结束");

    }

    }

    异常处理流程(核心,带面试题)

    java.lang.ArithmeticException为例查看继承架构:

    java.lang.Object

      java.lang.Throwable

          java.lang.Exception

              java.lang.RuntimeException

                  java.lang.ArithmeticException

    所有的异常类都Throwable的子类,Throwable下有两个子类

    面试题:请解释ErrorException的区别?

    Error:指的是JVM错误,即:此时的程序没有执行,用户不能执行

    Exception:指的程序运行中产生的异常,用户可以处理

    也就是说所谓的异常处理指的是所有的Exception以及它的子类异常

    面试题:请解释java中的异常处理流程

     

    1.当程序在运行过程中出现了异常后,那么会由jvm自动根据异常的类型实例化一个与之匹配的异常类对象;

    2.产生了异常对象之后,会判断当前的语句上是否存在有异常处理,如果没有异常处理,那么就交给JVM进行默认的异常处理,处理的方式:输出异常信息.而后结束程序的执行;

    3.如果此时存在有异常的捕获操作,那么会由try语句来捕获产生的异常类实例化对象,而后与try以后的每一个catch语句进行比较,如果有符合的catch捕获类型,则使用当前的catch语句来进行异常的处理,如果不符合就继续向下匹配后面的catch;

    4.不管最后异常处理是否能够匹配,那么都要向后执行,如果此时程序中存在有finally语句,如果有,就先执行finally语句,但是执行完毕后需要根据之前的catch匹配结果来决定如何执行,如果之前有匹配到catch语句,那么就继续执行finally之后的代码,如果之前没有匹配到相应的catch语句.那么就将此异常交给jvm处理,输出异常信息,结束程序执行

    整个过程就好比方法重载一样,catch就好比方法名,根据catch后的参数进行类型匹配,但是所有java对象都存在有自动的向上转型的操作支持,如果说真的要匹配类型,简单的做法就是匹配Exception就够了

    两点说明:

    1.在编写多个catch捕获异常的时候,捕获范围大的异常一定要放在捕获异常范围小的后,否则程序编译报错

    2.虽然直接捕获Exception比较方便,但是这样也不好,因为所有的异常都会按照同样一种方式进行处理;一些要求严格的项目里面,异常一定要分开处理.

     

    throws关键字

    throws关键字主要用于方法声明上,指的是当方法之中出现异常后交由被调用处处理

    也就说调用了具有throws声明的方法之后,不管操作是否出现异常,都必须使用try...catch来进行异常处理

    在主方法上如果继续抛出异常,那么这个异常就交给JVM进行处理,也就是采用默认的处理方式,输出异常信息,而后结束程序调用

    主方法上不要加上throws,因为程序如果出错了,也希望能够正常执行.

    throw关键字

    在程序中可以使用throw手动抛出异常

    面试题:请解释throw和throws的区别

    throw:指的是在方法之中人为抛出一个异常类对象(这个异常类对象可能是自己实例化,或者抛出已经存在的)

    throws:在方法的声明上使用,表示此方法在调用时必须处理异常,可以声明多个

     

    RuntimeException类 运行时异常

    这种异常类的最大特征在于:程序在编译的时候不会强制性的要求用户处理异常,用户可以根据自己的需要选择性的处理异常,如果用户没有处理,产生异常了,将交给JVA处理,也就是说RuntimeException的子异常类.用户可以根据情况处理

    面试题:请解释Exceprion与RuntimeException的区别?请列举出几个你常见的RuntimeException

    1.Exception是RuntimeException的父类;

    2.使用过Exception定义的异常必须要被处理,而RuntimeException的异常可以选择性处理;

    常见的RuntimeException:ArithmeticException,NullPointerException, ClassCastException

     

     

    自定义异常

    自定义异常类可以继承Exception(强制处理异常)或者RuntimeException(选择性处理异常

    class AddException extends Exception{

    public AddException(String msg){

    super(msg);

    }

    })

     

     

  • 相关阅读:
    医院产品演变畅想
    2014-1-19
    更新一下blog
    tostring的自动调用
    解决evernote更新报错问题
    健身日记
    跑步计划
    [转载]offsetHeight , clientHeight, scrollHeight 区别
    做一个院友网站杂记
    查好友摇一摇功能的感受
  • 原文地址:https://www.cnblogs.com/zqr99/p/7525886.html
Copyright © 2011-2022 走看看