诚信应考 考出水平 考出风格 浙江大学城市学院 2011 — 2012 学年第二学期期中试卷 《 面向对象程序设计》 开课单位: 计算分院 ;考试形式:闭卷;考试时间:_2012_年_4_月_7_日; 所需时间: 120 分钟 题序 一 二 三 四 五 总 分 得分 评卷人 一._填空题_(本大题共_28个填空项,每个填空项1分,共28分) 1. 保存Java 源代码的文件扩展名是 .java ,类文件的扩展名是 .class 。 2. Java 编译器将java 源代码编译成具体CPU 的机器指令,这句话是否正确?答: 不正确 。 3. Java 有8种基本数据类型,其中占用4个字节的整型是 int ,占用4个字节的浮点型是 float 。 4. Java 语言中,表达式 (3 > 2) 的值是 true ,表达式 (2 > 3) 的值是 false 。 5. Java SDK 的bin 子目录一般要添加到哪个环境变量中?答:
path 。 6. 以下代码定义了字符变量c 和d : char c = 'A'; char d = '啊';
得分 年级:__
__
__
__
__
__
_
专业:__
__
__
__
__
__
__
__
___
__
班级:__
__
__
__
__
__
__
__
_ 学号:___
__
__
__
__
__
__
姓名:_
__
__
__
__
__
__
__
__
_
……
…
…
……
…
…
…
…
…
…
…
…
……
…
…
…
…
…
…
.
.
装
…
…
…
…
…
……
.
订…
…
…
…
…
…
….
.
线
…
…
…
…
…
…
…
……
…
…
…
…
…
…
…
…
…
…
…
…
那么字符变量c占用2个字节,字符变量d占用2个字节。
7.Java的char类型使用什么编码?答:Unicode 。从理论上讲,char类型可以表示多少个字符?答:65536(即216)个。
8.是否可以在同一个Java源代码文件中定义多个public类。答:不可以。9.假如某个类的名字是T est,那么它的构造器的名称是T est 。
10.如果某个类存在多个构造器,那么这些构造器构成一种多态形式。这种多态叫做构造器的重载多态。
11.Math类中定义了一个产生随机数的静态方法random,请问如何调用它来获得一个随机数?答:Math.random() 。
12.Math类中定义了一个静态域PI,表示圆周率,如果计算一个半径为8的圆的面积,那么它的表达式是8*8*Math.PI 。
13.代码System.out.println(1+2+"3"); 执行之后会在屏幕上输出33 。14.被final修饰的变量有何特点?答:赋值之后不可再次赋值。15.Java的垃圾回收机制,能够缓解什么问题?缓解内存泄露问题。
16.Java的时间就是一个整数。一天时间的毫秒数是 24*60*60*1000 。
17.如果希望得到当前系统时间的毫秒数,那么应该优先使用使用Calendar还是Date?答:Date 。如果希望得到2010年1月1日的时间毫秒数,应该优先使用Calendar还是Date?答: Calendar 。
18.String类和StringBuffer类的最主要区别是: String对象的内容是只读的,而StringBuffer对象的内容是可以修改的。
19.假设a是一个int型数组变量(指向某个具体的数组),那么这个数组的元素个数是:
a.length 。
20.假设str是一个String类型变量(指向某个字符串对象),那么这个字符串的字符个数是:str.length() 。
21.Java提供异常处理机制,常用的结构是try-catch结构。对于可能出现异常的功能代码应该写在哪个代码块中?答: try代码块。用于处理相关异常的处理代码应该写在哪个代码块中?答: catch代码块。
二.问答题_(本大题共2题,每题5分,共10分。)
1. 类和对象的关系是什么?请举例说明?
要点:类是对象的模板、类型,对象是类的实例。
举例:略。
2. 简述Java 的平台无关性特点(与C 语言比较,并说明Java 虚拟机所起的作用)。
要点:Java 用统一规范的Java 虚拟机来屏蔽底层软硬件平台的差异(包括操作系统和处理器的各种差异),从而使得编译得到的类文件可以在不同平台上的Java 虚拟机上运行。标准C 的可移植性较好,但是编译得到的可执行程序很难直接在其他异构的软硬件平台上执行。
三.改错题_(本大题共9题,每题3分,共27分。) 在每小题的右侧空白处写明错误原因,并给出改正方法
1.
public class T est {
public static void main(String[] args) {
int a,b ;
System.out.print(a+b);
} }
错误:执行System.out.print(a+b);时,局部变量a 和b 还未初始化
改正:在读取a 和b 之前先对它们赋值,比如改为:
public class T est {
public static void main(String[] args) {
int a = 0,b = 0 ; //注意此处
System.out.print(a+b);
}
}
2.
public class T est {
public static void main(String[] args) {
char c = 0x66;
float x = 1.23;
}
} 得分
得分
错误:float x = 1.23;出错,不能将double型的1.23赋值给float型变量x。
改正:可以将float x = 1.23;改为float x = 1.23F;,或者改为double x = 1.23;
3.
public class T est {
public static void main(String[] args) {
byte x = 88;
short y = 10;
y = x + y;
}
}
错误:y = x + y;出错,x+y的值类型为int型,不能自动转换类型为short型(y是short型)改正:将y = x + y;改为y = (short) (x + y);,或者将y改为int类型。
4.
class A{
int x,y;
x = 10;
A(){ y = 88; }
}
错误:x = 10;出错。在类体中不能添加独立的赋值语句。
改正:可以将程序改为:
class A{
int x=10,y;
A(){ y = 88; }
}
5.
class T est{
void abc(){
System.out.println("HelloWorld");
}
public static void main(String[] args) {
abc();
}
}
错误:abc方法不是静态方法,不能在静态方法main中直接调用abc。
改正:将abc方法改为静态方法,即添加static修饰,比如:
static void abc(){
System.out.println("HelloWorld");
}
6.
class T est{
public static void main(S tring[] args){
final int i = 0;
int sum = 0;
for(;i<100; i++)
sum = sum + i;
System.out.println(sum);
}
}
错误:i是final变量,无法在后续代码中对其重复赋值。
改正:去除变量i的final修饰。
7.
class A{
int a;
void A(int c){ a = c; }
}
public class T est{
public static void main(S tring args[]){
A obj=new A(100);
obj.a=10;
System.out.println(obj.a);
}
}
错误:void A(int c){ a = c; }所定义的不是合法的构造器,所以导致new A(100)出错。改正:将void A(int c){ a = c; }修改为A(int c){ a = c; },即删除void。
8.
class Test{
public static void main(String[] args) {
int 数字1 = '啊';
int 2ab = 1234;
int c = 数字1 + 2ab;
System.out.println(c);
}
}
错误:2ab不是一个合法的标识符(不能以数字作为首字母)
改正:将2ab修改为合法的标识符,比如将2ab修改为ab。
9.
public class ArrayConcept {
public static void main(String[] args) {
int[][] arr = new int[5][];
for(int i=0;i for(int j=0;j arr[i][j] = i*j; System.out.print(arr[i][j] + "\t"); } System.out.println(); } } } 错误:new int[5][];仅仅创建二维数组的一维,因此程序运行时,arr[i].length会出现错误。改正:将new int[5][];改为new int[5][];,或者在for循环中动态创建第二维数组。 四.程序阅读题(本大题共6题,每3分,共18分) 得分 请在每题的右侧空白处写出程序运行结果 1.执行下面的T est类,请写出运行结果。 class T est{ public static void main(String[] args){ System.out.println(-10>>10); System.out.println(10>>10); } } 运行结果: -1 2.执行下面的T est类,请写出运行结果。 import java.util.*; public class T est{ public static void main(String[] args) { int a = (int)123.45; System.out.println(a); byte b = (byte)0x12121212; System.out.println(b); byte c = (byte)255; System.out.println(c); } } 运行结果: 123 18 -1 3.执行下面的T est类,请写出运行结果。 public class T est{ public static void main(String[] args) { int x = 1, z = 2; if(false&&(x == (z = 1))) System.out.println(x); else System.out.println(z); z = 2; x =1; if(true&&(x == (z = 1))&&false) System.out.println(x); else System.out.println(z); x=0; z = 2; if(true||(x == (z = 1))) System.out.println(z); x=0; z = 2; if(false||(x == (z =1))||true) System.out.println(z); } } 运行结果: 2 1 2 1 4.执行下面的T est类,请写出运行结果。 class A{ int x = 8; static int y = 88; A(){ x= 0; y = 0;} A(int xx, int yy){ x = xx; y= yy; } } class T est{ public static void main(String[] args){ A a = new A(10,20); A b = new A(); System.out.println(a.x); System.out.println(a.y); System.out.println(b.x); System.out.println(b.y); } } 运行结果: 10 5.执行下面的T est类,请写出运行结果。 class Test{ public static void main(String[] args){ String s1="Hello"; String s2="Hello"; String s3=new String("hELLO"); if(s1.equalsIgnoreCase(s3)){ System.out.println("不相等"); }else{ System.out.println("相等"); } if(s1.equals(s3)){ System.out.println("不相等"); }else{ System.out.println("相等"); } if(s1 != s2){ System.out.println("不相等"); }else{ System.out.println("相等"); } } } 运行结果: 不相等 相等 相等 6.执行下面的T est类,请写出运行结果。 public class Test{ public static void main(String[] args) { int[] arr1 = {1,3,5,7}; int[] arr2 = {2,4,6,8}; arr1[2] = 9; arr2[2] = 10; arr1 = arr2; for(int i=0;i System.out.print(arr1[i] + "\t"); } } 运行结果: 2 4 10 8 五.编程题(本大题共_3_题,第 2 题7分,第1、3题均为5分,共_17分。) 得分 1.编写一个Java应用程序类。要求如下: ●类名:SumApplication,该类为public类。 ●编写SumApplication的main主方法,统计输入的若干个int类型非负奇数之和,即输入若 干个非负整数,然后对其中的奇数求和,最后输出求和的结果(以输入某个负数为结束条 件)。 比如,这个程序可以有以下运行效果: 请输入数字(以负数结束):1 2 3 4 5 6 -1 这些数字中的奇数之和是:9 提示:Scanner scanner = new Scanner(System.in); //创建处理标准输入的Scanner对象scanner.hasNextInt() 用于判断是否有int类型数据输入 scanner.nextInt() 用于读取输入的int型数字 import java.util.Scanner; public class SumApplication { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入数字(以负数结束):"); int sum = 0; while(scanner.hasNextInt()){ int i = scanner.nextInt(); if(i < 0 ) break; if(i%2 == 1) sum = sum + i; } System.out.println("这些数字中的奇数之和是:"+sum); } } 2、编写一个矩形类Rectangle,要求如下: ●类名:Rectangle,该类是public类。 ●该类有以下两个实例变量: ?length:表示矩形对象的长,数据类型是double型; ?width:表示矩形对象的宽,数据类型是double型。 ●该类定义以下两个构造器: ?无参数构造器:功能是将矩形对象的长和宽分别初始化为1.0; ?有参数构造器:要求有两个形式参数(这两个参数的类型都是double型,参数名必须 分别为length和width),功能是将参数变量length和width的值赋值给实例变量length 和width。 ●该类定义以下两个实例方法: ?perimeter方法:该方法没有形式参数,功能是返回矩形对象的周长(返回类型是 double)。 ?area方法:该方法没有形式参数,功能是返回矩形对象的面积(返回类型是double)。 public class Rectangle { double length,width; Rectangle(){ this.length = 1.0; this.width = 1.0; } Rectangle(double length,double width){ this.length = length; this.width = width; } double perimeter(){ return (this.width+this.length)*2; } double area(){ return this.width * this.length; } } 3. 接上题,编写一个测试类RectangleT est,要求如下: ●类名:RectangleT est,该类为public类 ●编写RectangleT est类的main主方法,功能要求如下: ?用Rectangle类的无参数构造器创建一个对象,并调用这个对象的perimeter和area 方法获得这个对象的周长和面积,然后在屏幕上输出这个对象的周长和面积。 ?用Rectangle类的有参数构造器创建一个对象(length和width参数的值分别是100和 50),并调用这个对象的p erimeter和area方法获得这个对象的周长和面积,然后在屏幕上输出这个对象的周长和面积。 public class RectangleT est { public static void main(String[] args) { Rectangle rect1 = new Rectangle(); System.out.println("第一个矩形对象的周长是:"+rect1.perimeter()+",面积是:"+rect1.area()); Rectangle rect2 = new Rectangle(100,50); System.out.println("第一个矩形对象的周长是:"+rect2.perimeter()+",面积是:"+rect2.area()); } }