4 回答

TA贡献2003条经验 获得超2个赞
你可以把
for(int i = 0; i<20000;i++) {
try {
b = StrictMath.pow(b+i, 1.0/3);
s = s + b+";";
}catch(Exception e){
e.printStackTrace();
}finally {
}
}
修改为:
try {
for(int i = 0; i<20000;i++) {
b = StrictMath.pow(b+i, 1.0/3);
s = s + b+";";
}
}catch(Exception e){
e.printStackTrace();
}finally {
}
这样会好很多(依据你的循环次数而定).但是仍然比没有 try catch 的代码执行要慢.加了 try catch 后,除了会增加代码体积,还会消耗额外的资源.
因为发生了异常后,程序的执行路线需要从 try 保护体中跳转到 catch 过滤表达式中,那么编译器在编译期间必须产生必要的代码和数据结构与系统的异常分发函数密切配合,大体来讲就是分析异常处理代码的结构,封装和标记每部分,注册异常处理器函数.
从这个过程来看,在没有异常产生时,代码体积增大了,执行的语句增多了,自然程序执行效率就低;发生异常后,需要分发异常到指定的异常处理函数,析构局部变量,没有匹配的异常处理函数时,还要展开当前调用栈,向上寻找匹配的异常处理函数.

TA贡献2012条经验 获得超12个赞
你多运行几次试试,结果肯定不一样,运行时间还跟你程序分配到的cpu时间有关,如果在运行第一个的时候电脑还在运行其他程序时间自然会比较慢。
我个人认为常说的try...catch耗资源是因为产生异常后,对系统的资源消耗比较大,不产生异常影响是不大的。
添加回答
举报