zoukankan      html  css  js  c++  java
  • 关于异常的总结

    什么是异常:

      异常就是程序出现的不正常的情况。

    异常的体系:

      java.lang.Object

        java.lang.Throwable

          java.lang.Error  严重问题,我们不处理

          java.lang.Exception  异常,我们处理

            RuntimeExcept   运行期异常,我们需要修正代码

           非RuntimeExcept   编译期异常,必须处理的,否则程序通不过

    异常的处理

      第一种:消极处理,让JVM默认处理,它的处理方式是把异常的名称,原因,位置等信息输出在控制台,但是程序不能执行了。

      第二种,积极处理,自己处理

            a.try ……catch……finally         

              try{
                //可能发生异常的代码
              }catch(异常类 对象){
                //处理异常:发生异常以后要执行的代码
              }finally{
                //有没有异常都会执行,常用于使用清理资源语句
              }

            b.throws

              把自己处理不了的,在方法上声明,告诉调用者这里有问题

          理解:throws e1,e2,e3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常e1,e2,e3可能是该方法体产生的。

          throw则是明确了这个地方要抛出这个异常。

      void doA(int a) throws IOException,{
               try{
                     ......

               }catch(Exception1 e){
                  throw e;
               }catch(Exception2 e){
                  System.out.println("出错了!");
               }
               if(a!=b)
                  throw new  Exception3("自定义异常");
    }

      代码块中可能会产生3个异常,(Exception1,Exception2,Exception3)。
      如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。
      如果产生Exception2异常,则该方法自己处理了(即System.out.println("出错了!");)。所以该方法就不会再向外抛出Exception2

    异常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用写了。
    而Exception3异常是该方法的某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

    throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
    throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

    throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
    throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

      面试题:

     1.编译期异常和运行期异常的区别?

        编译期异常,必须要处理的,否则编译不通过

        运行期异常,可以不处理,也可以处理

     2.throw和thows的区别

        throw:

          在方法体中,后面跟的是异常对象名,并且只能是一个

          throw抛出的是一个异常对象,说明这里肯定有一个异常产生了

        throws:

          在方法声明上,后面跟的是异常的类名,可以是多个

          throws是声明方法有异常,是一种可能性,这个异常并不一定会产生

      3.异常的注意实现(本质是方法重写的概念,子类一定是优于父类的,所以异常要比父类少,小)

        a.父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常

        b.父的方法没有异常抛出,子的重写方法不能有异常抛出

        c.父的方法抛出多个异常,子的重写方法必须比父少或者小

          

  • 相关阅读:
    【Leetcode】【Easy】Remove Duplicates from Sorted List
    【Leetcode】【Easy】Pascal's Triangle II
    【Leetcode】【Easy】Pascal's Triangle
    【Leetcode】【Easy】Binary Tree Level Order Traversal II
    【Leetcode】【Easy】Binary Tree Level Order Traversal
    【Leetcode】【Easy】Maximum Depth of Binary Tree
    【Leetcode】【Easy】Minimum Depth of Binary Tree
    【Leetcode】【Easy】Balanced Binary Tree
    【Leetcode】【Easy】Symmetric Tree
    如何使用Action.Invoke()触发一个Storyboard
  • 原文地址:https://www.cnblogs.com/19322li/p/10661652.html
Copyright © 2011-2022 走看看