当前位置:文档之家 > 北邮《Java技术》期末复习题(含答案)

北邮《Java技术》期末复习题(含答案)

<>综合练习题

填空题

1.Java 不仅仅是一种编程环境,它实际上是一个完整

的计算平台,包括完整的程序开发环境和运行环

境。

2.完整的Java体系结构包括四个组件,分别是Java

编程语言、Java类文件格式、Java应用程序编程接

口和Java虚拟机。

3.Java运行时环境是由Java虚拟机和核心类组合形

成的。

4.在Java类文件中存储的二进制代码称为字节码,它

们是JVM的指令。

5.当Java虚拟机是在主机操作系统上由软件实现时,

它实际上是用本地(如C/C++等)语言编写的程序。

6.Java虚拟机主要包括两个模块,一个是类装载器,

另一个是执行引擎。

7.在面向对象系统中,对象是程序的基本组成实体。

8.对象是程序的基本组成实体,类是创建对象的模

板。

9.Java 源程序中的类可以分为两种,分别是系统类和

用户自己定义类。

10.编译程序的时候会自动导入到程序中的系统包是

http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng。

11.把基本数据类型包装成类包装成类的好处是可以

提供基本数据类型的信息,还可以使用类的方法对

数据进行操作。

12.在Java中,int类型的包装类是Integer,char 类型

的包装类是Character。

13.Integer 类的parseInt( ) 方法的功能是把一个字符

串转换为一个整型数据。

14.Java 把数据输出到控制台是使用System.out完成

的。

15.Scanner 类是在java.util包中定义的。

16.创建一个连接到标准输入流对象System.in 的

Scanner 对象的语句是Scanner myScanner = new

Scanner(System.in);。

17.设myS 是一个Scanner 类的实例,则语句“int x =

myS.nextInt();”的作用是读取一个整数,然后把这

个整数赋给变量x。

18.Java 提供的专门用于格式化输出数据的方法是

System.out.printf()。

19.Java 提供的用于处理日期和时间信息的系统类是

java.util.Date。

20.字符串常量是用双引号括起来的字符序列。

21.Java用于处理处理字符串的类有两个,分别是

String类和StringBuffer类。

22.Java的编译器会为每个字符串常量生成一个String

类的实例。

23.取得字符串的长度的方法是调用字符串对象的

length()方法。

24.设有如下类定义

1.class Person {

2.private String name;

3.Person(String n) {

a)name = n;

4.}

5.}

ii.则创建一个Person 类对象的语句是Person p

= new Person("Apple");。

25.在Java中,每当创建一个对象时,系统都会从它管

理的内存中分配一定的空间给这个对象。我们把创建好的对象叫做对象实体,而这个对象实体的“标识”叫做对象的引用。

26.构造方法有两个作用,一个作用是提供要实例化的

类的类名,另一个作用是把新创建的对象初始化。

27.new运算符用于创建对象,new运算符被执行之后

会返回新创建对象的引用。

28.在声明成员变量的时候,用关键字static修饰的变

量是类变量,类变量也称为静态变量。

29.在声明成员变量的时候,没有被关键字static修饰

的变量是实例变量。

30.在声明成员方法的时候,用关键字static修饰的方

法是类方法,类方法也称为静态方法。

31.在声明成员方法的时候,没有被关键字static修饰

的方法是实例方法。

32.调用类方法有两种情况,一种是通过类名调用类方

法,另一种是通过对象名调用类方法。

33.在面向对象的程序中,方法是用于定义对象的某个

特定功能的代码段。

34.方法名和方法的参数类型称为方法的签名。

35.调用方法的语句格式是

reference.method(arguments)。

36.编译源程序时,编译器会为方法添加一个隐式参

数,用来存储运行时刻传来的当前对象的引用。

37.面向对象技术有三个基本特性,分别是封装、继承

和多态。

38.包含在对象属性中的数据值的集合通常称为对象

的状态。

39.对象除了保存数据之外,还提供若干操作数据的方

法,用以描述的对象的行为。

40.在Java 中,对象的本体是用对象的引用表示的。

41.封装有两方面的意思:一个方面是对象封装了功能

的内部实现机制,另一个方面是对象封装了它持有的数据。

42.在Java中,通过在类定义里面定义属性和方法,强

制实现对数据和功能的封装。

43.Java 程序中的所有类都由系统类Object直接继承

或间接继承得到的。

44.Java中的多态是指一个程序中同名的不同方法共存

的情况。

45.Java中的多态为编译时多态和运行时多态两类。

46.对象的类型转换分为upcasting和casting两种。

47.所谓包就是Java语言提供的一种区别类名空间的

机制,是一组相关的类和接口的集合。

48.Java 中声明包的关键字是package,引用包中类或

接口的关键字是import。

49.Java中,打包就是将应用程序所包含的类文件和其

它资源文件放到一个归档文件当中。

50.JDK 提供的打包工具是jar。

51.使用接口实际上要做两件事:第一是声明接口(定

义接口),第二是在类中实现接口。

52.回调是一种常见的程序设计模式,这种程序设计模

式在Java中通常是用接口来实现。

53.所谓异常,就是程序的运行时错误。

54.“异常”产生时,意味着在当前环境下无法获得必

要的信息来解决问题,我们所能做的就是从当前环境中跳出,并且把问题提交给上一级别的环境。

55.我们把生成异常对象并把它交给运行时系统的异

常处理机制的过程称为抛出异常。

56.运行时系统的异常处理机制在方法的调用栈中查

找,从生成异常的方法开始回溯,直到找到包含相应异常处理的方法为止,这个过程称为捕获异常。

57.编译器要求我们编写的程序必须对可检测的异常

进行处理,否则不能通过编译。

58.异常通常由以下两种情况引起,一种是程序执行了

不合法的动作,另一种是通过执行throw语句由程序显式抛出。

59.按照数据的传输方向,流可以分为输入流和输出流

两类。

60.按照数据的格式,流可以分为字节流和字符流两

类。

61.系统类FileInputStream和FileOutputStream用于以

字节方式处理文件的输入和输出,称为文件输入/

输出流。

62.系统类FileReader和FileWriter用于以字符方式处

理文件的输入和输出,称为文件读写器。

63.系统类BufferedReader和BufferedWriter分别称为

缓冲读取器和缓冲写入器。

64.使用缓冲流的好处是可以减少系统和外部设备交

换数据的次数。65.系统类DataInputStream和DataOutputStream称为数

据输入/输出流,它们在输入输出数据的同时能对流

中的数据进行变换处理。

66.提供操作系统目录管理功能的文件类是File。

67.用于文件的随机读写操作的文件类是

RandomAccessFile。

68. C 语言程序员提供创建线程的机制是使用操作系

统提供的库。

69.通俗地讲,线程就是一个代码执行流。

70.Java 程序是从一个众所周知的入口点开始执行的,

即是从main()方法的第一条语句开始执行的。71.当Java 程序启动时,系统就为它创建好一个线程,

用这个线程执行main() 方法中的代码序列。这个

系统创建好的线程叫主线程。

72.JVM 创建的线程称为系统线程,我们自己在程序

中用代码创建的线程称为用户线程。

73.Java API 提供创建线程的系统类是Thread,它的

对象就是一个线程。

74.线程类的获取当前线程对象引用的方法是

currentThread(),获取当前线程名字的方法是

getName()。

75.在Java 中,线程被表示为http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng.Thread类的一

个实例。

76.一个线程要完成一个应用任务,为了完成该应用任

务而编写的代码要放到run()方法中。

77.创建好线程对象之后并不意味着这个线程就会被

处理机(JMV)运行,还需要调用线程对象的start()

方法启动线程。

78.我们称实现了Runnable接口的类为线程化的类,称

实现了该接口的类的实例为可运行的对象。

79.从实现了Runnable 接口的对象创建线程对象的方

法是,建立一个单独的Thread 对象,并把可运行

对象传递给专门的Thread 类的构造方法。

80.线程生命周期共有五个状态,分别是新建状态、就

绪状态、运行状态、阻塞状态和死亡状态。

81.Java 的线程调度策略采用抢占式调度。

82.使用Swing 编写程序的图形界面要引入两个程

序包,其中包含Swing 的基本类的程序包是

java.swing,包含与处理事件相关的接口和类的程序

包是java.awt.event。

83.使用布局管理器要引入java.awt包。

84.事件监听者必须实现与事件类型相对应的事件监

听接口才具有处理那类事件的能力。

85.Java有三种窗口,分别是Applet 窗口、框架窗口

(JFrame)和无边框的窗口(JWindow)。

86.设mw 是一个JFrame 窗口,取得mw 的内容面

板的语句是mw.getContentPane()。

87.要获取事件e 的命令字符串,从而知道是哪一个

组件激发的事件,则应该使用的代码是

e.getActionCommand()。

88.面板有两种,分别是普通面板JPanel 和滚动面板

JScrollPane。

89.布局管理器是实现了LayoutManager接口的类。

90.小应用程序和面板默认的布局管理器是

FlowLayout。

91.JWindow 、JFrame 和JDialog 默认的布局管理

器是BorderLayout。

92.空布局就是把一个容器的布局管理器设置为null布

局。

93.当把一个容器的布局管理器设置为null 布局的时

候,可以使用setBounds()方法手工设置组件本身的

大小和组件在容器中的位置。

94.菜单分为下拉式菜单和弹出式菜单两种。

95.处理菜单项事件的接口是ActionListener,要实现的

接口方法是actionPerformed(),获得事件源的方法

是getSource()。

96.在Swing 中,有两个对话框类,一个是JDialog类,

它提供构造并管理通用对话框功能;另一个是

JOptionPane类,它提供构造常见对话框功能。97.滚动条对象的事件处理事件类型是

AdjustmentEvents,要实现的事件监听接口的方法是

adjustmentValueChanaged(),注册事件监听器的方法

是addAdjustmentListener(),获取事件源对象的方法

是getAdjustable()。

98.Java 处理鼠标事件提供了两个接口,分别是

MouseListener 接口和MouseMotionListener 接口。

99.Java 程序连接数据库的方法有两种:一种是使用

JDBC –ODBC 桥连接器与数据库连接,另一种

是使用JDBC 驱动程序与数据库连接。

100.Java 提供数据库编程的API包是java.sql。

101.DriverManage 类的getConnection()方法用于建立数据库连接。

102.java.sql 包中用于处理特定数据库连接的类是Connection 类。

103.java.sql 包中用于在指定的连接中处理SQL 语句的类是Statement 类。

104.java.sql 包中用于管理查询结果集的类是ResultSet 类。

105.Statement类的用于执行SQL语句的方法是executeUpdate()。单项选择题

1.Java程序的最基本的组成元素是(C)。(C)对象

2.下列哪种类成员修饰符修饰的变量只能在本类中被

访问?(D)(D)private

3.在Java语言中,哪一个包中的类是自动导入的?

(A)(A)http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng

4.有一个类B,下面为其构造方法的声明,正确的是

(B)(B)B(int x) {}

5.下面关于类的说法,不正确的是(C)。(C)类就是

对象

6.有如下代码段

class COuter {

int x = 10;

void showA() {

System.out.println(x);

}

void print() {

showB();

}

class CInner {

int x = 20;

void showB() {

System.out.println(x);

}}}

则下面说法正确的是(B)。

(B)这段程序有错,原因是外部类直接使用了内部类的成员,而这是不对的

7.Java语言中,类之间的继承关系是(A)。(A)单继

8.在Java中,所有类的根类是(A)。

(A)http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng.Object

9.如果局部变量和成员变量同名,如何在局部变量作

用域内引用成员变量?(B)

(B)在成员变量前加this,使用this访问该成员变量10.在使用interface声明一个接口时,只可以使用下述

哪个修饰符修饰该接口?(D)(D)public

11.下面关于接口叙述正确的是(A)。

(A)实现一个接口必须实现接口的所有方法12.下面说法不正确的是(B)

(B)abstract和final能同时修饰一个类

13.自定义异常时,可以通过对下列哪一项进行继承?

(C)(C)Exception类及其子类

14.以下关于java异常说法不正确的是(D)

(D)以上说法都不对

15.运行下面程序时,会产生什么异常?(A)

(A)ArithmeticException

public class X7_1_4 {

public static void main(String[] args) {

int x = 0;

int y = 5/x;

int[] z = {1,2,3,4};

int p = z[4];

}

}

16.Java提供处理不同类型流的类的API包是(D)(D)

java.io

17.下列流中哪一个使用了缓冲区技术?(A)(A)

BufferedOutputStream

18.能读入字节数据进行Java基本数据类型判断过虑的

类是(C)。(C)DataInputStream

19.下列哪一个import命令可以允许我们在程序中创建

输入/输出流对象?(C)(C)import java.io.*;

20.如果需要从文件中读取数据,则可以在程序中创建

哪一个类的对象?(A)(A)FileInputStream

21.下列流中哪个不属于字节流?(D)。(D)

InputStreamReader

22.下列说法中,正确的一项是(A)。(A)单处理机的

计算机上,2个线程实际上不能并发执行

23.下列说法中,错误的一项是(A)。(A)线程就是程

24.下列说法中,错误的一项是(A)。(A)线程一旦创

建,则立即自动执行

25.Thread类定义在下列哪个包中?(B)(B)http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng

26.下列哪个方法可以将MenuBar加入Frame中(D)?

(D)setMenuBar()

27.当单击鼠标或拖动鼠标时,触发的事件是(D)。(D)

MouseEvent

28.下列哪一项不属于Swing的顶层组件(C)?(C)

JTree

29.下列说法中错误的是(B)。(B)JFrame的对象实例

化后,没有大小,但是可以看到

30.声明并创建一个按钮对象b,应该使用的语句是

(A)。(A)Button b=new Button();

31.下列说法中错误的是(D)。(D)一个类只能实现一

个监听器接口

32.如果容器组件p的布局是BorderLayout,则在p的

下边中添加一个按钮b,应该使用的语句是(C)。

(C)p.add(b,"South");

33.Java中,JDBC是指(A)。(A)Java程序与数据库

连接的一种机制34.JDBC的模型对开放数据库连接(ODBC)进行了改

进,它包含(D)。(D)以上全部都是

35.JDBC中要显式地关闭连接的命令是(A)。(A)

Connection.close()

简答题

1.什么是Java 虚拟机?它的主要功能是什么?答:JVM 是在一台计算机上由软件模拟,也可用硬件实现的假想的计算机,它定义了指令集(相当于中央处理器CPU)、寄存器、类文件结构栈、垃圾收集堆、内存区域等。

JVM 是执行Java 程序的引擎。Java 程序编译后得到的二进制形式的字节码实际上就是JVM指令。

2.常用的常用系统包有哪些?它们各自的主要功能

北邮《Java技术》期末复习题(含答案)

在定义成员变量时,如果用static修饰符修饰,则该变量是类变量(也称“静态变量”),否则是实例变量。

类变量不属于类的任何一个具体对象。它保存在类的内存区域的公共存储单元。类的任何一个对象对类变量的存取都是对同一个内存单元进行操作。

与类变量相对,实例变量属于类的某个具体的对象。它在类的每个对象的内存区域中都保存一份。类的任何一个对象对实例变量的存取都是对自己内存区域内保存的实例变量的副本进行操作。

4.类方法和实例方法有哪些不同?答:

类方法不针对特定的对象,所以在没有创建对象之前可以执行。但是在类方法中只能访问类变量和类方法,而不能访问实例变量和实例方法。

实例方法则只能针对特定的对象执行,因此,如果任何对象都不存在,则也就没有可以执行的实例方法。

另外,尽管实例方法专用于类中的对象,但在内存中也只有一份实例方法,供类中的所有对象共享。因为为每个对象都复制一份实例方法的代价太大了。系统中有一种专门机制来保证:每当通过对象调用一个实例方法时,代码都按照专用于某个对象的方式运行。

5.什么是多态?Java 的编译时多态和运行时多态

有什么区别?答:

Java中的多态就是指一个程序中同名的不同方法共存的情况。分为编译时多态和运行时多态两类。

方法重载可以实现Java的编译时多态。它是在相同类内,定义名称相同,但参数个数或参数类型不同的方法。编译器会根据实参的个数和类型,确定调用哪个方法。所谓编译时多态,是指程序会根据参数的不同来调用相应的方法。具体调用哪个被重载的方法,是由编译器在编译阶段决定的。所以编译时多态也叫做静态多态性。方法覆盖可以实现Java的运行时多态。它是在子类当中,定义名称、参数个数与类型均与父类相同的方法,用以改写父类方法的功能。运行时多态是一种在运行时,而不是在编译时调用覆盖方法的一种机制。对于覆盖的方法,Java运行时系统根据调用该方法的实例的类型,来决定选择哪个方法调用。

6.什么是包?包的作用有哪些?答:

所谓包就是Java语言提供的一种区别类名空间的机制,是一组相关的类和接口的集合。

包有以下作用:

(1)有效解决了类名冲突问题。当声明的类很多时,类名冲突的可能性很大,引入包后,只要一个包中的类名不冲突就可以,不同包中的类名可以相同。

(2)包体现了Java语言面向对象特性中的封装机制。包将java语言的类和接口有机地组织成层次结构,这个层次结构与我们平常使用电脑时见到的具体的文件系

统的目录树结构层次一致。

(3)包还可以控制类之间的访问。类之间的访问控制是通过类修饰符来实现的,若类声明修饰符public,则表明该类不仅可供同一包中的类访问,也可以被其它包中的类访问。若类声明无修饰符,则表明该类仅供同一包中的类访问。

7.如何在程序中引入其它包中的代码?答:

将类组织成包的目的是为了更好地利用包中的类。通常一个类只能引用与它在同一个包中的类。如果需要使用其它包中的public类,则可以使用如下的几种方法。(1)在引入的类前加包名。对于同一包中的其它类可直接引用;对于不同包中的其它类引用时需在类名前加包名。

(2)用import关键字加载需要使用的类。利用import 关键字加载需要使用的类当前程序中,这样在程序中引用这个类的地方就不需要再使用包名作为前缀。

(3)上面的方法利用import语句加载了其他包中的一个类。若希望引入整个包也可以直接利用import语句。例如,语句

import shape.*;

该语句的作用是把shape包中的所有类加载到当前程序中。与加载单个类相同,加载整个包后,凡是用这个包中的类,都不需要再使用包名前缀。

8.什么是接口?它的作用是什么?答:

在Java 中,接口不是类,而是一组抽象方法和常量的集合,用来描述类应该提供什么样的功能。在接口中定义的方法仅仅给出方法名称、参数列表、返回值类型等信息的说明,并不给出方法体的具体代码,即没有给出方法功能的具体实现。在程序中定义了一个接口以后,就可以声明某些类实现了这个接口,在实现了该接口的类中再给出接口的方法的功能代码。这相当于用接口规范了实现接口的那些类都必须以特定的形式提供一组

特定的功能。反过来,实现某个接口的类必须提供该接口规定的功能,并且要遵从接口中定义的方法的格式约定。

9.什么是内部类?使用内部类有什么好处?答:

可以将一个类的定义放在另一个类的内部。定义在另一个类内部的类就是内部类。内部类允许我们把一些逻辑相关的类组织在一起,并控制在内部的类的访问特性。内部类的对象持有一个隐式引用,它引用了实例化该内部对象的外围类对象。通过这个引用,可以访问外围类对象的全部状态。

10.什么是异常?Java 处理异常的方法是什么?答:所谓异常,就是程序的运行时错误。

Java通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了一个异常,则Java 虚拟机会如同创建其它对象一样,使用new 在堆上创建异常对象。然后,当前的执行流程被终止,并且从当前环境中弹出异常对象的引用。此时,Java 的异常处理机制接管程序,并开始寻找一个恰当的的地方来继续执行程序。这个恰当的地方就是“异常处理程序”,它的任务是将程序从错误状态中恢复或者做一些简单地处理后结束程序。

11.在编写程序时如何在抛出异常的方法内部处理异

常?答:

使用try … catch … finally 代码块监视和处理异常。

如果try 语句的代码引发(抛出)的异常与后面某个catch语句的参数的类型匹配,则用该catch语句块中的代码处理该异常。如果不匹配就往后找有没有其它的catch 语句的异常参数类型匹配。如果所有的catch 语句的异常类型与try 语句代码段实际产生的异常都不

匹配,则执行finally 语句的代码。另外,try 语句的代码段在执行过程中也有可能不产生异常,此时不管有没有异常产生,try 语句的代码段执行完了之后都会执行finally 语句的代码段。try … catch … finally 代码块全部执行结束之后,如果中间没有出现任何控制转移,程序将在catch 或finally 之后继续执行。

12.在编写程序时如何把异常交给方法调用者去处

理?答:

可以在产生异常的方法内部自己处理异常,也可以不自己处理,而是简单的声明自己可能会抛出哪些类型的异常,如果方法代码执行过程中真的产生异常了,那么就让方法调用者去处理。方法是在方法声明中使用throws 短语声明该方法可能会抛出哪种类型的异常。

13.简述异常的传播途径。答:

在“try … catch … finally”结构中,如果没有一个catch 子句能够匹配已经产生的异常,则执行finally 子句(如果存在)。此时,如果仍然没有程序能够处理这个异常,好像发出异常的语句根本没有嵌套在try 语句中,控制流程将会立即离开当前方法,过早地返回调用当前方法的方法中。如果这个调用语句处于某一个try 语句范围之内,则将开始执行新一轮的异常匹配操作。

14.简述异常的层次结构。答:

当有异常发生时,Java 虚拟机会生成异常对象交给运行时系统。异常对象是异常类创建的。Java中的异常类是以一定的层次结构来组织的。下图表示了异常处理的类层次。

北邮《Java技术》期末复习题(含答案)

15.简述Java 中流的概念和作用。答:

直观地说,流就是用于处理输入/输出的字节序列或字符序列。Java 把程序与各种实际设备之间的数据输入输出的处理细节都封装在称为“流”的系统类中。这样,虽然各种实际设备的差别很大,但是我们可以通过Java 平台提供的“流”类,使用相同的方法来连接数据资源和应用程序。java.io程序包中提供了大量的数据流类,编程人员只要使用相应的数据流类,就可以与相应的设备交换数据。

16.什么是线程?使用多线程有哪些好处?有会带来

哪些问题?答:

通俗地讲,线程是一个代码执行流。

使用多线程的好处是:(1)多线程为多个代码执行流并发执行提供了可能。(2)多线程程序比多进程程序降低了资源占用要求。

使用多线程也会对系统产生一些不利影响:(1)线程需要占用内存,线程越多,内存占用越多。(2)线程过多,会消耗大量CPU时间来跟踪线程。(3)必须考虑多线程同时访问共享资源的问题,如果没有协调好,就会产生令人意想不到的问题,例如死锁和资源竞争等。(4)因为同一个任务的所有线程都共享相同的地址空间,并共享任务的全局变量,所以程序也必须考虑多线程同时访问的全局变量问题。

17.试比较Runnable 接口中定义的run() 方法与

Application程序入口main() 方法有那些相近之

处。答:

在Runnable 接口中定义的惟一的方法是run(),在线程执行时调用。线程退出run() 之后,就已经死亡,无法重新启动或复用。不管是正常退出还是由于未捕获异常退出,情况都是如此。在效果上,线程的run() 方法与Java 应用程序的main() 方法作用相同:就是代码的初始入口点。在应用程序中,mian() 控制程序的主流程,在线程中,run() 控制线程任务的处理流程。

从本质上来说,对于一个新创建的线程,run() 方法可以被看成是main()方法:如同程序是从main() 方法开始运行一样,新线程就是从其run() 方法开始运行的。但是main() 方法从argv 来获取它的参数(argv 一般是通过命令行来设定的),而新创建的线程是用编程的方式从原始线程获取它的参数的。因此,我们可以通过构造方法、静态实例变量或者程序员设计的其他技术来获得这些参数。

18.Java 线程的生命周期有哪些状态?简述线程状态

转换方式。答:

一个线程从创建到工作到死亡的过程称为线程的生命

周期。线程生命周期共有五个状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

新建状态是指创建了一个线程,但它还没有启动。

就绪状态是当前线程处于新建状态后,调用了start() 方法,线程就处于就绪状态。就绪状态的线程具备了运行条件,但尚未进入运行状态。

运行状态是某个就绪状态的线程获得CPU 资源,正在运行。

阻塞状态是正在运行的线程遇到某个特殊情况。例如,延迟、挂起、等待I/O 操作完成等。进入阻塞状态的线程让出CPU,并暂时停止自己的执行。线程进入阻塞状态后,就一直等待,直到引起阻塞的原因被消除,线程又转入就绪状态,重新进入就绪队列排队。

死亡状态是指线程不再具有继续运行的能力,也不能再转到其他状态。

19.简述Java 线程调度机制。答:

Java 的线程调度机制负责调度线程。Java 的线程调度策略采用抢占式调度,优先级高的线程比优先级低的线程优先执行。在优先级相同的情况下,就按“先到先服务”的原则调度线程。Java 有专门的调度器,它的任务是使优先级高的线程能始终运行,一旦时间片有空闲,则使具有同等优先级的线程以轮流的方式顺序使用时间片。只有当高级别的线程死亡时(除非用sleep(int millsecond) 或wait() 方法让出CPU 资源),低级别线程才有机会获得CPU 资源。

线程的优先级用数值表示,数值越大优先级越高(范围1~10)。每个线程根据继承性自动从父线程获得一个线程的优先级,也可在程序中重新设置线程的优先级。对于任务较紧急的重要线程,可安排较高的优先级。相反,则给一个较低的优先级。

20.什么是守护线程?它和非守护线程有什么不同?

答:

所谓“守护线程(daemon thread)”是指,只要程序还在运行,它就应该在后台提供某种公共服务的线程,但是守护线程不属于程序的核心部分。因此,当所有非守护线程都运行结束的时候,程序也结束了。相反,只要还有非守护线程在运行,程序就不能结束。

事实上,“守护线程”和“非守护线程”本质上并没有什么区别,只是JVM 对其控制的方式有所不同而已。主要表现在:第一,守护线程一般是在后台提供某种服务,而非程序核心部分的线程,所以它的优先级最低。这意味着JVM 会尽量先调度那些非守护线程运行。第二,程序中所有非守护线程都已结束运行时,程序就结束。

21.什么是事件?什么是事件驱动工作方式?答:

事件泛指由用户或系统触发的一个特定操作。例如:用鼠标单击命令按钮,将触发一个按钮的Click事件;用鼠标选择一个菜单项,会产生一个菜单项的选择事件,等等。事件驱动工作方式是指,程序启动后,执行一系列初始化操作,然后处于等待状态。当用户或系统触发某个事件之后,程序马上就去执行与该事件对应的过程。待事件过程执行完毕后,系统又处于等待某事件发生的状态。程序的这种工作方式称为事件驱动工作方式。

具有图形界面的Java程序使用事件驱动工作方式。编写具有图形用于界面的Java 程序时不仅要创建程序的

图形界面,还要编写相应的事件处理代码,这样程序才能响应用户的操作。

22.Java GUI 库代码提供的基本功能有哪些?答:Java 通过提供GUI 库提供对图形用户界面编程的支持,GUI 库的代码提供了这样一些基本功能:

创建用户界面的“控件”或组件,如滚动条、按钮和标签等。

通过把GUI 事件(例如单击按钮)和程序程序员编写的事件处理代码关联起来,可以控制组件的动作。

支持对屏幕上的组件进行分组和布局。

支持访问窗口管理器,指定某个窗口作为输入焦点,读取JPEG 和其它影响文件,以及进行打印等。

23.如何用分层次的方法看待组件和容器之间的关

系?答:

容器和组件通常是具有一定的包含关系的。可以按照这样的观点分层次:

顶层容器(不会包含在其它任何容器中的容器),例如JFrame 、JApplet 、JDialog 、JWindow等;

中间容器,例如JPanel 、JScrollPane 、JSplitPane 、JToolBar 等;

基本控件,例如JButton 、JComboBox 、JList 、JMenu 、JTextField 等;

可编辑的组件,例如JColorChooser 、JFileChooser 、JTextArea 等。

在构建程序的图形界面时,一般一次创建顶层容器,中间容器,基本控件和可编辑组件,然后再把基本控件和可编辑组件放到中间容器中,最后再把中间容器放到顶层容器中。

24.Java 是如何管理组件布局的?答:

在容器中可以放置许多组件,需要合理地安排这些组件在容器中的位置才能使界面方便使用并且美观,这些工作就是组件的布局设计与管理。

每个容器都有一个布局管理器用来管理放到这个容器

中的组件的布局。当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。布局管理器可以使我们生成的图形用户界面具有良好的平

台无关性。在Java语言中,用布局管理器来管理组件在容器中的布局,而不直接设置组件位置和大小。容器通过选择不同的布局管理器来决定布局。

25.什么是事件源?什么是事件监听者?它们之间是

如何配合实现事件处理的?答:

Java 中把能够产生事件的组件叫做事件源。这个程序中的按钮就是一个事件源。在Java 中,事件源产生的事件并不是由事件源本身处理,而是由其它对象来处理。用来处理事件的对象叫做事件监听者或事件监听器。

系统把事件源产生的事件交给事件监听者处理,事件监听者使用相应事件监听接口的事件处理方法处理该事件。

26.要让应用程序在框架窗口关闭后退出,可以使用哪

些办法?答:

在有着多个框架的程序中,可能不能因为用户关闭了多了框架中的一个就让程序全部退出。默认情况下,当用户关闭一个框架时,该框架会隐藏起来,但应用程序不会终止。要退出程序,可以使用语句

fra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 或者在已注册的WindowListener 对象的windowClosing 方法中去退出程序,比如在那里使用语句System.exit(0);

27.简述JFrame 框架的基本结构。答:

JFrame 框架的基本结构。其基本结构如下图所示:

北邮《Java技术》期末复习题(含答案)

JFrame 窗口中包含一个JRootPane 类的实例(对象),用这个对象管理放到框架窗体中的元素。JRootPane 面板包含一个glassPane 面板和一个JLayeredPane 面板。glassPane 面板能够截取鼠标移动,而JLayeredPane 面板负责管理contentPane 内容面板和JMenuBar 菜单。程序中要使用的按钮、列表框等组件不是直接添加到JFrame 框架窗口,而是需要添加到内容面板中,而JMenuBar 对象则负责管理出现在框架窗口顶部的菜单。

28.简述给窗口添加菜单的基本过程。答:

(1)创建所需要的菜单条对象、菜单对象和菜单项对象。

(2)把菜单项添加到菜单对象。

(3)把菜单添加到菜单条对象。

(4)把装配好的菜单条对象添加的窗口对象。29.简述Java 程序与数据库连接的基本方法。答:Java 程序连接数据库的方法有两种:一种是使用JDBC – ODBC 桥连接器与数据库连接,另一种是使用JDBC 驱动程序与数据库连接。

用JDBC – ODBC 桥连接器与数据库连接的基本过程:(1)建立ODBC 数据源。(2)在程序中使用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")加载JDBC – ODBC驱动程序。(3)使用DriverManager.getConnection(myUrl, user, password)建立数据库连接(4)使用相应语句做其它操作。

使用JDBC 驱动程序与数据库连接的过程:(1)下载和安装相应的JDBC 驱动程序。(2)在程序中使用Class.forName("com.microsoft.jdbc.sqlserver.SQLServerD river")加载JDBC驱动程序。(3)使用DriverManager.getConnection(myUrl, user, password)建立数据库连接(4)使用相应语句做其它操作。

30.常见的Java 数据库编程API有哪些?它们的主

要功能分别是什么?答:

DriverManage 类是java.sql 包中用于管理数据库驱

动程序的类。它处理驱动程序的加载和建立数据库连接。DriverManage 类的静态方法getConnection() 用于建立数据库连接。该方法返回一个Connection 对象。

Connection 类是java.sql 包中用于处理特定数据库连

接的类。Connection 对象表示一个实际的数据库连接,在操作数据库之前应该首先建立数据库连接,取得Connection 对象。

Statement 类是java.sql 包中用于在指定的连接中处理SQL 语句的类。取得Connection 对象之后,用该对象的createStatement() 方法创建Statement 对象,然后就可以用Statement 对象执行SQL 语句操作数据库了。

ResultSet 类是java.sql 包中用于管理查询结果集的类。Statement 对象执行SQL 语句时,如果该SQL 语句是一个查询语句,将返回一个查询结果集,ResultSet 对象就表示一个查询结果集,它管理查询结果记录。

编程题

1.编写一个字符方式的Application程序。在程序中

定义一个表示雇员的类Employee。在类Employee 中定义两个属性,分别表示雇员的姓名和薪酬。定义类Employee构造方法,为两个属性赋初值。另外在类Employee的中分别定义两个获取属性值的成员方法。在程序的主类中创建一个Employee类的对象objE,为该对象的所有成员变量赋初值,并且在标准输出设备上输出它的成员变量的值。请写出此Application程序的源程序代码。

class Employee {

private String name;

private double salary;

Employee(String n, double s) {

name = n;

salary = s;

}

String getName() {

return name;

}

double getSalary() {

return salary;

}

}

public class PayrollSystem {

public static void main(String[] args) {

Employee objE = new Employee("Carl Cracker", 1287.0);

System.out.print("name = " + objE.getName());

System.out.println(", salary = " +

objE.getSalary());

}

}

2.编写一个Java Application 程序,要求从键盘读入

整数n,计算n!并输出结果。

import java.io.*;

public class Test17 {

public static void main(String args[]) throws IOException {

int n; int i,m=1;

String str; B ufferedReader buf;

buf=new BufferedReader(new InputStreamReader(System.in));

System.out.print("Input an integer:");

str=buf.readLine();

n=Integer.parseInt(str);

for (i=1;i<=n;i++)

m=m*i;

System.out.println("result="+m);

}

}

3.编写一个字符方式的Application程序。在程序中

定义一个表示人的类CPerson。在类CPerson中有表示人的姓名和性别的成员变量,有显示人的姓名和性别的成员方法。再定义一个表示教师的子类

CTeacher,CTeacher继承自CPerson,同时在

CTeacher中增加表示教师职称的成员变量以及显

示职称的成员方法。在程序的主类中创建一个

CTeacher类的对象tobj,为该对象的所有成员变量赋初值,并且在标准输出设备上输出它的成员变量的值。请写出此Application程序的源程序代码。class CPerson {

String name = new String();

String gender = new String();

void showName() {

System.out.println(name);

}

void showGender() {

System.out.println(gender);

}

}

class CTeacher extends CPerson {

String post = new String();

void showPost() {

System.out.println(post);

}

}

public class CPersonApp {

public static void main(String[] args) {

// TODO Auto-generated method stub

CTeacher tobj=new CTeacher();

http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.html = "Tom";

tobj.gender = "male";

tobj.post = "professor";

tobj.showName();

tobj.showGender();

tobj.showPost();

}

}

4.设有如下接口定义,

interface Shapes {

public abstract double getArea();

public abstract double getPerimeter();

}

用接口Shapes约定二维几何图形都要提供求面积的功能和求周长的功能。

编写一个直角三角形类,该类实现了Shapes接口。请写出该类的代码。

public class RightAngledTriangle implements Shapes { private double a;

private double b;

public RightAngledTriangle(double a, double b) { this.a = a;

this.b = b;

}

public double getArea() {

return a * b / 2;

}

public double getPerimeter() {

double c = http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.htmlng.Math.sqrt(a * a + b * b);

return a + b + c;

}

}

5.编写一个JFrame 窗口程序,要求窗口具有菜单

File,菜单File具有菜单项Open和菜单项Exit。

程序运行时,若选择Open,则把当前源程序的内容在窗口的内容面板中显示出来;若选择Exit则退出程序。

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class Ex {

public static void main(String[] args) {

String str1 = "显示源文件";

MyJFrame mw = new MyJFrame(str1, 400, 300);

mw.setVisible(true);

}

}

class MyJFrame extends JFrame implements ActionListener {

JTextArea text = new JTextArea();

JScrollPane jsp = new JScrollPane(text);

Container conPane = null;

FileReader file;

BufferedReader in;

// 构造方法

public MyJFrame(String name, int w, int h) {

super();

setTitle(name);

setSize(w, h);

setLocation(100, 100);

conPane = getContentPane();

conPane.setLayout(new BorderLayout());

text.setEnabled(false);

conPane.add(jsp, BorderLayout.CENTER);

JMenuBar mnb = new JMenuBar();

JMenu fileMenu = new JMenu("File");

JMenuItem openItem = new

JMenuItem("Open");

JMenuItem exitItem = new JMenuItem("Exit");

openItem.addActionListener(this);

exitItem.addActionListener(this);

fileMenu.add(openItem);

fileMenu.addSeparator();

fileMenu.add(exitItem);

mnb.add(fileMenu);

setJMenuBar(mnb);

/* 准备输入流对象*/

try {

File f = new File("src\\Ex.java");

file = new FileReader(f);

in = new BufferedReader(file);

} catch (FileNotFoundException e) {

text.setText("文件没找到。");

openItem.removeActionListener(this);

}

/* 关闭窗口时退出程序*/

this.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);

}

// 实现ActionListener 中的方法

public void actionPerformed(ActionEvent e) {

String s;

if (e.getActionCommand() == "Exit") {

System.exit(0);

} else if (e.getActionCommand() == "Open") {

try {

while ((s = in.readLine()) != null)

text.append(s + '\n');

} catch (IOException exp) {

}

}

}

}

6.编写一个字符方式的Application程序。在程序中

定义一个表示学生的类Student。Student类的属性为学号、姓名和成绩;方法为增加记录setRecord 和得到记录getRecord。setRecord给出学号、姓名和成绩的赋值,getRecord通过学号得到学生的成绩。在程序的主类中创建一个Student类的对象

objStu,调用setRecord方法为其属性赋值,然后输出该学生的成绩。请写出源程序代码。

class Student {

private int ID;

private String name;

private float score;

public void setRecord(int ID,String name,float score){

this.ID = ID;

http://www.doczj.com/doc/fcef3a2eb5daa58da0116c175f0e7cd18425189c.html = name;

this.score = score;

}

public float getRecord(int ID){

if(ID == this.ID)

return this.score;

else

return -1;

}

}

public class StudentApp {

public static void main(String[] args) {

Student objStu = new Student();

objStu.setRecord(0, "alex", 100);

float Sco = objStu.getRecord(0);

System.out.print(Sco);

}

}

7.按照下面要求编写程序:编写一个JFrame 窗口程

序,要求窗口的内容面板上有一个按钮,点击按钮可以弹出一个对话框。请写出源程序代码。import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class FrameApp implements ActionListener { public static void main(String[] args) {

JFrame jframe = new JFrame("Example");

jframe.setSize(400,100);

jframe.getContentPane().setLayout(new FlowLayout());

JButton jbtn1 = new JButton("按钮");

jbtn1.addActionListener(new FrameApp());

jframe.getContentPane().add(jbtn1);

jframe.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, "ok");

}

}

8.按照下面要求编写程序:编写一个JFrame 窗口程

序,要求窗口标题栏的文字是“这是一个JFrame

窗口程序”。请写出源程序代码。

import javax.swing.*;

import java.awt.event.*;

class MyJFrame extends JFrame{

public MyJFrame(String name, int w, int h) {

super(); setTitle(name);

setSize(w, h); setLocation(100, 100);

}

}

public class MyJFrameApp {

public static void main(String[] args) {

String str1 = "99001";

MyJFrame mw = new MyJFrame(str1, 400, 300);

mw.setVisible(true);

}

}

北邮《Java技术》期末复习题(含问题详解)
北邮《Java技术》期末复习题(含问题详解)_其它_工作范文_实用文档。文档 &...
2019年秋季北邮《Java技术》期末考试复习题
2019年秋季北邮《Java技术》期末考试复习题_IT认证_资格考试/认证_教育专区。WORD 格式《 Java 技术》课程 2019 年秋季期末考试复习题 《 Java 技术》课程 2019 ......
2019年秋季北邮《Java技术》期末考试复习题
应用程序的 main 方法中有以下语句: Strings1=newString(abc); 1/5 《Java 技术》课程 2019 年秋季期末考试复习题 Strings2=newString(abc); booleanb1=(s2)......
北邮计算机科学与技术专业2020秋季期末考试java技术答案
北京邮电大学学历继续教育 2020 年春季学期期末考试答题纸 学习中心: 广东深圳学习中心 专业:计算机科学与技术 姓名: 涂铨 课程名称: Java 技术 学号: ......
北邮《Java技术》阶段作业汇总
北邮《Java技术》阶段作业汇总_教育学_高等教育_教育专区。<<J...
2019年北邮Java技术阶段作业答案
2019年北邮Java技术阶段作业答案_研究生入学考试_高等教育_教育专区。阶段...
北邮-Java技术-阶段三
北邮-Java技术-阶段三_政史地_高中教育_教育专区。一、单项选择题(共 10...
北邮函授 Java 技术 阶段作业 2
北邮函授 Java 技术 阶段作业 2 一、单项选择题(共 10 道小题,共 1...
北邮函授 Java 技术 阶段作业 4
北邮函授 Java 技术 阶段作业 4 一、单项选择题(共 10 道小题,共 1...
北邮国院JAVA 1415年考题+答案
北邮国院JAVA 1415年考题+答案_计算机软件及应用_IT/计算机_专业资料北京邮电大学国际学院1415年的JAVA考题和答案 EBU4201?Paper?A?(Solutions) Question 1 a) ......
北邮函授 Java 技术 阶段作业 3
北邮函授 Java 技术 阶段作业 3 一、单项选择题(共 10 道小题,共 1...
北邮函授--Java-技术--阶段作业-3
北邮函授--Java-技术--阶段作业-3_远程、网络教育_成人教育_教育专区。北邮函授--Java-技术--阶段作 业-3 北邮函授 Java 技术 阶段作业 3 一、单项选择题(......
16秋北邮大学英语3阶段作业(1)
16秋北邮大学英语3阶段作业(1)_远程、网络教育_成人教育_教育专区。一、单项选择题(共 9 道小题,共分) 1. 下面关于 Java 的理解错误的是( )。 A. Java ......