Java高级程序设计期末复习题 下载本文

Java高级程序设计第二学期 期末复习题 一、 判断题

1. java.io.Seriablizable是对象可以序列化接口。(√)

2. java.awt包是Java语言用来构建图形用户界面(GUI)的类库。(√)

3. 容器java.awt.Container是Component的子类,一个容器可以容纳多个构件,并使他们成为一个整体。(√)

4. Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。(√) 5. Java的图形用户界面的最基本的组成部分就是构件(Component)。(√) 6. 在Swing中用重量级的构件替代了AWT中的轻量级的构件。(X)

7. 与AWT构件不同,Swing构件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(contentPane)上。(√) 8. 类Panel默认的布局管理器是GridLayout。(X) 9. 每个Java小应用程序必须定义为Jframe类的子类。(√)

10. 使用UDP通信时,用DatagramPacket类把要发送的信息打包。(√) 11.AWT组件称为重型组件(√) 12.Swing组件称为轻型组件(√) 13.容器类不是GUI组件(X)

14.使用add方法可以在框架的内容窗格中添加组件(√) 15.FlowLayout 是最简单的布局管理器(√)

16.布局管理器GridLayout不是以网格(矩阵)的形式排列组件(X) 17.布局管理器的属性不可以动态的改变(X)

18.每一时刻,一个容器只能有一个布局管理器(√)

19.要创建一个用户界面,需要创建一个框架或applet来存放用户界面组件(√) 20.Component类是所有用户界面的父类(√) 21. JFrame实例可以添加到容器中。( F )

22. JCheckBox继承了AbstractButton类的所有属性。( T ) 23. JTextArea可以让用户输入多行文字。( T )

24. JSlider与JScrollbor类似,但是JSlider具有更多的属性和更多是显示形式。( T )

25.JTextField类继承了JTextComponent类,而JTextComponent类继承JComponent类。( T )

26. 从应用程序创建一个子窗口,不用先创建JFrame的一个子类。( F ) 27. 在一个文本域中按下回车键就触发了ActionEvent事件。( T )

28. Java使用事件委托处理模型来处理事件,源对象和监听对象可以是同一个对象。( T )

29. JDBC是指Java程序与数据库连接的一种机制。( T ) 30.可以给一个面板添加框架。(F )

31. File类提供实现文件读写的操作方法。 (T) 32. java.io.Reader时一个读取字符的类。 (T)

33.垂直文本位置指定文本相对于图标的垂直位置。(T) 34.不可以同时设置按钮上的文本和图标。(F)

35.标签是显示一小段文字、一幅图片或者二者皆有的区域。(T)

36.组合框是包含项目的一个列表,用户可以从中进行选则。(T) 37. 用read()方法读取文件内容时,返回-1表示文件结束。(F)

38. PrintWriter类和PrintStream类可以以文本方式输入基本类型数据值、字符串和对象。(F)

39. 代表优先级的常数值越大优先级越低 (F) 40. 线程一旦被创建,则自动运行 (F )

二、单选题

1、下列关于Java线程的说法那些是正确的( B )

A、每一个Java线程可以看成由代码、一个真实的CPU以及数据三部份组成。 B、创建线程的两种方法中,从Thread类中继承的创建方式可以防止出现多父类问题。

C、Thread类属于java.util程序包。 D、以上说法无一正确。

2、运行下列程序, 会产生什么结果?( D ) public class X extends Thread implements Runable{ public void run(){

System.out.println(\ }

public static void main(String args[]) { Thread t=new Thread(new X()); t.start(); } }

A、第一行会产生编译错误 B、第六行会产生编译错误 C、第六行会产生运行错误 D、程序会运行和启动

3、下列选项中,用于定义接口的关键字是( C ) A、import B、implements C、interface D、protected

4.定义类头时能使用的修饰符是( C )。 A) private B) static C) abstract D) protected

5、下面哪个方法不可以在任何时候被任何线程调用?( A ) A、wait() B、sleep() C、yield()

D、synchronized(this)

6. 下列关于线程优先级的说法中,正确的是 ( D )

A) 线程的优先级是不能改变的

B) 线程的优先级是在创建线程时设置的 C) 在创建线程后的任何时候都可以设置 D) B和C

7.线程生命周期中正确的状态是( C )

A) 新建状态、运行状态和终止状态

B) 新建状态、运行状态、阻塞状态和终止状态

C) 新建状态、可运行状态、运行状态、阻塞状态和终止状态 D) 新建状态、可运行状态、运行状态、恢复状态和终止状态

8.Thread类中能运行线程体的方法是( D )

A) start() B) resume() C) init() D) run()

9在程序读入字符文件时,能够以该文件作为直接参数的类是( A )

A) FileReader B) BufferedReader C) FileInputStream D) ObjectInputStream

10)java.io包的File类是( D )

A) 字符流类 B) 字节流类 C) 对象流类 D) 非流类

11)下列描述中,正确的是( C )

A) 在Serializable接口中定义了抽象方法 B) 在Serializable接口中定义了常量

C) 在Serializable接口中没有定义抽象方法,也没有定义常量 D) 在Serializable接口中定义了成员方法

12. java中用于创建文件对象的类是( A )

A.File B. Object C. Thread D. Frame

13. 从键盘上输入一个字符串创建文件对象,若要判断该文件对象为目录文件或数据文件,可使用下列哪个方法?( C )

A.getPath() B. getName() C.isFile() D. isAbsolute()

14. 下列哪个类不对直接创建对象?( A )

A.InputStream B. FileInputStream C. BufferedInputStream D. DataInputStream

15. 从键盘上输入多个字符时,为了避免回车换行符的影响,需要使用下列哪个流方法?( D )

A.write() B. flush() C. close() D. skip()

16. 以对象为单位把某个对象写入文件,则需要使用什么方法? ( B ) A. writeInt() B writeObject() C. write() D.writUTF()

17. 下列哪个类的方法能够直接把简单数据类型写入文件?( C ) A.OutputStream B. BufferedWriter C. ObjectOutputStream. D.FileWriter

18. 若一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口?(D )

A.Runnable B. ActionListener C. WindowsAdapter D. Serializable

19. 下列哪种类型的数据能以对象的形式写入文件?( A ) A.String B. Frame C. Dialog D. Button

20. File类的方法中,用于列举某目录下的子目录及文件的方法是(C )

A.long length() B. long lastModified() C. String [] list() D. String getName()

21. 能够以字符串为单位写入文件数据的流类是( C )

A. FileOutputStream B. FileWriter C. BufferedWriter C. OutputStream

22. 能够向文件输入逻辑型数据的类是:( D )

A. FileOutputStream B. OutputStream C. FileWriter D.DataOutputStream

23. 在线程同步中, 为了唤醒另一个等待的线程,使用下列方法( C ) A. sleep() B. wait() C notify() D. join()

24. 为了得到当前正在运行的线程,可使用下列哪个方法?(B ) A.getName() B. Thread.CurrentThread(). B. sleep() D. run()

25. 以下( D )不属于线程的状态。

A.就绪状态 B。运行状态 C。挂起状态 D。独占状态

26.当线程被创建后,其所处的状态是( D )

A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态

27. 当线程调用start()后,其所处状态为( C )

A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态

28. Thread.sleep()方法调用后,当等待时间未到,该线程所处状态为( A ) A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态

29.新生状态的线程其可能直接进入的状态是( D )

A.阻塞状态 B、运行状态 C、新建状态 D、结束状态

30.Thread.sleep()方法调用后,当等待时间已到,该线程所处状态为( C ) A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态

31.当线程因异常而退出run()后,其所处状态为( D )

A.阻塞状态 B。运行状态 C、就绪状态 D、结束状态

32.wait()方法首先是哪个类的方法?(A )

A. Object B. Thread. C. Runnable D. File

33. 如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,则需要使用下列哪个类?( C )

A. FileReader B. OutputStream C. FilterOutputStream D. DataOutputStream

34. 用read()方法读取文件内容时,判断文件结束的标记为(C ) A. 0 B. 1 C -1 D. 无标记

35. 以下哪个方法只对使用了缓冲的流类起作用?(D ) A. read() B. write() C skip() D. flush()

36. Java提供的类InetAddress来进行有关Internet地址的操作.( D ) A. Socket B.ServerSocket C. DatagramSocket D InetAddress

37. InetAddress类中哪个方法可实现正向名称解析?( B )

A. isReachable() B. getHostAddress() C. getHosstName() D.getByName()

38. 为了获取远程主机的文件内容,当创建URL对象后,需要使用哪个方法获取信息(C )

A.getPort() B.getHost C.openStream() D.openConnection()

39. java程序中,使用TCP套接字编写服务端程序的套接字类是(B ) A. Socket B. ServerSocket C. DatagramSocket D.DatagramPacket

40. ServerSocket的监听方法accept()的返回值类型是(C ) A. void B. Object C. Socket D. DatagramSocket

41. ServerSocket的getInetAddress()的返回值类型是( C ) A. Socket B ServerSocket C.InetAddress D,.URL

42. 当使用客户端套接字Socket创建对象时,需要指定(A )

A.服务器主机名称和端口 B、服务器端口和文件 C、服务器名称和文件

D.服务器地址和文件

43.使用流式套接字编程时,为了向对方发送数据,则需要使用哪个方法(C ) A.getInetAddress() B. getLocalPort() C.getOutputStream() D.getInputStream()

44. 使用UDP套接字通信时,常用哪个类把要发送的信息打包? (D ) A. String B. DatagramSocket C. MulticastSocket D.DatagramPacket

45. 使用UDP套接字通信时,哪个方法用于接收数据 ( B ) A. read() B. receive() C. accept() D. Listen()

46. 若要取得数据包的中源地址,可使用下列哪个语句( A )? A. getAddress() B. getPort() C. getName() D.getData()

47. 要使用java程序访问数据库,则必须首先与数据库建立连接,在建立连接前,应加载数据库驱动程序,该语句为( A )

A Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) B. DriverManage.getConnection(“”,””,””)

C.Result rs= DriverManage.getConnection(“”,””,””).createStatement() D. Statement st= DriverManage.getConnection(“”,””,””).createStaement()

48. 要使用java程序访问数据库,则必须首先与数据库建立连接,该语句为(B ) A Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) B. DriverManage.getConnection(“”,””,””)

C.Result rs= DriverManage.getConnection(“”,””,””).createStatement() D. Statement st= DriverManage.getConnection(“”,””,””).createStaement()

49. java程序与数据库连接后,需要查看某个表中的数据,使用下列哪个语句?(A )

A. executeQuery() B.executeUpdate() C executeEdit() D.executeSelect()

50. java程序与数据库连接后,需要查看某个表中的数据,使用下列哪个语句?( B )

A. executeQuery() B.executeUpdate() C executeEdit() D.executeSelect()

51.Swing与AWT的区别不包括(D ) A.Swing是由纯Java实现的轻量级构件 B.Swing没有本地代码

C.Swing不依赖操作系统的支持 D.Swing支持图形用户界面

52. JAVA中提供了多种布局对象类。其中使用卡片式布局的是( D ) A.FlowLayout B.BoederLayout C.BoxLayout D.CardLayout

53.每个使用Swing组件的程序必须至少有一个( B ) A. 按钮 B. 顶层容器 C. 标签 D. 菜单

54.下列哪个选项是创建一个标识有\关闭\按钮的语句?( C ) A.JTextField b = new JtextField(\关闭\B.JTextArea b = new JTextArea(\关闭\ C.JButton b = new Jbutton(\关闭\

D.JCheckbox b = new Jcheckbox(\关闭\

55.鼠标事件的监听器接口MouseListener能实现的事件不包括(D ) A.按下 B.释放 C.点击 D.拖动

56.在Java中,而无需在程序中用import导入的包是(D ) A.java.applet B.java.awt C.java.util D.java.lang

57.类Panel默认的布局管理器是( C ) A.GridLayout B.BorderLayout C.FlowLayout D.CardLayout

58.容器Frame缺省使用的布局编辑策略是( B )。 A.FlowLayout B.BorderLayout C.GridLayout D.CardLayout

59.容器类java.awt.container的父类是( B )。 A.java.awt.Window B.java.awt.Component C.java.awt.Frame D.java.awt.Panel

60.编写Java图形界面程序时,若需要对发生的事件做出响应和处理,一般需要在程序的开头写上( D )语句。

A.import java.awt.* ; B.import java.applet.* ; C.import java.io.* ; D.import java.awt.event.* ;

三、填空题

1.Stdout System.out作为PrintStream的实例,来实现stdout,它代表的是 屏幕

2.Stdin System.in作为InputStream类的一个实例来实现stdin,它代表的是键盘,你可以使用其中两个成员函数, read()让你从输入中读一个字节,skip(long n)让你在输

入中跳过n个字节。

3. Java中的IO流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。它们通过重载read()和write()方法定义了6个读写操作方法。

4. File类不是一個標準的I/O类,在java.io类库中它是唯一的non-stream類別,既不能讀取文件內容,也不能修改文件內容,主要作用是收集檔案(或目錄)的相關信息,例如:建立文件对象、修改文件名、设置文件属性、测试文件属性

5.目录是一个包含其他文件和路径列表的File 类。当你创建一个File 对象且它是目录时,isDirectory( ) 方法返回ture。这种情况下,可以调用该对象的String [ ]list( )方法来提取该目录内部其他文件和目录的列表

6. 所有的输出过滤流都是抽象类_ ____的子类。(FilterOutputStream)

7、字符输入流BufferedReader使用了__ ____技术。(PrintStream)

8、 InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。实际上是通过byte[]和String来关联。

9、设 a.txt为当前目录下的一个文本文件,则以字符方式向该文件写数据时,需要建立的输出流通道为:new FileWriter(“a.txt”);

10. 随机访问文件类是RandomAccessFile,它实现了与DataInputStream, DataOutputStream类同样实现的接口DataInput, DataOutput.。

11.实现多线程的两种方式是:1、继承Thread类;2、实现Runnable接口。 12、取得当前线程的语句是: Thread.currentThread();

13.主线程的名称是main, 默认创建的第一个子线程的名称是thread-0

14. 可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

15.(1) 当多个线程同时运行时,会产生数据错误及其它冲突问题。Java语言提供了线程同步控制机制,一是 锁定共享资源,使得在任何时刻只有一个线程能够访问共享资源,以保持共享资源的完整和一致,二是让互相通信的线程 运行,以保证通信的正确性。 (2)线程之间的通信有两种方法:一是把共享变量和方法封闭在一个类中,二是利用系统方法 和 控制线程通信. 实现对共享资源互拆访问的方法是在方法声明中加入synchronized关键字来声明一个访问共享资源的方法,或者通过 synchronized关键字来声明synchronized 块。

16、 守护线程一般被用于在后台为其它线程提供服务。调用方法 isDaemon() 来判断一个线程是否是守护线程,也可以调用方法setDaemon()将一个线程设为守护线程。 17、InetAddress是用于封装IP地址和DNS的一个类。

18、TCP/IP套接字是最可靠的双向流协议。等待客户端的服务器使用ServerSocket类,而要连接到服务器的客户端则使用Socket类。

19、java.net包中提供了一个类MulticastSocket,允许数据报以广播方式发送到该端口的

所有客户。

20. 在TCP/IP协议的传输层除了TCP协议之外还有一个UDP协议。几个标准的应用层协议HTTP,FTP,SMTP…使用的都是TCP协议。 UDP协议主要用于需要很强的实时交互性的场合,如网络游戏,视频会议等

21、当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。这时我们将使用URL的方法openStream(),其定义为:InputStream openStream(); 22、URL的构造方法都声明抛弃非运行时异常 MalformedURLException ,因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。 23、一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有

24、Java数据库操作基本流程:取得数据库连接 、执行sql语句、处理执行结果、释放数据库连接。 25、下列程序的功能是在监控台上每隔一秒钟显示一个字符串“Hello”,能够填写在程序中下划线位置,使程序完整并能正确运行的语句是

public class Test implements Runnable{ public static void main(String args[]){

Test t=new Test();

Thread tt=new Thread(t); tt.start(); }

public void run(){

for(;;){ try{

Thread.sleep(1000) ;

}catch( InterruptedException e){}

System.put.println(\} } } 26、下列程序的功能是把整型数组myArray中的各元素存入文件ints.dat中,请将程序补充完整。

Import java.io.*; Public class WriteFile{

Public static void main (String[] A){ ____int[]______ myArray={10,20,30,40}; Try{

FileOutputStream f=new FileOutputStream(“ints.dat”); DataOutputStream_____Dos________=new DataOutputStream(f); For(int i=0;i

}catch(IOException ioe){

} } }

27、面程序运行后,可以使用上下键移动文本框组件。请将程序补充完整。 public class Yidong extends Frame implements keyListener{

TextField b1; int x,y; Yidong (){ }

public void keyPressed(KeyEvent e) {

x=b1.getBouds().x; y=b1.getBouds().y;

if(e.getKeyCode()==KeyEvent.VK_UP){ setLayout (new FlowLayout()); b1 = new TextField(\走\b1.addkeyListener(this); setSize (200,120);

System.out.println(“IOException”);

____ this.add(b1); __

y=y-3; if(y<=1)y=50;

b1.setLocation(x,y); }

if(e.getkeyCode()==keyEven.VK_DOWN) { } }

public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public static void main (String args[]){

}

Yidong a = new Yidong (); _____ a.setVisible(true) ____; y=y+3;

if(y>=100)y=50;

______ b1.setLocation(x,y)_____;

}

28、下面的程序段完成服务器在端口4331监听客户端的连接,如果有连接,则在服务端显示客户端的IP地址, 请将程序补充完整。

public class Server{

public static void main(String args[]){ ServerSocket server=null; Server_thread thread; Socket you=null; while(true) {

try{

server=new ServerSocket(___4331__________); } catch(IOException e1){ } try{

System.out.println(\等待客户呼叫\

you=____server.accept();_____

System.out.println(\客户的地址:\

____you.getInetAddress_____);

} catch (IOException e) { } } } }

四、编程题

1、利用文件输入输出流编写一个实现文件拷贝的程序,源文件名和目标文件名通过命令行参数传入。 答:

import java.io.*; class CopyFile{

public static void main(String[] args) { String file1,file2 ; int ch = 0 ; try {

file1=args[0]; file2=args[1];

FileInputStream fis = new FileInputStream(file1); FileOutputStream fos=new FileOutputStream(file2); while ((ch=fis.read())!=-1) fos.write(ch); fis.close(); fos.close(); }

catch(FileNotFoundException e){

System.out.println(\源文件:未找到!\

}catch(ArrayIndexOutOfBoundsException e){ System.out.println(\缺少运行参数!\System.exit(-1); }

catch (IOException e){

System.out.println(e.toString()); } } }

2、编写程序实现窗口,包含一个标签、一个文本框和一个按钮,当用户单击按钮时,程序把文本框中的内容复制到标签中。

import java.awt.*;

import java.awt.event.*; import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener{ JLabel lbl; JTextField txt; JButton btn;

public MyFrame(){

Container c=getContentPane(); //设置窗体的布局为FlowLayout setLayout(new FlowLayout()); lbl = new JLabel(\初始信息\ txt = new JTextField(30); btn = new JButton(\确定\ c.add(lbl); c.add(txt); c.add(btn);

btn.addActionListener(this); setVisible(true); }

public void actionPerformed(ActionEvent e){ lbl.setText(txt.getText()); }

public static void main(String[] args){ new MyFrame(); } }

3.编写一个程序,从键盘输入一串字符,从屏幕输出并将其存入a.txt文件中。 3.答:

import java.io.*; public class InFile{

public static void main(String[] args)

{

int ch; try{

FileOutputStream out=new FileOutputStream(\while((ch=System.in.read())!='\\r'){ System.out.write(ch); out.write(ch); }

out.close();

System.out.write('\\n'); }catch(IOException e){

System.out.println(e.toString()); }

System.out.println(\输出至文件完毕!\} }

4、下列程序向屏幕输出文本文件内容:请完成所缺少的代码 import java.io.*; class readtxt {

public static void main(String[] args) {

try{

FileReader f1 = new FileReader(\

BufferedReader bf1 =new BufferedReader(f1);

String line;

line = bf1.readLine();

while(line!=null) //判断所读的一行内容是否为空; {

System.out.println(line);

line = bf1.readLine(); //继续读入下一行 }

bf1.close(); //关闭文件的输入流; }catch(IOException e) {e.printStackTrace(); } }} 5、设服务器端程序监听端口为8629, 当收到客户端信息后,首先判断是否是“BYE”,若是,则立即向对方发送“BYE”,然后关闭监听,结束程序。若不是,则在屏幕上输出收到的信息,并由键盘上输入发送到对方的应答信息。请编写程序完成此功能。

mport java.net.*; import java.io.*;

class Server{ public Server() { try {

ServerSocket ss = new ServerSocket(8629);

System.out.println(\服务器端已运行,等待客户端连接:\ Socket socket = ss.accept(); //接收客户端的连接请求;

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while(true)

{line = (in.readLine().trim()); if(line.equals(\)

{ out.println(\ out.close(); in.close();

socket.close(); br.close(); ss.close();

break;}

System.out.println(\客户输入为 :\ System.out.println(\请输入回答:\

line=br.readLine(); //从键盘上输入信息; out.println(line); //向对方发送信息 } }

catch (IOException e){} }

public static void main(String[] args) throws Exception{ new Server(); } }

6、TCP客户端需要向服务器端8629发出连接请求,与服务器进行信息交流,当收到服务器发来的是“BYE”时,立即向对方发送“BYE”,然后关闭连接,否则,继续向服务器发送信息。

import java.io.*; import java.net.*; class Client2{ public Client2() { try {String s;

Socket socket = new Socket(\服务器地址\

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); while(true)

{ System.out.println(\请向服务器输出一条字符串:\ s=line.readLine();

out.println(s); //向服务器发出信息;

s=in.readLine().trim(); //收到服务器发来的信息; System.out.println(\服务器返回的信息是:\ System.out.println(s); if(s.equals(\ { out.println(\

line.close(); out.close(); in.close();

socket.close(); break;} } }

catch (IOException e){} }

public static void main(String[] args) { new Client2(); }}

7、设access数据库中有student表,表中存放学生学号,姓名两个字段,请编写程序输出表中所有记录信息。(假定已经配置好数据源为:mydb11) import java.sql.*; class access{

public static void main(String args[]){ Connection con;

Statement sql; //声明Statement对象 ResultSet rs; try{

Class.forName(\ }

catch(ClassNotFoundException e){ System.out.println(\} try{

con=DriverManager.getConnection(\sql=con.createStatement(); rs=sql.executeQuery(\while(rs.next()){

String num=rs.getString(1); //获得数据库第一列

String name=rs.getString(2);

System.out.print(\学号:\输出信息 System.out.print(\ 姓名:\System.out.println(); }

con.close();}

catch(SQLException el){} }