Java面向对象模拟试题1Word文档下载推荐.docx
《Java面向对象模拟试题1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java面向对象模拟试题1Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
A());
}
classA
{
Java在运行上述代码时输出一个很奇异的结果:
@60aeb0
尝试解释一下可能的原因.
点评:
本题的关键在于虽然类A没有定义任何方法,但它隐含着从基类Object中继承了toString()方法。
答案必须点出这一结果是执行toString()方法得到的。
2
什么叫多态你是如何理解多态的请设计一个简单的示例,展示多态的用法。
几乎所有的Java教材都要介绍多态的概念,但只有能用自己的语言说清楚,并能自己设计一个典型实例展示多态特性的,才算是真正弄明白了。
从试卷中发现,不少同学弄混了方法重载与方法覆盖,认为“方法重载”就是多态。
3
在JavaGUI程序中,布局管理器是一个很重要的概念。
谈谈你对这个概念的理解,并进而回答以下问题:
如果要你开发出一个Windows资源管理器(图1),你将如何应用合适的“布局管理器”来实现其界面
图1Windows7中的资源管理器
请指明你在图1中的哪部分应用哪种布局管理器。
4int和Integer都可以代表一个整数,这两者在使用上有什么区别吗为什么JDK中要设计两个数据类型来表示同一种数据
5
JavaApplication的程序入口点为main()函数,其声明如下:
publicstaticvoidmain(String[]args)
请解释一下为何main()函数是公有的和静态的
6
抽象类与接口都不能直接用来创建对象,那么,这两者什么用彼此之间又有何区别
你认为在哪种场合应该用抽象类,哪种场合应该用接口在JDK中你能找到相应的实例吗如果能找得到,请分析一下JDK的设计者为何将它们设计为“抽象类(或接口)”。
7如何判断函数构成重载关系挑出以下函数中不构成重载关系的函数,指明它违反了哪个判断准则。
(1)voidmyFunc();
(2)intmyFunc(intx,inty);
(3)intmyFunc(stringstr,stringstr2);
(4)stringmyFunc(intx,inty);
另外,你还记得JDK中有哪个类拥有重载的方法吗列举一两个。
8Swing和AWT都可以用于设计GUI(图形用户界面)程序,这两者有何区别
你还用过其他的编程语言或开发工具设计GUI程序吗如果让它们与Java进行对比,你觉得使用Java设计GUI程序的优点在哪,缺点在哪
9
在面向对象程序中,实现代码复用主要有两种方式:
继承和组合。
请设计两段示例代码,分别展示出Java实现这两种方式的代码框架。
如果在某个实际开发场景中这两种方式都可用,你认为应该优先选择哪一种原因
10各种类型的几何图形都有自己的面积计算公式,但在一个CAD(计算机辅助设计)软件中,图形的种类非常多,如果程序需要计算出任何一种图形的面积,最简单的想法是使用条件判断语句根据图形类型来选择相应的计算公式。
然而,这种方法不太好,可能会导致嵌套层次很深的条件判断语句。
另外,如果软件要扩充功能以支持新的图形种类,则又不得不修改调用不同公式计算图形面积的代码。
在学习了面向对象技术之后,你能对上述问题给出一个较好解决方案来吗
请以计算圆形、矩形和三角形三种几何图形的面积为例,列出关键代码或者绘出UML图来展示你的方案。
三阅读程序题(每题3分,共12分)
说明:
请仔细阅读左栏的程序代码,将程序运行结果写在“运行结果”一栏。
程序一
publicclassTest{
publicstaticvoidmain(String[]args){
Strings1=newString("
Hello"
);
Strings2="
;
Strings3="
Strings4=s1;
}
运行结果
false
true
程序二
privatestaticvoidprintArray(int[]arr)
for(inti=0;
i<
;
i++)
"
"
\n"
privatestaticvoidchangeValue(intvalue){
value*=2;
privatestaticvoidchangeValue(int[]arr){
arr[i]*=2;
int[]arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
1,2,3,4,5,
2,4,6,8,10,
程序三
classMyExceptionextendsException{
publicMyException(Stringmessage){
super(message);
privatestaticvoidfun1()throwsMyException{
thrownewMyException("
AnMyExceptionobjectisthrowninfun1()."
}
privatestaticvoidfun2()throwsMyException{
try
fun1();
catch(NullPointerExceptionex)
NullPointerException:
"
+());
finally
Gothroughfinallycodeinfun2()."
try{
fun2();
catch(MyExceptionex)
MyException:
catch(Exceptionex)
Exception:
Gothroughfinallycodeinfun2().
catchMyExceptionobject.Message:
AnMyExceptionobjectisthrowninfun1().
四、程序改错题(每题3分,共12分)
下述程序中都包含着错误而不能通过编译。
请在右栏指出程序错误的原因(可指明行号),并修改程序使其可以通过编译。
1publicclassMain{
publicstaticfinalAAobj=null;
4
Aobj=newA();
6}
7classA{
8}
更正
(1)去掉final
(2)
去掉main()函数中的赋值语句,定义语句改为:
publicstaticfinalAAobj=newA();
01publicclassTest{
02
03
MyClassobj=newMyClass();
04
+="
World!
05
07}
08classMyClass{
09
publicStringInfo="
10
publicMyClass(StringInfo)
11
12
=Info;
13
14}
尝试调用默认构造函数。
但在用户指定了一个构造函数之后,不再允许直接调用默认构造函数。
更正:
Testobj=newTest("
01abstractclassAnimal{
02publicabstractvoidsaySomething()
你想说什么就说吧!
05}
06classDogextendsAnimal{
07publicvoidsaySomething(){
08
我现在有了第二职业:
捉耗子!
10}
11publicclassTest{
Animalani=newDog();
14
();
15}
16}
03句去掉abstract。
或者去掉Animal类saySomething方法中的所有实现代码。
六编程题(共36分)
(1)编程题共分为两组:
简单编程题与综合编程题。
简单编程题不要求写出完整的可运行的程序。
综合编程题要求写出的程序必须是可以通过编译的完整的程序。
(2)请在试卷后所附的答题纸上书写程序代码,注明题号。
(3)代码要书写规范,卷面整洁。
1简单编程题(每题4分,共20分)
(1)编写代码生成10个位于[50,100]区间的整数。
点评:
我本意是要求学生生成随机数,但题目没有强调是随机数,所以,这道题简直就是送分题,难度大大降低。
(2)编写一个方法,接收一个整数数组作为参数,此方法会找出其最大值、最小值和平均值。
要求使用递归方法实现。
这道题看上去简单,但其实难度不小。
问题的关键在于如何在方法的递归调用中暂存数据。
这有两种方式实现:
第1种是将最大值、最小值和平均值作为类的字段,而将求值的递归函数作为类中的方法,在方法的每次递归调用中直接修改类中的相应字段。
第2种是创建一个新类,为其设计几个字段来代表最大值、最小值、总和,再提供一个公有方法用于得到平均值,然后将其作为递归函数的一个参数传送。
本题设计时应该将“平均值”改为求“数组元素的总和”,这样可以大大降低本题的难度,这是我设计试题时失误的地方。
(3)如果你设计的一个类只允许创建一个实例,你会如何设计它写出类的框架代码。
如果希望你设计的类最多只能创建3个实例,你又该如何修改你的代码
再扩充一下:
如果要求你设计一个类,在程序运行时才决定它最多能创建的实例个数,你打算如何设计它
(4)为了按内容来比较属于同一类型的两个对象的“大小”,JDK中定义了一个Comparable接口用于供程序员自定义两个对象的比较规则,此接口声明如下:
publicinterfaceComparable
intcompareTo(Objectother);
实现了此接口的两个对象(不妨称之为X和Y)可以相互比较:
两对象X和Y相等,compareTo()方法返回0,X小于Y时compareTo()方法返回一个负数(通常设为-1),X大于Y时返回正数(通常设为1)。
请编写一个方法,接收一个Comparable对象数组作为参数,然后,此方法对此数组中的对象进行升序排列。
(5)从1到100的100个整数,以某种随机的方式进行排列,然将它们挨个放到一个整数数组中,此数组只能容纳99个整数,因此,必定会有一个整数会丢弃。
编写一个函数,接收一个包容99个整数的数组作为参数,找出被丢弃的哪个整数。
另外,你如何保证此函数接收的数组满足以下预设的条件
1)数组包容99个整数
2)数组中的整数均在[1,100]的范围之内
3)数组中不包含两个相同的整数
如果函数接收到的数据不满足上述要求,你打算如何处理写出你的处理策略。
这道题其实来自于软件公司的面试题。
大多数同学都能顺利地回答第一问,虽然算法不优化。
第2问其实是了解一下学生是否知道如何实施“防卫型”编码,仅有少数学生给出了可行的实现方案。
2综合编程题(16分)
以下为一棵有序二叉树:
图2
请用Java实现上述数据结构,并编写一个函数按前序方式遍历此树的所有节点。
(1)程序必须为完整的可编译运行的JavaApplication。
(2)假设树中每个节点中都保存着一个整数,代表此节点所保存的数据。
(3)所谓前序遍历,是指从树的根节点开始,先输出根节点保存的数据,然后输出左子树根节点保存的数据,再输出右子树根节点保存的数据,由此不断递归,当访问完树中的所有节点时,遍历完成。
(4)在main()函数中编写示例代码创建上图中的二叉树,调用写好的函数,输出前序遍历结果:
1,2,3,4,5
(5)请遵循Java软件工程师的代码开发规范:
在你写的代码中加上注释,并注意变量和类的名字要望名知义,必要的缩进和空行等,让你的代码规范易读。
评分标准:
(1)能以面向对象的思想用Java实现“二叉有序树”这一数据结构(6分)
(2)能编写出前序遍历树的函数(6分)
(3)在main()中能写出示例代码完成所要求的工作:
创建树和输出遍历结果(4分)