自测一下你的Java掌握得怎么样?

自测一下你的Java掌握得怎么样?

 

====================================================================

注:

 

以下是我为北京理工大学计算机学院2008级学生设计的Java试题,感兴趣的朋友不妨自我测试一下,看看你能得多少分。

 

目前我正在批改学生的试卷,此工作完成后,过几天我会发布试题点评以及对考试结果的分析,其中会有一些比较值得关注的东西。

 

                                                                                                                    金旭亮

 

建议朋友先自己做,然后,点击以下链接看:

 

本套试题参考答案及点评

 

另外,CSDN的博客存在着不少BUG,如果使用FireFox浏览此网页,可能看不到网页上的试题,换用IE就好了。

 

====================================================================

 

北京理工大学计算机科学技术学院 20102011 学年第一学期

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

 

       请解释一下为什么上述代码中 “System.out …” 两句代码输出完全不同的结果

 

编程题(共 50 分)

 

说明:

       1 )编程题共分为两组:简单编程题与综合编程题。

       2 )请在试卷后所附的答题纸上书写程序代码,注明题号。

       3 )要求代码书写规范,并添加相应的注释。

 

1 部分:简单编程题(每题 5 分,共 35 分)

 

1.        编写一个程序,用户输入任何一个字符串之后,反转输出其结果。其运行结果如下所示:

       请输入一个字串:我在学习 Java 程序设计

       您输入了:计设序程 avaJ 习学在我

 

 

2.        编写一个方法,它接收一个 int 数组作为参数,外界只需调用一次这个方法,可以马上得到这个数组的最大值、最小值和平均值信息。

 

3.        请编写一个方法,其声明如下:

 

     public static int[] getRandomizeNumbers(int begin, int end, int count)

 

     此方法将生成一个数组 , 包容 count [begin,end) 范围内的随机整数 .

 

4.        数学中,一个复数包容着一个实部( Real )和一个虚部( Imaginary )。请设计一个 Complex 类,它的实例代表一个复数,并且用户可以这样使用它:

 

     // 创建一个实部为 3 ,虚部为 4 的复数

    Complex obj = new Complex(3,4);

    //Complex 对象具备按照数学中复数的习惯表示形式输出的能力。

    System.out.println(obj);  // 输出: 3+4i

 

5.        A B C 是三个类,它们之间有着以下的组合关系( 1 ):


 

1

 

       请编写一个示例程序,这个程序可以完成对 A 对象的深复制( deep copy )。

 

6.        我们可以调用 Integer.parseInt() 方法将一个字串转换为 int 类型,但当要转换的字串不是一个有效的数字时(比如 “a123” ),此方法会抛出一个 NumberFormatException

你需要编写一个程序,当程序运行时让用户从键盘上输入一个字串,代表考试成绩,然后调用 Integer.parseInt() 方法将其转换为 int 类型,并给出是否通过的提示:

       请输入您的考试成绩: 76

       恭喜您通过了考试!

       由于无法控制用户的输入,因此可能出现以下两种出错情况:

(1)     用户输入了一个无法转换为 int 类型的字符串。

(2)     用户输入的数字不在 [0,100] 区间内。

       请设计一个自定义的异常类 InvalidScoreException ,当出现上述出错情景时能抛出此异常对象。要求程序运行时,对用户的错误输入能给以明确的提示。

 

 

7.   设计一个类,实现以下的状态机( 2 ):


 

2

 

       提示:

       2 说明,当使用 new 关键字创建此类对象时,对象居于 Created 状态(这是初始状态),这时,调用对象的 open() 方法,对象转换到 Opened 状态,再调用对象的 close() 方法,对象转入“ Closed ”状态,这是终止状态。

 

       2 部分: 综合编程题( 15 分)

 

       一个图书管理系统的面向对象设计方案如 3 所示:



 

3

 

       Book 代表书,有 “Name (书名) “Author (作者名) “Price (单价) “IsBorrowed (是否被借 出) 四个属性。


       Library 代表图书馆,其内部字段 books 用于保存图书馆中所有的书。它的 FindBook() 方法依据书名查找同名的书(可能有多本)。另一个 Get AllBooks() 方法获取馆藏所有书的详细信息。


       Reader 代表读者, Name 字段代表其姓名,读者可以 “ReturnBook (还书) “BorrowBook (借书)


       请编程完成以下工作:


1.              Java 编程实现上述 3 个类。( 12 分)


2.              main() 方法内书写以下测试代码:( 3 分)

(1)     创建一个 Library 类的实例 myLittleLibrary ,其中预存有以下 3 本书:

              Java 程序设计,张三著, 45

              Java 核心技术,李四著, 50

              Java 程序设计,王五著, 38

(2)     显示图书馆中所有图书的信息,输出样例如下:

              Java 程序设计,张三著, 45 元,可借

              Java 核心技术,李四著, 50 元,可借

              Java 程序设计,王五著, 38 元,未还

(3)     创建一个 Reader 类的实例 oneBeautifulGirl ,她先在 myLittleLibrary 中查找《 Java 程序设计》

(4)     oneBeautifulGirl 借了张三著的那一本书。现在显示图书馆中所有图书的信息 .

(5)     oneBeautifulGirl 把书还了,再次显示图书馆中图书信息。

 

注意:

       在满足题目要求实现功能的前提下,你可以依据自己的考虑修改系统设计方案(比如给某个类添加或修改类的方法,甚至是添加新的类)。

 

 

你可能感兴趣的:(计算机教育,编程技术)