你可以把
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 过滤表达式中,那么编译器在编译期间必须产生必要的代码和数据结构与系统的异常分发函数密切配合,大体来讲就是分析异常处理代码的结构,封装和标记每部分,注册异常处理器函数.
从这个过程来看,在没有异常产生时,代码体积增大了,执行的语句增多了,自然程序执行效率就低;发生异常后,需要分发异常到指定的异常处理函数,析构局部变量,没有匹配的异常处理函数时,还要展开当前调用栈,向上寻找匹配的异常处理函数.