会一直输出try和finally,好像每个try都对应一个必须执行的finally(楼上有人解释了catch不到),然后我模拟了只执行1000次try,结果也执行1000次finally。
如果把if中return去掉,楼上也有人测试过了,在大约3000次的时候,开始执行finally,而fianlly中又有foo方法,继续try finally循环,当然try也继续,如下图:
- public class Demo03 {
- static int i = 0;
- static int j = 0;
- public static void foo(){
- i++;
- if(i>1000){
- System.out.println("----------------- "+i);
- //return;
- }
- try{
- System.out.println("try "+ i);
- foo();
- }catch(Throwable e){
- System.out.println("catch " + i);
- }finally{
- j++;
- System.out.println("finally "+j);
- foo();
- }
- }
- public static void main(String[] args) {
- foo();
- }
- }
复制代码 |
|