V 大发大纲
Java 网络编程期末复习题(I/O、多线程、网络编程、数据库操作)
一、单选题
)
)
1、下列关于 Java 线程的说法那些是正确的(
A、每一个 Java 线程可以看成由代码、一个真实的 CPU 以及数据三部份组成。
B、创建线程的两种方法中,从 Thread 类中继承的创建方式可以防止出现多父类问题。
C、Thread 类属于 java.util 程序包。
D、以上说法无一正确。
2、运行下列程序, 会产生什么结果?(
public class X extends Thread implements Runable{
public void run(){
System.out.println("this is run()");
}
public static void main(String args[]) {
Thread t=new Thread(new X());
t.start();
}
}
A、第一行会产生编译错误
B、第六行会产生编译错误
C、第六行会产生运行错误
D、程序会运行和启动
)
3、下列选项中,用于定义接口的关键字是(
A、import
B、implements
C、interface
D、protected
4.定义类头时能使用的修饰符是(
A) private B) static C) abstract D) protected
)。
5、下面哪个方法不可以在任何时候被任何线程调用?(
A、wait()
B、sleep()
C、yield()
)
D、synchronized(this)
6. 下列关于线程优先级的说法中,正确的是
A) 线程的优先级是不能改变的
B) 线程的优先级是在创建线程时设置的
C) 在创建线程后的任何时候都可以设置
D) B 和 C
7.线程生命周期中正确的状态是
A) 新建状态、运行状态和终止状态
B) 新建状态、运行状态、阻塞状态和终止状态
C) 新建状态、可运行状态、运行状态、阻塞状态和终止状态
D) 新建状态、可运行状态、运行状态、恢复状态和终止状态
8.Thread 类中能运行线程体的方法是
A) start()
C) init()
B) resume()
D) run()
9 在程序读入字符文件时,能够以该文件作为直接参数的类是
A) FileReader
C) FileInputStream
10)java.io 包的 File 类是
A) 字符流类
C) 对象流类
11)下列描述中,正确的是
B) BufferedReader
D) ObjectInputStream
B) 字节流类
D) 非流类
A) 在 Serializable 接口中定义了抽象方法
B) 在 Serializable 接口中定义了常量
C) 在 Serializable 接口中没有定义抽象方法,也没有定义常量
D) 在 Serializable 接口中定义了成员方法
12. java 中用于创建文件对象的类是( )
A.File
B. Object
C. Thread
D. Frame
13. 从键盘上输入一个字符串创建文件对象,若要判断该文件对象为目录文件或数据文件,
可使用下列哪个方法?(
)
A.getPath() B. getName() C.isFile()
D. isAbsolute()
14. 下列哪个类不对直接创建对象?( )
A.InputStream B. FileInputStream C. BufferedInputStream D. DataInputStream
15. 从键盘上输入多个字符时,为了避免回车换行符的影响,需要使用下列哪个流方法?
(
)
A.write() B. flush()
C. close()
D. skip()
16. 以对象为单位把某个对象写入文件,则需要使用什么方法? ( )
A. writeInt()
B writeObject()
C. write()
D.writUTF()
17. 下列哪个类的方法能够直接把简单数据类型写入文件?( )
A.OutputStream B. BufferedWriter
C. ObjectOutputStream. D.FileWriter
18. 若一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口?( )
A.Runnable
B. ActionListener C. WindowsAdapter D. Serializable
19. 下列哪种类型的数据能以对象的形式写入文件?( )
A.String B. Frame C. Dialog D. Button
20. File 类的方法中,用于列举某目录下的子目录及文件的方法是( )
A.long length() B. long lastModified() C. String [] list() D. String getName()
21. 能够以字符串为单位写入文件数据的流类是( )
A. FileOutputStream B. FileWriter C. BufferedWriter C. OutputStream
22. 能够向文件输入逻辑型数据的类是:(
)
A. FileOutputStream B. OutputStream C. FileWriter D.DataOutputStream
23. 在线程同步中, 为了唤醒另一个等待的线程,使用下列方法( )
A. sleep()
B. wait()
C notify()
D. join()
24. 为了得到当前正在运行的线程,可使用下列哪个方法?( )
D. run()
A.getName() B. Thread.CurrentThread(). B. sleep()
25. 以下( )不属于线程的状态。
A.就绪状态
B。运行状态 C。挂起状态 D。独占状态
26.当线程被创建后,其所处的状态是( )
A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态
27. 当线程调用 start()后,其所处状态为( )
A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态
28. Thread.sleep()方法调用后,当等待时间未到,该线程所处状态为( )
A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态
29.新生状态的线程其可能直接进入的状态是(
)
A.阻塞状态 B、运行状态 C、新建状态 D、结束状态
30.Thread.sleep()方法调用后,当等待时间已到,该线程所处状态为( )
A.阻塞状态 B。运行状态 C、就绪状态 D、新建状态
31.当线程因异常而退出 run()后,其所处状态为( )
A.阻塞状态 B。运行状态 C、就绪状态 D、结束状态
32.wait()方法首先是哪个类的方法?( )
A. Object
B. Thread.
C. Runnable
D. File
33. 如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件
中”的功能时,则需要使用下列哪个类?(
)
A. FileReader B. OutputStream C. FilterOutputStream D. DataOutputStream
34. 用 read()方法读取文件内容时,判断文件结束的标记为( )
A. 0
B. 1
C -1
D. 无标记
35. 以下哪个方法只对使用了缓冲的流类起作用?( )
A. read()
B. write()
C skip()
D. flush()
36. Java 提供的类 InetAddress 来进行有关 Internet 地址的操作.(
)
A. Socket
B.ServerSocket
C. DatagramSocket D InetAddress
37. InetAddress 类中哪个方法可实现正向名称解析?( )
A. isReachable() B. getHostAddress()
C. getHosstName() D.getByName()
38. 为了获取远程主机的文件内容,当创建 URL 对象后,需要使用哪个方法获取信息( )
A.getPort()
B.getHost C.openStream()
D.openConnection()
39. java 程序中,使用 TCP 套接字编写服务端程序的套接字类是( )
A. Socket
B. ServerSocket
C. DatagramSocket D.DatagramPacket
40. ServerSocket 的监听方法 accept()的返回值类型是( )
D. DatagramSocket
A. void B. Object
C. Socket
41. ServerSocket 的 getInetAddress()的返回值类型是( )
A. Socket
B ServerSocket
D.InetAddress
D,.URL
42. 当使用客户端套接字 Socket 创建对象时,需要指定( )
A.服务器主机名称和端口
D.服务器地址和文件
B、服务器端口和文件 C、服务器名称和文件
43.使用流式套接字编程时,为了向对方发送数据,则需要使用哪个方法( )
A.getInetAddress()
B. getLocalPort()
C.getOutputStream() D.getInputStream()
44. 使用 UDP 套接字通信时,常用哪个类把要发送的信息打包? ( )
A. String
B. DatagramSocket
C. MulticastSocket D.DatagramPacket
45. 使用 UDP 套接字通信时,哪个方法用于接收数据 ( )
A. read() B. receive() C. accept()
D. Listen()
46. 若要取得数据包的中源地址,可使用下列哪个语句( )?
D.getData()
A. getAddress()
B. getPort()
C. getName()
47. 要使用 java 程序访问数据库,则必须首先与数据库建立连接,在建立连接前,应加载数
据库驱动程序,该语句为(
)
A Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)
B. DriverManage.getConnection(“”,””,””)
C.Result rs= DriverManage.getConnection(“”,””,””).createStatement()
D. Statement st= DriverManage.getConnection(“”,””,””).createStaement()
48. 要使用 java 程序访问数据库,则必须首先与数据库建立连接,该语句为( )
A Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)
B. DriverManage.getConnection(“”,””,””)
C.Result rs= DriverManage.getConnection(“”,””,””).createStatement()
D. Statement st= DriverManage.getConnection(“”,””,””).createStaement()
49.
50.
java 程序与数据库连接后,需要查看某个表中的数据,使用下列哪个语句?( )
A. executeQuery()
java 程序与数据库连接后,需要查看某个表中的数据,使用下列哪个语句?( )
A. executeQuery()
B.executeUpdate() C executeEdit() D.executeSelect()
B.executeUpdate() C executeEdit() D.executeSelect()
二、填空题
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)
____技术。(PrintStream)
7、字符输入流 BufferedReader 使用了__
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{
;
}catch(
System.put.println("Hello");
}
e){}
}
}
答:
Thread.sleep(1000)
InterruptedException
三、简答与程序分析、填空、设计题
第一部分:简答
1、线程的生命期内包括哪些状态?
答:新建状态、就绪状态、运行状态、阻塞状态、死亡状态
见下图:各状态之间的切换关系
死亡
阻塞
创建
就绪
运行
2、什么是线程的新建状态?
答: 线程对象已经创建,还没有在其上调用 start()方法。
3、什么是线程的可运行状态?
答:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。
当 start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠
状态回来后,也返回到可运行状态。
4、什么是线程的死亡态?
答:当线程的 run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已
经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用
start()方法,会抛出 java.lang.IllegalThreadStateException 异常。
5、调用 join()方法有何作用?
答: 保证当前线程停止执行,直到该线程所加入的线程完成为止。然而,如果它加入的
线程没有存活,则当前线程不需要停止。
6.现有字符串 S=”hello,java!”,则以此字符串生成待发送 DatagramPacket 包 dgp 的语句是:
答:
Byte[] str=s.getbytes();
DatagramPacket dgp=new DatagramPacket(str, str.length(),目的主机,目的端口);
7、介绍使用 java Socket 创建客户端 Socket 的过程。
答:try{
Socket socket=new Socket(目标主机,目标端口);
}catch(IOException e){
System.out.println("Error:"+e);
}
8、介绍使用 java ServerSocket 创建服务器端 ServerSocket 的过程。
答:
ServerSocket server=null;
try {
server=new ServerSocket(监听端口);
}catch(IOException e){
System.out.println("can not listen to :"+e);
}
Socket socket=null;
try {
socket=server.accept();
}catch(IOException e){
System.out.println("Error:"+e);
}
9、写出一种使用 java 流式套接式编程时,创建双方通信通道的语句。
答:
PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream()));
DataInputStream is=new DataInputStream(socket.getInputStream());
PrintWriter out=new PrintWriter(socket.getOutStream(),true);
BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream()));
10、对于建立功能齐全的 Socket,其工作过程包含以下四个基本的步骤:
(1) 创建 Socket;
(2) 打开连接到 Socket 的输入/出流;
(3) 按照一定的协议对 Socket 进行读/写操作;
(4) 关闭 Socket.
11、简述基于 TCP 及 UDP 套接字通信的主要区别
答:TCP,可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。
UDP,不可靠,差错控制开销较小,传输大小限制在 64K 以下,不需要建立连接。
12、写出 DatagramSocket 的常用构造方法:
答:
DatagramSocket();
DatagramSocket(int prot);
DatagramSocket(int port, InetAddress laddr)
port 指明 socket 所使用的端口号,如果未指明端口号,则把 socket 连接到本地主机上
一个可用的端口。laddr 指明一个可用的本地地址。
13、介绍一下 DatagramPacket 的常用构造方法 :
DatagramPacket(byte buf[],int length);
DatagramPacket(byte buf[], int length, InetAddress addr, int port);
DatagramPacket(byte[] buf, int offset, int length);
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port);
其中,buf 中存放数据报数据,length 为数据报中数据的长度,addr 和 port 旨明目的地
址,offset 指明了数据报的位移量。
14、在接收端接收数据报的主要语句:
答:
byte buf[ ]=new byte[n];
DatagramPacket packet=new DatagramPacket(buf, n);
Socket.receive (packet);