• 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);
            }
        }
    }
  • 相关阅读:
    Find all Windows Phone Application Bar Icon
    DELL PowerConnect 5548[初步]配置
    删除SD的分区
    Import/Export a database into Oracle
    索爱U100i排线更换笔记
    forrtl: severe (174): SIGSEGV, segmentation fault occurred
    下载功能和上传功能的实现
    自我小结:手动给GridView添加数据源
    删除指定目录内的文件
    GridView数据源中没有数据的时候显示表头
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11219046.html
Copyright © 2020-2023  润新知