java 递归 表现出来_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 classDemo03 {public static voidmain(String[] args) {for(int i=1;i<=20;i++) {

System.out.print(test(i)+"...");

}

}public static int test(inti) {//1,1,2,3,5,8,13,21

if(i==1||i==2) {return 1;

}else{return test(i-1)+test(i-2);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值