(含参考答案)浙江大学城市学院试卷(Java高级程序设计2010-1011-1) 联系客服

发布时间 : 星期三 文章(含参考答案)浙江大学城市学院试卷(Java高级程序设计2010-1011-1)更新完毕开始阅读acc265f5a48da0116c175f0e7cd184254a351b4c

得分

二.__论述题__(本大题共__3__题,每题_15_分,共__45_分。)

1. Java集合框架中有List、Set、Map等接口,请分析回答以下问题: (1)请分别说明上述三个接口的实现类的特点。

(2)请分析比较一下如何选用上述三个接口的实现类,即什么情况下选用List实现类,什么情况下应该使用Set实现类,什么情况下使用Map实现类。 (3)使用接口变量操作集合对象有何优点和缺点?比如,以下两行代码都各自有何优缺点? List a = new ArrayList();//用List接口类型变量a来访问ArrayList对象

ArrayList b = new ArrayList();//用ArrayList类型变量b来访问ArrayList对象 (1)

List特点:元素有放入顺序,元素可重复 Map特点:元素按键值对存储,无放入顺序

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) (2)

List实现类:元素可重复且有序的情况下; Set实现类:元素不可重复且无需的情况下; Map实现类:需要存储键值对的情况下。 (3)

方式1:利用Java继承的机制,隐藏了List实现类的细节,让使用者无需考虑List接口的具体实现方式,有利于代码的维护(一个简单的例子,如需更换List的实现类,只需修改在创建对象的那一句代码),缺点就是无法调用ArrayList扩展的方法,例如方法trimToSize(); 方式2:直接把ArrayList这个实现类耦合进代码,不利于代码的维护。优点就是可以调用ArrayList扩展的方法。

根据具体情况选择相应的方式。

2.关于OR映射,请回答以下问题:

(1)什么是OR映射?OR映射有何用途? (2)请简要说明OR映射的基本原理。

(3)访问数据库既可以通过OR映射方式,也可以直接通过JDBC。请分析比较两种访问方式的优缺点?

(1)OR映射即对象关系映射,O为Object即面向对象程序中的对象,R为Relation即关系数据库。使用OR映射的编程方法使得Java程序员可以使用对象编程思维来操纵数据库,使得程序设计得更加精炼易于理解与修改,把复杂的SQL语句与业务逻辑解耦,使得程序更符合高内聚低耦合的设计思想。

(2)创建与数据库表对应的实体类(Entity或Object),设置相应的域于数据库表的属性做映射,然后设置get/set方法,然后封装操作SQL语句(查删改)到对应的DAO (Data Access Objects数据访问对象)中,由这两种对象构成即为数据持久层,封装了底层数据操作细节,提供相应的接口给业务逻辑层使用,分工明确,体现了高内聚低耦合的思想。

(3) OR映射:采用低耦合高内聚的设计思想,分别封装了数据、数据访问以及业务逻辑,虽然程序设计会变得更为复杂,但是从长期的扩展性、健壮性、可理解性来说,这样的付出是值得的,尤其是在大型项目中显得尤为必要。

JDBC:直接使用JDBC接口操纵数据库,使得程序模式简单,而且效率会比OR映射略高,更易于性能和存储的优化等,但是在复杂的项目中使得数据库操作和业务逻辑耦合在一起,变的难以调试,所以适合小型项目、业务逻辑简单的项目。

3. 关于Java网络编程,请回答以下问题:

(1)在使用TCP协议进行网络编程时,需要使用哪些关键类(包括侦听、数据传送时所涉及的核心类)?并请简要描述这些类的用途。

(2)在使用UDP协议进行网络编程时,需要使用哪些关键类(包括侦听、数据传送时所涉及的核心类)?并请简要描述这些类的用途。

(3)请简要说明上述两种网络通信方式的各自优缺点。 (1)

ServerSocket:此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器之间的通信端点。 (2)

DatagramSocket: 此类表示用来发送和接收数据报包的套接字。 DatagramPacket: 此类表示UDP数据报包。 (3)

1、TCP是基于连接的,UDP是基于无连接 2、对系统资源的要求(TCP较多,UDP少) 3、UDP程序结构较简单 4、流模式与数据报模式

5、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

得分

三.__编程题__(本大题共__2__题,每题__10_分,共___20__分。)

1. 设计一个线程类,该线程类可以执行长时间任务,并且可以被中途终止。要求如下: 该线程类的类名为TaskThread,为Thread的子类。 该线程类中有一个excuteTask方法(为实例方法),该方法用于模拟一种操作(比如压缩文件操作),具体实现代码可以用注释方式说明,无需实现。线程启动执行时,在run方法中可以循环调用上述excuteTask方法。换言之,线程所执行的长时间任务就是对excuteTask方法的循环调用。

该线程类有一个stopTask方法(为实例方法)。stopTask方法被调用后,可以终止线程的执行(即终止循环)。

public class TaskThread extends Thread {

private boolean isExit;//退出标志

public void excuteTask(){ //do something try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(\}

@Override

public void run(){ System.out.println(\ while(!isExit){ this.excuteTask(); } System.out.println(\}

public void stopTask(){ this.isExit = true; }

public static void main(String[] args) { TaskThread taskThread = new TaskThread(); taskThread.start();