JAVASE之异常递归简单实现

来源:互联网 发布:人工智能 学问 编辑:程序博客网 时间:2024/06/05 04:04

异常:

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);}}


 

 

 

 

 

 

 

 

 

 

原创粉丝点击