SCJP 1.6版考題 138

出自 陳富國維基館
前往: 導覽搜尋
Which two code fragments are most likely to cause a StackOverflowError? (Choose two.)
 A. int[] x = {1, 2, 3, 4, 5};
    for(int y=0; y<6; y++)
        System.out.println(x[y]);
 B. static int[] x = {7, 6, 54};
    static{x[1] = 8; x[4] = 3;}
 C. for(int y=10; y<10; y++)
         doStuff(y);
 D. void doOne(int x){doTwo(x);}
    void doTwo(int y){doThree(y);}
    void doThree(int z){doTwo(z);}
 E. for(int x=0; x<1000000000; x++)
         doStuff(x);
 F. void counter(int i){counter(++i);}

解答


Ans: D F

解說:

此題問那個敘述最可能發生StackOverflowError 堆疊溢位錯誤
D 是doTwo和doThree二個方法間無條件地呼叫彼此(間接遞迴),沒有停止條件,一個方法若無盡地被呼叫,
  會持續在呼叫堆疊中配置出所需要方法變數空間,一直到堆疊空間滿了(堆疊溢出)
F 也是同樣的意思 無條件式的直接遞迴,沒有停止…