Java面向对象模拟试题1
int[] arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
printArray(arr);
}
}
运行结果
1,2,3,4,5,
2,4,6,8,10,
程序三
class MyException extends Exception {
7 如何判断函数构成重载关系?挑出以下函数中不构成重载关系的函数,指明它违反了哪个判断准则。
(1)void myFunc();
(2)int myFunc(int x,int y);
(3)int myFunc(string str, string str2);
(4)string myFunc(int x, int y);
public MyException(String message) {
super(message);
}
}
public class Test {
private static void fun1() throws MyException {
throw new MyException("An MyException object is thrown in fun1().");
如果要你开发出一个Windows资源管理器(图 1),你将如何应用合适的“布局管理器”来实现其界面?
图 1 Windows 7中的资源管理器
请指明你在图 1中的哪部分应用哪种布局管理器。
4 int和Integer都可以代表一个整数,这两者在使用上有什么区别吗?为什么JDK中要设计两个数据类型来表示同一种数据?
在学习了面向对象技术之后,你能对上述问题给出一个较好解决方案来吗?
请以计算圆形、矩形和三角形三种几何图形的面积为例,列出关键代码或者绘出UML图来展示你的方案。
三 阅读程序题(每题3分,共12分)
说明:
请仔细阅读左栏的程序代码,将程序运行结果写在“运行结果”一栏。
程序一
public class Test {
一、判断题(正确的描述打钩,错误的打叉,每题1分,共10分)
1 抽象类中不可以有非抽象的方法。 (错)
2 如果将一个对象强制类型转换为一个不兼容的类型,将引发NullPointerException
异常。 (错)
3 Java中Object类是最顶层的类。 (对)
4 程序在编译通过以后,仍然可能出现运行时错误和逻辑错误。 (对)
4 Aobj=new A();
5 }
6 }
7 class A{
8 }
更正
(1)去掉final
(2)
去掉main()函数中的赋值语句,定义语句改为:
public static final A Aobj=new A();
程序二
01 public class Test {
02 public static void main(String[] args) {
}
catch(Exception ex) {
System.out.println("Exception:"+ex.getMessage());
}
}
}
运行结果
Go through finally code in fun2().
catch MyException object. Message:An MyException object is thrown in fun1().
03 System.out.println("你想说什么就说吧!");
04 }
05 }
06 class Dog extends Animal {
07 public void saySomething() {
08 System.out.println("我现在有了第二职业:捉耗子!");
09 }
10 }
03 MyClass obj=new MyClass();
04 +=",World!";
05 System.out.println();
06 }
07 }
08 class MyClass {
09 public String Info="Hello";
10 public MyClass(String Info)
2 什么叫多态?你是如何理解多态的?请设计一个简单的示例,展示多态的用法。
点评:
几乎所有的Java教材都要介绍多态的概念,但只有能用自己的语言说清楚,并能自己设计一个典型实例展示多态特性的,才算是真正弄明白了。
从试卷中发现,不少同学弄混了方法重载与方法覆盖,认为 “方法重载”就是多态。
3 在Java GUI程序中,布局管理器是一个很重要的概念。谈谈你对这个概念的理解,并进而回答以下问题:
5 可以通过javac来运行一个Java Application。 (错)
6 可以在子类构造函数中通过this关键字调用基类的构造函数。 (错)
7 Java语言是IBM公司设计的一种面向对象程序设计语言。(错)
8 一个Unicode字符占4个字节。 (错)
9 在循环语句中,使用continue;语句可以跳出循环。 (错)
}
finally {
System.out.println("Go through finally code in fun2().");
}
}
public static void main (String[] args) {
try {
fun2();
}
catch(MyException ex) {
System.out.println("MyException:"+ex.getMessage());
true
true
true
true
程序二
public class Test {
private static void printArray(int[] arr) {
for(int i=0;i< arr.length;i++)
System.out.print(arr[i]+",");
System.out.println("\n");
}
private static void fun2() throws MyException {
try {
fun1();
}
catch(NullPointerException ex) {
System.out.println("NullPointerException:"+ex.getMessage());
本题设计时应该将“平均值”改为求“数组元素的总和”,这样可以大大降低本题的难度,这是我设计试题时失误的地方。
六 编程题(共36分)
说明:
(1)编程题共分为两组:简单编程题与综合编程题。简单编程题不要求写出完整的可运行的程序。综合编程题要求写出的程序必须是可以通过编译的完整的程序。
(2)请在试卷后所附的答题纸上书写程序代码,注明题号。
(3)代码要书写规范,卷面整洁。
点评:
1 简单编程题(每题4分,共20分)
(1)编写代码生成10个位于[50,100]区间的整数。
点评:我本意是要求学生生成随机数,但题目没有强调是随机数,所以,这道题简直就是送分题,难度大大降低。
(2)编写一个方法,接收一个整数数组作为参数,此方法会找出其最大值、最小值和平均值。
要求使用递归方法实现。
点评:这道题看上去简单,但其实难度不小。
另外,你还记得JDK用于设计GUI(图形用户界面)程序,这两者有何区别?
你还用过其他的编程语言或开发工具设计GUI程序吗?如果让它们与Java进行对比,你觉得使用Java设计GUI程序的优点在哪,缺点在哪?
9 在面向对象程序中,实现代码复用主要有两种方式:继承和组合。
11 {
12 =Info;
13 }
14 }
更正
尝试调用默认构造函数。但在用户指定了一个构造函数之后,不再允许直接调用默认构造函数。
更正:
Test obj=new Test("Hello");
程序三
01 abstract class Animal {
02 public abstract void saySomething() {
请设计两段示例代码,分别展示出Java实现这两种方式的代码框架。
如果在某个实际开发场景中这两种方式都可用,你认为应该优先选择哪一种?原因?
10 各种类型的几何图形都有自己的面积计算公式,但在一个CAD(计算机辅助设计)软件中,图形的种类非常多,如果程序需要计算出任何一种图形的面积,最简单的想法是使用条件判断语句根据图形类型来选择相应的计算公式。然而,这种方法不太好,可能会导致嵌套层次很深的条件判断语句。另外,如果软件要扩充功能以支持新的图形种类,则又不得不修改调用不同公式计算图形面积的代码。
四、程序改错题(每题3分,共12分)
说明:
下述程序中都包含着错误而不能通过编译。请在右栏指出程序错误的原因(可指明行号),并修改程序使其可以通过编译。
程序一
1 public classMain{
2 public static final A Aobj=null;
3 public static void main(String[] args) {
System.out.println(new A());
}
}