聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> (含参考答案)浙江大学城市学院试卷(Java高级程序设计2010-1011-1)

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

时间:2017-02-24 22:48:13    下载该word文档

诚信应考 考出水平 考出风格

浙江大学城市学院

2010 2011学年第一学期期末考试试卷

Java高级程序设计》

开课单位: 计算分院 ;考试形式:开卷;考试时间: 2011 116

所需时间: 120 分钟

题序

得分

评卷人

得分

一.__简答题_(本大题共_7__题,每题__5__分,共__35_)

注意:回答问题尽量简明扼要。

多线程可以使用Runnable接口。是否可以认为,通过Runnable接口实现多线程的方式与Thread类没有任何关系?如果你认为有关系,那么Runnable实现类与Thread类是什么关系?请举例说明。

有关系;

Thread类实现了Runnable接口,因此可以扩展了Thread即实现了Runnable接口。

采用“Runnable实现类”方式需要构造一个新的Thread对象,并把Runnable实现类的实例作为参数传入Thread的构造器中——Thread(task: Runnable)

举例:

public class TestRunnable {

public static void main(String[] args) {

Thread thread = new Thread(new AnTask());

thread.start();

}

}

class AnTask implements Runnable {

@Override

public void run() {

//do something

}

}

采用“扩展Thread类”方式无只需创建扩展Thread类的实例(无参构造)即可,但是不推荐使用这种方法,因为它将任务和运行任务的机制混在了一起。将任务从线程中分离出来是比较好的设计。

举例:

public class TestThread {

public static void main(String[] args) {

Thread thread = new AnThread();

thread.start();

}

}

class AnThread extends Thread {

@Override

public void run() {

//do something

}

}



2.通过Jdbc可以访问数据库。很多情况下,既可以使用JDBC-ODBC驱动、也可以使用纯java驱动。请问两种驱动方式都有何特点和优缺点?

JDBC-ODBC桥接方式:就是搭建JDBCODBC之间的桥梁,(ODBC是微软的驱程,JDBC是甲骨文的驱程)你要在控制面板上指定数据源,通过数据源来建立连接。这样程序的可移植性并不高,需要有ODBC数据源,几乎只能在Windows平台下运行,跨平台性较差。而且当你换一台主机运行,必须先要去配置数据源,否则程序是无法运行的。

Java方式,即JDBC连接方式,就是通过java代码直接与数据库建立连接关系,所以执行效率很高,而且可移植性较好,Java本身跨平台性较好,所以不存在平台的障碍,也无需配置数据源。

早期的JDBC由于各大数据库厂商没有提供较完善的JDBC驱动器,所以JDBC-ODBC成为一个主要的连接方式,但是现在不存在这种问题,只有Access数据库必须采用JDBC-ODBC方式桥接。

请说明BorderLayout布局的特点。如果希望在BorderLayout布局的容器中放入多于5个的控件,那么需要如何处理?

嵌套JPanel

当应用程序需要配置文件时,既可以采用Properties属性文件、也可以采用XML文件。请简要分析它们各自的特点。

Properties属性文件

缺点:

1、无法直接使用中文编码

2、无法表现树形结构、数组结构等复杂数据结构

优点:

1、书写简单方便

2、程序读取简单

XML文件

优点:

1.可拓展性 xml中标记可以由程序员自己定义。

2.xml与内容与形式的分离

1)显示方式内嵌于数据当中

2)数据库搜索可以简单高效率的运行

3XML是自我描述语言

3.遵守严格的语法要求

缺点:

1.在数据中寻找信息非常困难(树状存储虽然搜索效率高但是插入和修改比较困难)

2.数据自身逻辑不得不让位于HTML语言

3.大数据量低效率

4.XML文档做为数据提供者使用,没有数据库系统那样完善的管理功能

5通信难,由于XML是元置标语言,任何人、公司和组织都可以利用它定义新的标准,这些标准间的通信就成了巨大的问题



MVC是什么?请简要说明它的特点。

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

请简述Java Swing/AWT的事件处理机制(说明事件源、事件监听器、以及它们的关系)。

Page.322

请举例说明什么情况下需要使用多线程。

1、使用线程可以把占据时间长的程序中的任务放到后台去处理

2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

3、增加算法效率

4、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。



得分

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

1. Java集合框架中有ListSetMap等接口,请分析回答以下问题:

1)请分别说明上述三个接口的实现类的特点。

2)请分析比较一下如何选用上述三个接口的实现类,即什么情况下选用List实现类,什么情况下应该使用Set实现类,什么情况下使用Map实现类。

3)使用接口变量操作集合对象有何优点和缺点?比如,以下两行代码都各自有何优缺点?

List a = new List();//List接口类型变量a来访问List对象

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

1

List特点:元素有放入顺序,元素可重复 

Map特点:元素按键值对存储,无放入顺序 

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

2

List实现类:元素可重复且有序的情况下;

Set实现类:元素不可重复且无需的情况下;

Map实现类:需要存储键值对的情况下。

3

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

方式2:直接把List这个实现类耦合进代码,不利于代码的维护。 优点就是可以调用List扩展的方法。

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



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

1)什么是OR映射?OR映射有何用途?

2)请简要说明OR映射的基本原理。

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

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

(2)创建与数据库表对应的实体类(EntityObject),设置相应的域于数据库表的属性做映射,然后设置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)

1TCP是基于连接的,UDP是基于无连接

2、对系统资源的要求(TCP较多,UDP少)

3UDP程序结构较简单

4、流模式与数据报模式

5TCP保证数据正确性,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("do something");

}

@Override

public void run(){

System.out.println("TaskThread begin");

while(!isExit){

this.excuteTask();

}

System.out.println("TaskThread stop");

}

public void stopTask(){

this.isExit = true;

}

public static void main(String[] args) {

TaskThread taskThread = new TaskThread();

taskThread.start();

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

taskThread.stopTask();

}

}



实现电话拨号器程序,界面如下:

设计要求如下:

设计一个MyTelephone类,该类从JFrame继承。

窗体的尺寸大小是:宽500,高300

在主窗体的中央区域放入一个JPanel容器,该容器使用GridLayout布局,共有12JButton按钮,各按钮排放位置如上图所示。

在主窗体的南方区域放入1JLabel对象。

当点击按钮时,可以将点击的按钮所对应的数字填入JLabel中。比如,图中的“1338899999”就是依次点击“1”、“3”、“3”、“8”、“8”、“9”、“9”、“9”、“9”、“9”等按钮后显示的电话号码。

import java.awt.BorderLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class MyTelephone extends JFrame implements ActionListener {

private JLabel numLabel = new JLabel();

public MyTelephone(){

this.setSize(500, 300);

JPanel numPanel = new JPanel();

numPanel.setLayout(new GridLayout(4, 3));

JButton temp = null;

for(int i = 1; i <= 9; i++){

temp = new JButton("" + i);

temp.addActionListener(this);

numPanel.add(temp);

}

temp = new JButton("*");

temp.addActionListener(this);

numPanel.add(temp);

temp = new JButton("0");

temp.addActionListener(this);

numPanel.add(temp);

temp = new JButton("#");

temp.addActionListener(this);

numPanel.add(temp);

this.add(numPanel, BorderLayout.CENTER);

this.add(numLabel, BorderLayout.SOUTH);

}

@Override

public void actionPerformed(ActionEvent e) {

numLabel.setText(numLabel.getText() + ((JButton)e.getSource()).getText());

}

public static void main(String[] args) {

new MyTelephone().setVisible(true);

}

}

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服