自測一下你的Java掌握得怎麼樣?
====================================================================
註:
以下是我為北京理工大學計算機學院2008級學生設計的Java試題,感興趣的朋友不妨自我測試一下,看看你能得多少分。
目前我正在批改學生的試卷,此工作完成後,過幾天我會發佈試題點評以及對考試結果的分析,其中會有一些比較值得關註的東西。
金旭亮
====================================================================
北京理工大學計算機科學技術學院 2010 -2011 學年第一學期
Java 技術與應用考試試題 ( A )
班級 學號 姓名 成績 _
說明:
( 1 )本次考試為開卷 考試,允許學生攜帶相關的書籍及其他紙面資料,但不
得使用計算機、智能手機等電子設備。
( 2 )考試時間為 2 小時。
( 3 )簡答題和編程題寫在試卷後所附的答題紙上,標明題號。
( 4 )特設卷面整潔分,凡卷面不整潔導致代碼及文字難於識別者,扣除 5 分 。
( 5 )部分題目沒有標準答案,隻要言之成理,均可給分。
*******************************************************************************
一、判斷題(正確的描述打鉤,錯誤的打叉,每題 1 分,共 10 分)
1. 一個 Java 源文件中隻能定義一個公有類,並且類名必須與文件名一致。( )
2. 通過在程序中引入 “import javax.swing.*;” 語句,就可以使用 javax.swing 包中的所有類(包括其嵌套的子包中的類)。 ( )
3. J2SE 的功能是 J2ME 的一個子集。( )
4. Java 字節碼隻有被裝入到內存中之後,才能被執行。( )
5. Swing 是一套 GUI 組件,采用瞭新的思路設計 Java 應用程序的界面,它完全地替換掉瞭原有的 AWT 。( )
6. 在編程時編寫過多的註釋,會使編譯之後生成的程序文件變大。( )
7. Java Applet 可運行於瀏覽器中,這意味著瀏覽器本身就可以直接執行 Applet 程序。( )
8. JDK 5.0 增加的枚舉類型( enum )是一個原始數據類型。( )
9. Java 規定所有的方法都必須放到某個類中,不存在獨立於類的方法。( )
10. 面向對象軟件系統設計師們經常用到的 UML 是一種編程語言。( )
二、簡答題(請將答案寫到答題紙上,註明題號。每題 4 分,共 40 分)
1. 現代編程語言有很多種分類方法,以下是我們常見的一種劃分方法:
( 1 ) “ 編譯型 ” 編程語言: 比如 C ,程序源碼必須經過編譯才能運行;
( 2 ) “ 解釋型 ” 編程語言: 這種類型的語言(比如早期的 Basic )通常都擁有一個交互環境,用戶輸入一句代碼計算機就執行一句代碼。
Java 屬於上述哪種類型?如果你認為 Java 不屬於上述任何一種類型,那麼它是不是屬於另外一種編程語言類型?
2. Java 中有兩個關鍵字: void 和 null ,它們有什麼區別?
3. 簡述 “ 類( class ) ” 、 “ 類庫 (class library)” 、 “ 包( package ) ” 、 “jar 文件 ” 這四個概念間的聯系。
4. 面向對象的程序在運行時會創建多個對象,這些對象之間通常可以相互 “ 發送消息 ” ,談談你對 “ 對象之間發送消息 ” 這句話的理解,並編寫幾句 Java 示例代碼展示對象之間發送消息的具體編程實現方法。
5. 加法運算符 “+” 可以施加於原始數值類型(比如 int )的變量,但我們發現一些對象類型(比如 Integer )的變量,也支持 “+” 運算:
Integer v1 = 100;
Integer v2 = 200;
System.out.println(v1 + v2 ); // 輸出: 300
這看上去好象 Integer 類型重載瞭 “+” 運算符,一些編程語言比如 C++ 可以重載運算符,但 Java 本身並不支持這一特性。依你的理解或猜測, Java 采用什麼方法處理兩個 Integer 對象直接 “ + ” 的語句?
6. 在一個很大的循環(比如循環 100000 次)中,如果需要進行大量字符串的連接操作,通常人們會使用 StringBuffer (或 StringBuilder )而不是 String 類型,請解釋這麼做的理由。
7. 現有兩個長度不同的數組:
int[] arr1 = new int[10];
int[] arr2 = new int[100];
那麼以下語句能通過編譯嗎?
arr1 = arr2;
如果你認為可以通過編譯,得到這個結論的依據是什麼?如果不能通過編譯,你認為其原因是什麼?
8. 請看以下代碼 :
double d1 = 100.1;
double d2 = 1001/10;
System.out.println(d1 == d2); // 輸出 : false
明明 d1 與 d2 是相等的 , 為什麼程序運行時會輸出一個讓人意外的結果 : false ?
9. 當使用多個 catch 語句捕獲多個異常時, Java 規定捕獲 Exception 的 catch 語句必須排在最後,如下所示:
try { …… }
catch(ClassCastException ex){ …… }
catch(NumberFormatException ex){ …… }
catch(Exception ex){ …… } // 此句必須放在最後!
為什麼會有這個限制?談談你的理解。
10. 請看以下示例代碼:
String s1 = “Hello”;
String s2 = “Hello”;
System.out.println(s1 == s2); // 輸出: true
String s3 = new String(“Hello”);
String s4 = new String(“Hello”);
System.out.println(s3 == s4); // 輸出: false
&n