第三章测验
一、单选题(每题2分)
1. Person类的下列方法中,_______________将覆盖其父类的equals(…)方法。
A. public boolean equals(Person p)
B. public Boolean equals(Object obj)
C. public boolean equals(Object obj)
D. boolean equals(Object obj)
2. 【第6版实验3-6】replaceAll(objs[], key, x)方法调用,替换Object实例。
已知
//将objs对象数组中所有与key匹配的对象替换为x
public static void replaceAll(Object[] objs, Object key, Object x)
替换Object实例的调用语句如下:
Object[] objs={"xyz",new Object()};
ObjectArray.printlnBracket(objs);
Object key=new Object(), x="abc";
ObjectArray.replaceAll(objs, key, x);
ObjectArray.printlnBracket(objs);
程序运行结果如下。
{xyz, java.lang.Object@378bf509}
____________________________
替换后的程序运行结果是_____________。
A. {xyz, java.lang.Object@378bf509}
B. {abc, java.lang.Object@378bf509}
C. {xyz, abc}
D. {xyz, null}
二、多选题(每题3分)
3. 已知Person类声明older(Person)方法,Student是Person的子类,声明以下对象:
Object obj=new Person(…);
Person p=new Person(…);
Student s1=new Student(…), s2=new Student(…);
则以下调用正确的有_________。【多选题】
A. s1.older(p)
B. s1.older(s2)
C. p.older(s1)
D. p.older(obj)
4. 在main()方法中,以下声明错误的有____________。【多选题】
A. final int i;
B. private int i=0;
C. protected int i;
D. static int i=0;
5. 一个类能够访问在其他包中的父类声明为___________权限的成员。【多选题】
A. public B. 缺省 C. protected D. private
6. 以下Student类声明正确的是____________。【多选题】
A. final class Student extends Person,Object
B. abstract class Student extends Person
C. public class Student extends Person
D. class Student extends Person
7. 设Student类声明继承Person类,以下声明正确的是________________。【多选题】
A. Person per=new Student();
B. Object obj=new Person();
C. Person per=new Object();
D. Object obj=new Student();
8. 设Person类声明如下:
public class Person
{
String name;
int age;
}
下列Person类构造方法中,声明正确的有___________。【多选题】
A. public Person(String name)
B. public Person()
C. public Person(Person per)
D. public Person(String name, int age)
9. Person、Student类声明如下:
public class Person
{
private String name;
public Person() //方法体省略
public Person(String name) //方法体省略
public String toString() //方法体省略
}
public class Student extends Person
在Student类中以下引用正确的是______。【多选题】
A. super.toString()
B. super(name)
C. super.name
D. super()
10. 以下声明方法体省略,其中正确的有_____________。【多选题】
A.
public abstract class ClosedFigure
{
public abstract double area();
}
public class Rectangle extends ClosedFigure
{
public double area()
}
B.
public abstract class Figure
{
public Point point1;
protected Figure(Point point1)
public String toString()
}
C.
public class ClosedFigure
{
public abstract double area();
}
D.
public abstract class ClosedFigure
{
public abstract double area();
}
public class Rectangle extends ClosedFigure
{
public Rectangle()
}
11. 已知ClosedFigure、Rectangle等类声明如下:
public class Line
public abstract class ClosedFigure
public class Rectangle extends ClosedFigure
public class Square extends Rectangle
以下语句中,正确的是____________。【多选题】
A. ClosedFigure fig=new ClosedFigure();
B. ClosedFigure fig=new Square();
C. ClosedFigure fig=new Rectangle();
D. ClosedFigure fig=new Object();
12. 以下声明正确的有_____________。【多选题】
A. final class Math
B. final int max=100;
C. final int i;
D. final void abs()
13. 以下声明方法体省略,其中正确的有_____________。【多选题】
A.
public class Ellipse
public final class Circle extends Ellipse
B.
public final class Ellipse
public class Circle extends Ellipse
C.
public class Ellipse
{ public final double area()
}
public final class Circle extends Ellipse
D.
public class Ellipse
{ public final double area()
}
public class Circle extends Ellipse
{ public double area()
}
三、判断题(每题2分)
14. 以下MyDate类构造方法声明正确?错误?
public class MyDate
{
private int year, month, day;
public MyDate(int year, int month=1, int day=1)
}
A. 正确 B. 错误
15. MyDate类声明如下。
public class MyDate
{
private int year, month, day;
public MyDate(int year, int month, int day) //方法体省略
public static void main(String args[])
{
MyDate d1,d2=……;
System.out.println("d1:"+d1.toString()+",d2: "+d2+",d1>=d2?"+(d1>=d2));
}
}
其中,d1>=d2表达式正确?错误?
A. 正确 B. 错误
四、填空题(每题2分)
16. Person类的默认构造方法声明是____________。
【约定答案格式】方法声明采用一个空格作为单词的分隔符,不要加多余空格。
17. 一个类如果没有声明父类,那么它的父类是_________________________类。
18. Java为Person类提供的默认构造方法声明如下:
public Person()
{
________________;
}
19.new Object() instanceof Person运算结果是_________________。
20. 设Student是Person的子类,调用语句如下:
Student s=new Student("胡小东", new MyDate(1982,4,3), "计算机");
Person p=s;
System.out.println("p:"+p.toString()+",s:"+s.toString()+",p==s?"+(p==s));
其中,p==s的运算结果是________________。
21. 如果Person类声明以下方法,则它们是_______________关系。
public boolean equals(Person per)
public boolean equals(Object obj)
22. 如果Person类声明equals(Person)以下方法:
public boolean equals(Person per) //算法逐域比较各成员变量是否相等,方法体见教材
调用语句如下:
Person per1 = new Person("李小明", new MyDate(1994,3,15));
Person per2 = new Person(per1);
per1.equals(per2) //执行在______类声明的equals(…)方法,运算结果是____________
Object obj = per2;
per1.equals(obj) //执行在______类声明的equals(…)方法,运算结果是____________
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中的一种进行分隔,不能两者混用。
23. 已知Person类覆盖equals(Object)方法,方法体见教材。调用语句如下。
Person per = new Person("李小明", new MyDate(2004,9,1));
Object obj = new Person(per);
obj.equals(per) //运算结果是____________
obj = new Object();
obj.equals(per) //运算结果是____________
per.equals(obj) //运算结果是____________
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中一种进行分隔,不能两者混用。
24. 已知Student类覆盖Person类的equals(Object)方法,方法体见教材。调用语句如下:
Person per = new Person("李小明", new MyDate(2004,9,1));
Student stu1 = new Student(per, "计算机"), stu2 = new Student(per, "计算机");
per.equals(stu1) //①运算结果是____________
stu1.equals(per) //②运算结果是____________
stu2.equals(stu1) //③运算结果是____________
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中的一种进行分隔,不能两者混用。
25. 【第6版实验3-6】replaceAll(objs[], key, x)方法设计,程序填空。
//将objs对象数组中所有与key匹配的对象替换为x,当x==null时,即删除匹配元素算法
public static void replaceAll(Object objs[], Object key, Object x)
{
if(objs!=null && key!=null)
for(int i=0; i<objs.length; i++)
if(_________________)
objs[i]=x;
}
26. 【第6版实验3-6】查找和替换方法调用,替换MyDate实例。
已知
//顺序查找objs对象数组中首次出现的与key相等元素,若查找成功返回元素,否则返回null
public static Object search(Object[] objs, Object key)
//将objs对象数组中所有与key匹配的对象替换为x
public static void replaceAll(Object[] objs, Object key, Object x)
替换MyDate实例的调用语句如下:
Object[] objs={new MyDate(2024,5,1),new MyDate(2024,5,1)};
ObjectArray.printlnBracket(objs);
Object key=new MyDate(2024,5,1), x="abc";
Object find = ObjectArray.search(objs, key);
if(find!=null)
((MyDate)find).tomorrow();
ObjectArray.replaceAll(objs, key, x);
ObjectArray.printlnBracket(objs);
程序运行结果如下,填空。
{2024年05月01日, 2024年05月01日}
___________________________________
27. 【第6版实验题3-1】交换变量方法的问题讨论,理解Java对象的引用模型。
声明方法如下:
public static void swap(Object x, Object y)
{ Object temp=x;
x=y;
y=temp;
}
调用语句如下:
String str1 = "abc";
String str2 = "xyz";
swap(str1, str2);
【问】执行上述调用语句后,str1="",str2=""。
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中的一种进行分隔,不能两者混用。
28. 【第6版实验题3-1】交换变量方法的问题讨论,理解Java对象的引用模型。
声明方法如下:
//交换objs数组第i、j元素值,数组元素类型是引用类型
public static void swap(Object[]objs, int i, int j)
{
if(objs!=null && i>=0 && i<objs.length && j>=0 && j<objs.length && i!=j)
{
Object temp = objs[j];
objs[j] = objs[i];
objs[i] = temp;
}
}
调用语句如下:
Integer[] values={1,2,3,4,5};
swap(values,1,3);
【问】执行上述调用语句后,values[1]=,values[3]=。
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中的一种进行分隔,不能两者混用。
29. 已知Student类继承Person类的equals(Object)方法,方法体见教材。调用语句如下:
Person per = new Person("李小明", new MyDate(2004,9,1));
Student stu1 = new Student(per, "计算机"), stu2 = new Student(per, "通信工程");
per.equals(stu1) //运算结果是____________
stu1.equals(per) //运算结果是____________
stu2.equals(stu1) //运算结果是____________
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中一种进行分隔,不能两者混用。
30. Person类的getAge(year)方法填空。
public class MyDate
{
private int year, month, day;
public int getYear()
{
return this.year;
}
}
public class Person
{
public MyDate birthdate;
//返回当前对象在year年份的年龄
public int getAge(int year)
{
return ____________________;
}
}
【约定答案格式】表达式中皆为英文半角符号,算术表达式中不加空格。
31. Person类的older(Person)方法填空。
public class MyDate
{
private int year, month, day;
public int getYear()
{
return this.year;
}
}
public class Person
{
public MyDate birthdate;
//返回this与per对象出生年份的差值
public int older(Person per)
{
return ____________________;
}
}
【约定答案格式】表达式中皆为英文半角符号,算术表达式中不加空格。
32. 已知Person类声明以下成员方法:
public int getAge() //返回this对象今年的年龄
【第6版实验3-6】实现PersonArray类声明的以下方法。
public static double average(Person[] pers) //返回Person对象数组元素的平均年龄,若pers数组空,则返回0
{
double sum=0;
for(int i=0; i<pers.length; i++)
sum+=_______________________;
return pers.length>0 ? sum/pers.length: 0;
}
【约定答案格式】表达式中没有空格。
33. 设MyDate类声明如下,填空以下构造方法。
public class MyDate
{
private int year, month, day;
public MyDate(int year, int month, int day)
{
__________ = year;
……
}
}
34. 设MyDate类声明如下,填空以下拷贝构造方法。
public class MyDate
{
private int year, month, day;
public MyDate(int year, int month, int day) //方法体省略
public MyDate(_______ date) //拷贝构造方法
{
_______(date.year,date.month,date.day); //调用本类重载的构造方法
}
}
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中的一种进行分隔,不能两者混用。
35. MyDate类的equals(MyDate)方法填空。
public boolean equals(MyDate date) //比较this和date对象引用的实例是否相等
{
return _______________ //若this与date引用同一个实例,则相等
|| date!=null && this.year==date.year && this.month==date.month &&
this.day==date.day; //否则逐域比较各成员变量是否相等
}
【约定答案格式】表达式中皆为英文半角符号,关系表达式中不加空格。
36. 设MyDate类声明如下,其中____________语法成分有错误。
public class MyDate
{
private int year, month, day;
private static int thisYear;
public static int getThisYear()
{
return this.year;
}
}
37. 设Person类声明如下:
public class Person
{
String name;
public static void main(String args[])
{
Person p = _______; //创建Person实例
System.out.println(p.name);
}
}
【约定答案格式】采用一个空格作为单词的分隔符,不要加多余空格。
38. 设Person类声明如下,其中_______语法成分有编译错。
1 public class Person
2 {
3 String name;
4 public Person(String name)
5 {
6 this.name = name;
7 }
8 public static void main(String args[])
9 {
10 Person p = new Person();
11 System.out.println(p.name);
12 }
13 }
【约定答案格式】采用一个空格作为单词的分隔符,不要加多余空格。
39. 设Person类声明如下,其中第______行有编译错。
1 public class Person
2 {
3 private final String name;
4 public Person(String name)
5 {
6 this.name = name;
7 }
8 public void set(String name)
9 {
10 this.name = name;
11 }
12 }
40. 设MyDate类声明如下,填空。
public class MyDate //日期类
{
private static int thisYear; //当前年份,静态成员变量
static //静态成员变量初始化
{
thisYear=2024;
}
public static int getThisYear()//获得今年年份,静态方法
{
return thisYear; //访问静态成员变量
}
public static void main(String args[])
{
System.out.println("今年是"+_________);
}
}
41. 设Person、Student类声明如下,其中第______行有编译错。
1 public class Person
2 {
3 private final String name;
4 public Person(String name) //方法体省略
5 public String toString() //方法体省略
6 }
7 public class Student extends Person
8 {
9 public static void main(String args[])
10 {
11 Student s1 = new Student();
12 System.out.println(s1.toString());
13 }
14}
42. 设Person、Student类声明如下,其中第______行有编译错。
1 public class Person
2 {
3 private final String name;
4 public Person() //方法体省略
5 public Person(String name) //方法体省略
6 public String toString() //方法体省略
7 }
8 public class Student extends Person
9 {
10 public Student(String name)
11 {
12 this.name = name;
13 }
14 public static void main(String args[])
15 {
16 Student s1 = new Student("胡小东");
17 System.out.println(s1.toString());
18 }
19}
43. 设Person、Student类声明如下,方法体省略。
public class Person
{
String name;
public Person()
public void set(String name)
}
public class Student extends Person
{
String spec;
public void set(String name, String spec)
}
【问】Person类的set(…)方法,与Student类的set(…)方法是______关系。
44. 设Person、Student类声明如下,方法体省略。
public class Person
{
String name;
public Person()
public void set(String name)
}
public class Student extends Person
{
String spec;
public void set(String spec)
}
【问】Person类的set(…)方法,与Student类的set(…)方法是______关系。
45. 【第6版实验3-6】search(objs[], key)方法设计,程序填空。
//顺序查找objs对象数组中首次出现的与key相等元素,若查找成功返回元素,否则返回-1
public static Object search(Object[] objs, Object key)
{
for(int i=0; i<objs.length; i++)
if(_________________) //比较对象是否相等
return objs[i];
return null;
}
46. 已知Person类声明以下成员方法:
public int getAge() //返回this对象今年的年龄
public int older(Person per) //返回this与per对象出生年份的差值
【第6版实验题3-6】实现PersonArray类声明的以下方法。
//返回Person对象数组元素的年龄最大者
public static Person oldest(Person[] pers)
{
if(pers==null || pers.length==0)
return null;
int max=0;
for(int i=1; i<pers.length; i++)
if(_________________________)
max = i;
return pers[max];
}
【约定答案格式】表达式中没有空格。
47. 使用______________关键字声明抽象类。
48. 使用______________关键字声明最终类和最终方法。
49. Person类的getAge()方法填空。
public class MyDate
{
private int year, month, day;
private static int thisYear=2024;
public static int getThisYear()
public int getYear()
}
public class Person
{
public MyDate birthdate;
public int getAge() //返回当前对象在今年的年龄
{
return _________________________;
}
}
【约定答案格式】表达式中皆为英文半角符号,算术表达式中不加空格。
50. 已知ClosedFigure、Rectangle等类声明如下:
public abstract class ClosedFigure
{
public abstract double area();
}
public class Rectangle extends ClosedFigure
public class Ellipse extends ClosedFigure
调用语句如下,回答问题。
ClosedFigure cfig = new Rectangle(point1, ……);
cfig.area() //执行_____________类实现的area()方法
cfig = new Ellipse(…);
cfig.area() //执行_____________类实现的area()方法
【约定答案格式】多个答案之间用英文逗号","或中文逗号","其中一种进行分隔。
51. 【第6版实验3-7】max(ClosedFigure[] cfigs)方法的算法设计,area()方法的运行时多态。
已知ClosedFigure、Rectangle等类声明如下:
public abstract class ClosedFigure //闭合图形抽象类
{
public abstract double area(); //计算面积
}
声明max(cfigs)方法如下,填空。
//返回cfigs对象数组中的面积最大值对象
public static ClosedFigure max(ClosedFigure[] cfigs)
{
int max=0;
for(int i=1; i<cfigs.length; i++)
if(__________________) //发现更大者
max = i;
return cfigs[max];
}
【约定答案格式】表达式中皆为英文半角符号,算术表达式、关系表达式中不加空格。
52. 设Person、Student类声明如下,其中第______行有编译错。
1 public class Person
2 {
3 private final String name;
4 public Person() //方法体省略
5 public Person(String name) //方法体省略
6 public String toString() //方法体省略
7 }
8 public class Student extends Person
9 {
10 public Student(String name)
11 {
12 super(name);
13 }
14 public static void main(String args[])
15 {
16 Student s1 = new Student();
17 System.out.println(s1.toString());
18 }
19}
53. 设MyDate类声明如下,方法体省略。
public class MyDate
{
public int year, month, day;
public MyDate(int year, int month, int day)
//返回中文日期格式字符串,格式为"yyyy年MM月dd日",4位年份2位月日
public String toString()
}
调用语句如下:
MyDate d1=new MyDate(2024,5,10);
d1.month=13;
System.out.println(d1.toString());
输出结果是______________________。