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 异常和递归的主要内容,如果未能解决你的问题,请参考以下文章