Java递归异常_在java的递归方法调用执行过程中,如果引发一个异常,那如何良好地记录递归调用引发的异常信息?...

假设有一个功能的执行需要进行递归调用,但是在递归执行过程中,可能会引发异常,如果引发的异常,就得记录以及递归调用了多少次,以及递归出现错误的具体异常信息和引发异常的行。

测试代码如下:

public class NestedTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

NestedTest a=new NestedTest();

a.t(0, 10);

}

public void t(int i,int last) {

i++;

try {

if(i==last) {

throw new RuntimeException("这是异常:"+i);

}

t(i,last);

}catch (Exception e) {

// TODO: handle exception

throw new MyException("异常信息:"+e.getMessage(),e);

}

}

}

public class MyException extends RuntimeException {

public MyException(String mes ,Throwable cause){

super( mes , cause);

}

public MyException(String mes){

super( mes );

}

public MyException(Throwable cause){

super( cause);

}

}

以上这个代码如果直接执行,会打印差不多9个格式一模一样的追加的信息提示

Exception in thread "main" other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.main(NestedTest.java:10)

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 1 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 2 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 3 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 4 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 5 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 6 more

Caused by: other.MyException: 异常信息:异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 7 more

Caused by: other.MyException: 异常信息:异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 8 more

Caused by: other.MyException: 异常信息:这是异常:10

at other.NestedTest.t(NestedTest.java:22)

at other.NestedTest.t(NestedTest.java:19)

... 9 more

Caused by: java.lang.RuntimeException: 这是异常:10

at other.NestedTest.t(NestedTest.java:17)

... 10 more

如果有100个,那看异常信息更加困难了,我希望能把这类异常信息列表的异常数量缩减到最多2个,第一个异常信息是递归中引发异常的代码位置,第二个是记录递归调用了多少次了

如何良好的记录递归调用中引发的信息?其中必须要记录的是递归层次。但是不能为了记录异常,而在递归方法的参数列表里增加多余的参数来作为递归的异常记录,这是不行的,必须在catch内自定义处理,可以自定义继承的RuntimeException子类来完成。

那么如何做?有哪些比较好的代码处理流程?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值