JAVASE之异常递归简单实现

本文介绍Java中的异常处理机制,包括编译时异常与运行时异常的区别及处理方式,并探讨了递归算法的基本原则及应用案例。

异常:

Java代码在运行时期发生的问题就是异常.

Exception类及其子类是Throwable的一种形式.是用来表示java程序中可能产生的异常,并要求对产生的异常进行合理的异常处理.

Exception的父类是Throwable.Throwablejava语言中所有错误或者异常的超类..

此外,Exception的子类runtimeException,RuntimeException及其子类只能在java程序运行过程中出现.即运行时异常.

Throwable的另一个子类是Error,是和Exception平级的.是用来表示java程序中可能会产生的严重错误的.解决办法只有一个,修改代码避免Error错误的发生.

Error是用于指示合理的应用程序不应该试图捕获的严重问题.

运行时异常runtimeException,可以有两种处理方式,try,,,catch捕获到异常,另一种是throws 抛出异常.

 

 

JVM默认异常的处理方式:

如果出现异常我们没有处理,jvm会帮我们进行处理,会把异常的类型,原因还有位置显示在命令行并且终止程序,异常后面的代码将不再执行.

 

 

Try..catch...finally...捕获异常:

捕获:java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理捕获异常格式.

 

Try{

//需要被检测的语句

}catch(异常类 变量){

//异常的处理语句.

}finally{

//一定会被执行的语句.

}

Try:语句后的代码编写可能产生异常的代码.

Catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理.

 

Throws使用:

权限修饰符  返回值类型  方法名(形参列表) throws 异常类型1,异常类型2....{}

 

多异常处理方式:

对代码进行异常检测,并对检测的异常传递给catch处理,对每种异常信息进行不同的捕获处理.

Void show(){
Throw new Exception ();//产生异常,直接捕获处理
}catch(xxxException x){
//处理方式
}catch(yyyException e){
//处理方式
}catch(zzzException z){
//处理方式
}


注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类的关系,平级之间没有先后顺序.那么子类异常要求在上面的catch处理,父类异常在下面的catch处理.

 

 

Throwable常用方法:

String getMessage();返回此throwable的详细消息字符串

String toString()返回此throwable的简短描述;

Void printStackTrace();打印异常的堆栈的跟踪信息

Finally:一定是和try..catch组合一起使用的,用于释放资源等收尾工作,无论try..catch语句如何执行,finally的代码一定会执行.

Try{
有可能出现问题的代码.
}catch(异常对象){
处理异常
}finally{
释放资源;
清理垃圾.
}


编译时异常  &  运行时异常

A: 编译时期异常:Exception的子类,RuntimeException的子类,在编译时期必须处理

B:RuntimeException和他的所有子类异常,都属于运行时期异常.NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常.

运行时异常的特点:

方法抛出运行时期异常,方法定义中无需throws生命,调用者也无需处理此异常运行时期异常.一旦发生,需要程序人员修改源代码.

 

自定义异常:

Throws:处理异常的一种方式,把异常抛出,由调用者来处理.

Throw制造异常的方式,并且结束方法

注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws)

自定义异常类: 写一个类继承Exception或者RuntimeException,然后实现多个构造即可.

 

算法之递归:

递归的原则:

递归一定要有出口,内存溢出.

递归次数不宜过多,内存溢出.

 

案例之求一个数阶乘的方法:

Public static int jC(int n){
//必须要有出口
If(n==1){
Return 1;
}
Return n * jc(n-1);
}
 


算法之斐波那契

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,

 *      小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,

 *       问第二十个月的兔子对数为多少?

 


 

public static int method(int n) {
//如果是第一个月,只有一对兔子
if(n == 1) {
return 1;
}
//如果是第二个月,也只有一对兔子
else if(n == 2) {
return 1;
}
else {
//如果不是第一个月和第二个月,则兔子的数量是前两个月之和
return method(n - 1) + method(n - 2);
}
}


 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值