2009年2月16日 星期一

第134題

Given:
5. classA{
6. void foo() throws Exception{throw new Exception();}
7. }
8. class SubB2 extends A{
9. void foo(){System.out.println("B ");}
10. }
11. class Tester{
12. public static void main(String[] args){
13. A a = new SubB2();
14. a.foo();
15. }
16. }

What is the result?

A. B
B. B, followed by an Exception.
C. Compilation fails due to an error on line 9.
D. Compilation fails due to an error on line 14.
E. An Exception is thrown with no other output.
答案:D
參考:9-3 使用throw自行產生例外事件、9-5 使用throws拋出例外事件、9-6 RuntimeException
與Checked Exception。
----------------------------------------------------------------------------------------
13. A a = new SubB2(); //實體SubB2(),宣告類型A
14. a.foo();//如果在執行階段會call第9 行,
但要先看編譯階段因為編譯階段早於執行階段
從編譯階段看 a為A的類型,所以編譯器會認為第14行會call第6 行
6. void foo() throws Exception{throw new Exception();} //會丟出Exception
所以14. a.foo(); 要用try-catch包起來 或者main要加throws Exception
但都沒有所以D. Compilation fails due to an error on line 14.

沒有留言:

張貼留言