java考试习题6.doc_第1页
java考试习题6.doc_第2页
java考试习题6.doc_第3页
java考试习题6.doc_第4页
java考试习题6.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、判断题1 抽象类中不可以有非抽象的方法。 (错) 2 如果将一个对象强制类型转换为一个不兼容的类型,将引发NullPointerException 异常。 (错) 3 Java中Object类是最顶层的类。(对) 4 程序在编译通过以后,仍然可能出现运行时错误和逻辑错误。 (对) 5 可以通过javac来运行一个Java Application。 (错) 6 可以在子类构造函数中通过this关键字调用基类的构造函数。 (错) 7 Java语言是IBM公司设计的一种面向对象程序设计语言。(错) 8 一个Unicode字符占4个字节。 (错) 9 在循环语句中,使用continue;语句可以跳出循环。 (错) 10 在Java Application中如果没有定义main()方法,则程序不能编译。(错) 二、简答题1 请看以下代码: package mytest; public class Main public static void main(String args) System.out.println(new A(); class A Java在运行上述代码时输出一个很奇异的结果: 尝试解释一下可能的原因. 2 什么叫多态?你是如何理解多态的?请设计一个简单的示例,展示多态的用法。 3 在Java GUI程序中,布局管理器是一个很重要的概念。谈谈你对这个概念的理解,并进而回答以下问题: 如果要你开发出一个Windows资源管理器(图 1),你将如何应用合适的“布局管理器”来实现其界面? 4 int和Integer都可以代表一个整数,这两者在使用上有什么区别吗?为什么JDK中要设计两个数据类型来表示同一种数据? 5 Java Application的程序入口点为main()函数,其声明如下: public static void main (String args) 请解释一下为何main()函数是公有的和静态的? 6 抽象类与接口都不能直接用来创建对象,那么,这两者什么用?彼此之间又有何区别? 你认为在哪种场合应该用抽象类,哪种场合应该用接口?在JDK中你能找到相应的实例吗?如果能找得到,请分析一下JDK的设计者为何将它们设计为“抽象类(或接口)”。 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); 另外,你还记得JDK中有哪个类拥有重载的方法吗?列举一两个。 8 Swing和AWT都可以用于设计GUI(图形用户界面)程序,这两者有何区别? 你还用过其他的编程语言或开发工具设计GUI程序吗?如果让它们与Java进行对比,你觉得使用Java设计GUI程序的优点在哪,缺点在哪? 9 在面向对象程序中,实现代码复用主要有两种方式:继承和组合。 请设计两段示例代码,分别展示出Java实现这两种方式的代码框架。 如果在某个实际开发场景中这两种方式都可用,你认为应该优先选择哪一种?原因? 10 各种类型的几何图形都有自己的面积计算公式,但在一个CAD(计算机辅助设计)软件中,图形的种类非常多,如果程序需要计算出任何一种图形的面积,最简单的想法是使用条件判断语句根据图形类型来选择相应的计算公式。然而,这种方法不太好,可能会导致嵌套层次很深的条件判断语句。另外,如果软件要扩充功能以支持新的图形种类,则又不得不修改调用不同公式计算图形面积的代码。 在学习了面向对象技术之后,你能对上述问题给出一个较好解决方案来吗? 请以计算圆形、矩形和三角形三种几何图形的面积为例,列出关键代码或者绘出UML图来展示你的方案。 三阅读程序题(每题3分,共12分) 说明:请仔细阅读左栏的程序代码,将程序运行结果写在“运行结果”一栏。 程序一public class Test public static void main (String args) String s1=new String(Hello); String s2=Hello; String s3=Hello; System.out.println(s1=s2); System.out.println(s1.equals(s2); System.out.println(s2=s3); System.out.println(s2.equals(s3); String s4=s1; System.out.println(s1=s4); System.out.println(s1.equals(s4); 运行结果falsetruetruetruetruetrue 程序二public class Test private static void printArray(int arr) for(int i=0;i arr.length;i+) System.out.print(arri+,); System.out.println( ); private static void changeValue(int value) value*=2; private static void changeValue(int arr) for(int i=0;iarr.length;i+) arri*=2; public static void main (String args) int arr=1,2,3,4,5; changeValue(arr0); printArray(arr); changeValue(arr); printArray(arr); 运行结果 1,2,3,4,5, 2,4,6,8,10, 程序三class MyException extends Exception 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().); private static void fun2() throws MyException try fun1(); catch(NullPointerException ex) System.out.println(NullPointerException:+ex.getMessage(); 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(); 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(). 四、程序改错题(每题3分,共12分) 说明: 下述程序中都包含着错误而不能通过编译。请在右栏指出程序错误的原因(可指明行号),并修改程序使其可以通过编译。程序一1 public class Main 2 public static final A Aobj=null;3 public static void main(String args) 4 Aobj=new A();5 6 7 class A8 更正 (1)去掉final(2)去掉main()函数中的赋值语句,定义语句改为: public static final A Aobj=new A(); 程序二01 public class Test 02 public static void main(String args) 03 MyClass obj=new MyClass();04 obj.Info+=,World!;05 System.out.println(obj.Info);06 07 08 class MyClass 09 public String Info=Hello;10 public MyClass(String Info)11 12 this.Info=Info;13 14 更正尝试调用默认构造函数。但在用户指定了一个构造函数之后,不再允许直接调用默认构造函数。 更正: Test obj=new Test(Hello); 程序三01 abstract class Animal 02 public abstract void saySomething() 03 System.out.println(你想说什么就说吧!);04 05 06 class Dog extends Animal 07 public void saySomething() 08 System.out.println(我现在有了第二职业:捉耗子!);09 10 11 public class Test 12 public static void main (String args) 13 Animal ani=new Dog();14 ani.saySomething();15 16 更正03句去掉abstract。或者去掉Animal类saySomething方法中的所有实现代码。 六编程题(共36分)1 简单编程题(1)编写代码生成100个位于20,1000区间的整数。 (2)编写一个方法,接收一个整数数组作为参数,此方法会找出其最大值、最小值和平均值。 要求使用递归方法实现。 点评:这道题看上去简单,但其实难度不小。 问题的关键在于如何在方法的递归调用中暂存数据。这有两种方式实现:第1种是将最大值、最小值和平均值作为类的字段,而将求值的递归函数作为类中的方法,在方法的每次递归调用中直接修改类中的相应字段。 第2种是创建一个新类,为其设计几个字段来代表最大值、最小值、总和,再提供一个公有方法用于得到平均值,然后将其作为递归函数的一个参数传送。 本题设计时应该将“平均值”改为求“数组元素的总和”,这样可以大大降低本题的难度,这是我设计试题时失误的地方。(3)如果你设计的一个类只允许创建一个实例,你会如何设计它?写出类的框架代码。 如果希望你设计的类最多只能创建3个实例,你又该如何修改你的代码? 再扩充一下: 如果要求你设计一个类,在程序运行时才决定它最多能创建的实例个数,你打算如何设计它? (4)为了按内容来比较属于同一类型的两个对象的“大小”,JDK中定义了一个Comparable接口用于供程序员自定义两个对象的比较规则,此接口声明如下: public interface Comparable int compareTo(Object other); 实现了此接口的两个对象(不妨称之为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 综合编程题(16分) 以下为一棵有序二叉树: 图 2 请用Java实现上述数据结构,并编写一个函数按前序方式遍历此树的所有节点。 说明:(1)程序必须为完整的可编译运行的Java Application。(2)假设树中每个节点中都保存着一个整数,代表此节点所保存的数据。(3)所谓前序遍历,是指从树的根节点开始,先输出根节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论