Java 异常和递归

Posted 幸福的小耗子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 异常和递归相关的知识,希望对你有一定的参考价值。

异常

1、java运行过程中出现的不正常情况叫做异常

2、异常就是一个对象,描述了那些不符合生活正常的情况,包含了这些情况的原因,类型及描述和位置

3、异常也是一种处理异常的机制,可以进行跳转,捕获以及程序结束

4、异常继承体系

  Thorwable 异常体系的顶级父类,只有Throwable体系类型,才可以使用异常的处理机制
    |--Error 错误,是Throwable的子类,用于描述那些无法捕获了处理的错误情况,属于非常严重的情况
    |--Exception 异常,是Throwable的子类,用于描述那些可以捕获和处理的情况,属于不太严重的情况
      |--RuntimeException 运行时异常,是Exception的特殊子类,在编译阶段不做检查的一个异常

5、JVM默认处理异常机制

  在代码中出现异常时,会将异常情况封装成一个对象,一层层向上抛,JVM收到后结束自己,将错误打印出来

6、手动处理异常的方式

  1、对异常进行声明

   某个方法有编译时异常,编译就会无法通过,需要异常所在的方法声明上,声明该方法出现的编译时异常。

  2、对异常的处理

   出现异常之后,可以通过某些格式来捕获和处理异常,可以让程序在出现异常之后,继续运行,

  可以定义自己处理异常的逻辑。

7、处理异常的代码格式 

  try{

      可能出现异常的代码
   }catch(异常类型1 异常对象名){
      处理方式
   }catch(异常类型2 异常对象名){
      处理方式
   }catch(异常类型3 异常对象名){
      处理方式
   }finally{

     无论如何都要执行的代码 一般用来关闭资源

   }

   1.执行try中的代码,如果没有异常,try...catch直接结束语句
   2.如果有异常,对下面的catch块进行匹配,如果一旦匹配成功,进行catch块进行处理,
  如果没有相应的类型,执行JVM的默认处理机制。

   注意事项:

   1.如果在各个catch块中,出现了子父类的情况,那么父类的异常要写到子类的后面。

   2.在JDK1.7之后,可以对异常进行逻辑或运算

8、try ...finally...格式无法捕获异常和处理异常,一般用在有两句代码都必须执行,又不知是否有异常的情况使用

9、异常分为编译时异常和运行时异常

  1.无论编译时异常还是运行时异常,都是只有运行阶段才可能发生的异常。
  2.区别:
    1.继承体系的区别:编译时异常就是Exception以及Exception的子类(除RuntimeException),

      运行时异常就是RuntimeException以及RuntimeException的子类。

    2.编译时异常,在编译阶段要对此异常进行检测,一旦有这种编译时异常,在编译阶段是不可能通过,

    只有通过异常处理的两种手段来解决(异常的声明,异常的处理),运行时异常在编译阶段不做检查,

    在编译阶即使有了运行时异常,也不会编译失败,相当于在编译阶段没有异常,可能通异常处理的手段处理,

    也可以使用异常的避免方式,来避免异常的发生。

10、throw 和throws 

  1.throw是对异常对象的抛出,throws是对异常类型的声明。
  2.throw后面跟的是一个对象,但是throws可以声明多个异常类型。
  3.throw是真真正正地产生了对象,并且抛出了,但是throws只是声明了,也有可能没产生对象。

11、Throwable类的常见方法及方法描述?

  Throwable() 构造一个将null作为信息的throwable
  Throwable(String message)构造一个将message作为信息的throwable
  Throwable(Throwable cause)制定一个带指定cause的throwable
  getCause()
  getMessage()
  printStackTrace() 将此 throwable 及其追踪输出至标准错误流。
  toString()

12、自定义异常的步骤?
  1、定义一个类
  2、继承一个异常
  3、构造方法
  4、特有方法

13、异常在继承中的体现:

  子类一定比父类强
  子类方法抛出的异常范围和异常个数都要小于父类的方法,最起码持平

递归

1、方法本身调用方法本身

2、注意事项:

  1、一定要有结束条件,不然会陷入死循环

  2、递归时有两个分支,一个调用自己的分支,一个不调用自己的分支

3、练习 斐波那契数列

//斐波那契数列的前20个数
public class Demo03 {

    public static void main(String[] args) {
        for(int i=1;i<=20;i++) {
            System.out.print(test(i)+"...");
        }
    }
    public static int test(int i) {
        //1,1,2,3,5,8,13,21
        if(i==1||i==2) {
            return 1;
        }else {
            return test(i-1)+test(i-2);
        }
    }
}

 

以上是关于Java 异常和递归的主要内容,如果未能解决你的问题,请参考以下文章

java 反射代码片段

java 求最大子序列和问题递归求解报越界异常

片段中的 EditText 上的空指针异常 [重复]

异常和TCP通讯

Android Java:在 onCreateView() 中返回空视图的片段

Java基础之方法的调用重载以及简单的递归