Java期末真题
Java 考试真题卷
第一部分:简答与程序分析题
1. 分析下列程序,简述 Java 对象和基本数据类型作为参数传递时的区别,并给出运行结果。
Java
1 | class IntClass { |
2. 简述 Java 抽象类与接口的共同点,并从属性、成员方法、实现策略方面阐述抽象类与接口的不同点。
3. 假定当前有一个商品订单集合,需要频繁的进行订单的添加和删除操作,你应该选择 Java 集合框架中的 ArrayList 类还是 LinkedList 类来存储这些订单,为什么?请从两者内部实现的数据结构来进行论述。
4. 简述 final 修饰数据成员、方法以及类时各有什么特点。finally 关键字又有什么用途?
5. 请用两种不同的方法定义一个 Java 多线程,让该线程执行 1 到 10000 的整数求和运算,并论述这两定义线程方式的区别。如果该线程类已经继承了某个父类,那么应该使用哪种方法定义该线程?
6. 分析下列程序,其中三个方法能构成方法重载么?为什么?方法重载与方法覆写有什么区别,请在下列程序的基础上给出一个方法覆写的程序示例。
Java
1 | class Student { |
7. 简述 Java 集合框架中 Map 接口的特点,并简述其两个实现类 HashMap 与 TreeMap 的区别。
8. 已知程序一和程序二的运行结果分别是 “a” 和 “ahello”,根据结果简述 String 与 StringBuilder 的特点及各自的适用场景。
程序一:
Java
1 | public class Str { |
程序二:
Java
1 | public class Str { |
9. 已知类 SelfException 的某个方法 called() 的方法声明为:static void called() throws SelfException,其中 SelfException 为自定义异常类,继承 Exception 类。假定该类的 main 方法中需要调用 called() 方法,其程序如下:
Java
1 | public static void main(String[] args) { |
请问该程序会产生什么错误?请给出两种不同的修改方案。
10. 分析下列程序,其中 this.i 和 super.i 分别是什么含义?该程序是否有错误?若有错误,请指出修改方案;若没有错误,请写出运行结果。
Java
1 | class Pare { |
11. 假设在多线程环境下,线程 1 执行下列程序中某个 Sta 实例对象的 addChar(‘k’) 方法,线程 2 执行同一实例对象的 addChar(‘h’) 方法,那么当前 Sta 对象的 size 和 data 数据成员一定能够得到预期的结果(即依次添加 ‘k’ 和 ‘h’ 两个字符元素)么?如果不能,请分析论述原因,并给出修改方案。
Java
1 | class Sta { |
第二部分:编程题
1. 用 Java 语言编写一个复数类 Complex,满足以下条件:
(1) 定义
private的成员变量real和imagin,表示复数的实部和虚部,类型为整数。(2) 定义两个
Complex的构造方法,一个构造方法不带参数,且real和imagin的初始值为 0;另一个构造方法有两个参数,参数名为r和i,类型为整数,用这两个参数值分别作为real和imagin的初始值。(3) 定义一个
sub方法,其函数原型为public Complex sub(Complex a),功能为将当前复数对象与形参复数对象相减,返回一个Complex类型。(4) 编写
main方法,测试两个复数2+3i和5+8i相减的结果,并打印出结果-3-5i。(5) 在
main方法中,将三个复数-2+3i,3-5i,1+4i依次存储到ArrayList集合对象中,并按照复数实部从大到小的顺序对复数对象进行排序。- 提示:可以使用
Collections类的public static void sort(List list, Comparator c)方法进行排序,其中Comparator接口的compare方法用于指定两个待比较参数的排序。描述如下:
Java
1
2int compare(T o1, T o2)
// Returns: a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.- 提示:可以使用
2. 已知一个接口 Solid,其包含一个返回图形体积的抽象方法:public double calVol()。
定义两个类:正方体类 (Cube) 和 圆柱体类 (Cylinder),两者分别实现接口 Solid,并实现了
calVol()方法计算各自图形的体积。定义一个测试类 Test,其包含一个
printVol方法和一个main方法,其中printVol方法用于在屏幕输出图形的体积,main方法的方法体定义如下:Java
1
2
3
4
5Cube cube = new Cube(3.0); // 参数为边长
Cylinder cylinder = new Cylinder(5.5, 4); // 参数依次为半径和高
Test test = new Test();
test.printVol(cube); // 打印 Cube 的体积
test.printVol(cylinder); // 打印 Cylinder 的体积(1) 要求给出接口
Solid的定义,以及Cube类和Cylinder类的完整定义(包括数据成员,构造方法,calVol方法),并给出Test类的printVol方法的定义。(2) 现要设计一个
GraphCalcu类,其不仅提供上述正方体、圆柱体的体积计算,将来还可扩展提供其他实现Solid接口的图形体积计算。已知该类的main方法定义如下:Java
1
2
3
4
5
6Cube cube = new Cube(3.0);
GraphCalcu gc = new GraphCalcu(cube);
System.out.println(gc.Calcu()); // 提供 Cube 的体积计算
Cylinder cylinder = new Cylinder(5.5, 4);
gc = new GraphCalcu(cylinder);
System.out.println(gc.Calcu()); // 提供 Cylinder 的体积计算要求给出
GraphCalcu类除main方法以外的定义(包括数据成员,构造方法,Calcu()方法)。
3. 编写一个基于 TCP 协议的 Socket 套接字的 Java 服务器程序,满足以下需求:
- (1) 服务器的主线程一直在本机 8377 端口监听用户的请求,对于每一个用户请求,服务器都会派发一个客户服务线程处理请求。
- (2) 服务器循环接收来自客户端的字符串消息,并在该消息前面加上客户编号发送给相应的用户。例如,客户 1 发送消息 “Hello” 给服务器,服务器则向客户 1 回复 “Client1, Hello”。
- (3) 服务器将所有接收到的客户消息保存到本地磁盘 D 的
chat.txt文件中。 - (4) 若用户发送的消息内容为 “Bye”,服务器则关闭套接字及连接,结束循环。
