跳转到内容

第三章测验

一、单选题(每题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());

输出结果是______________________。