跳到主要内容

2024-2025学年上学期期末

2024-2025学年上学期期末试卷(含答案)​

说明​

  • 在2025-2026学年上学期,据cly老师说,这份卷子是去年的期末考卷,供同学们练习。

一、判断题(15 题,每题 1 分,共 15 分)​

  1. 类的成员变量如果未显式初始化,则会自动被初始化为其类型的默认值。

    答案:

    T


  2. Java 中,由低精度的数据类型向高精度的数据类型赋值时,是自动类型转换,其数值不变。

    答案:

    T


  3. Java 语言,一个源文件中可以定义多个 public 类。

    答案:

    F


  4. Java 数组创建时,一个数组可以存放不同类型的数值。

    答案:

    T


  5. 如果 Java 源文件中包含了多个类,那么用编译器 javac 编译完源文件后,将生成多个扩展名为 .class 的文件。

    答案:

    T


  6. 语句 System.out.println(6+8+"Hello,world!"); 的输出结果是 68Hello,world!。

    答案:

    F


  7. Java 中不允许同时继承一个类并实现多个接口。

    答案:

    F


  8. 定义抽象类时,抽象类中的方法必须全部是抽象方法。

    答案:

    F


  9. Java 中,static 修饰的变量,说明在类的所有实例之间是共享的。

    答案:

    T


  10. Java 的标准输入对象是 System.in,标准输出对象有两个,分别是 System.out 和 System.err。

    答案:

    T


  11. Java 中声明构造方法时,有时也可以使用 static 修饰。

    答案:

    N


  12. final 用于修饰类的方法时,表示该方法无法被子类重写。

    答案:

    T


  13. Java 中,由 Java 编译器自动导入,java.lang 是无需在程序中用 import 导入的包。

    答案:

    T


  14. 实例变量只能通过对象名访问,类变量既可以通过某个对象名也可以通过类名来访问。

    答案:

    T


  15. Java 中的 File 类,可以用于读取文件的内容。

    答案:

    F


二、单项选择题(10 题,每题 2 分,共 30 分)​

  1. 以下哪个不是 Java 的异常关键字?

    A. try
    B. catch
    C. raise
    D. throw

    答案:

    C


  2. 下列关于 Java 中的构造方法,说法错误的是( )。

    A. 构造方法没有返回值。
    B. 构造方法主要是完成针对对象的初始化工作。
    C. 构造方法是类的一种特殊方法,它的方法名必须与类名相同。
    D. 如果类没有无参的构造方法,编译器会自动配置一个。

    答案:

    D


  3. 以下说法不正确的是( )。

    A. 类的普通成员不需要初始化就有默认值。
    B. 类的静态成员不需要初始化就有默认值。
    C. int[] a = new int[5],每个元素都是 0。
    D. String[] a = new String[5],每个元素都是 ""。

    答案:

    D


  4. 以下关于继承的说法正确的是( )。

    A. 在 Java 中一个类最多同时继承一个类和实现一个接口。
    B. 在 Java 中的接口可以同时继承多个接口。
    C. 子类只能继承父类的 public 方法和属性。
    D. 子类只能继承父类的方法,而不能继承属性。

    答案:

    B


  5. Java 是一种( )编程语言。

    A. 解释型、弱类型
    B. 解释型、强类型
    C. 编译型、弱类型
    D. 编译型、强类型

    答案:

    D


  6. Java 语言中,下列哪个关键字修饰常量( )。

    A. constant
    B. static
    C. final
    D. final static

    答案:

    D


  7. 以下表述中哪一句话是正确的。

    A. Java 的源代码放置于 .java 文件中,一个 .java 文件最多仅能存放一个类。
    B. Java 源代码中的类名称必须和 .java 文件的名称相同。
    C. 类所在的包名和目录层次必须相同。
    D. 类名称与 .java 文件名称并无任何关联。

    答案:

    C


  8. 以下表述中哪一句话是不正确的。

    A. super 指向父类。
    B. self 指向本类。
    C. static 变量是依赖于类存在,不依赖于对象实例。
    D. Java 变量需要先定义才能使用。

    答案:

    B


  9. 以下表述中哪一句话是不正确的。

    A. final 方法无法被改写。
    B. final 类不能被继承。
    C. final int 变量不能修改其值。
    D. final StringBuffer 变量不能修改其值。

    答案:

    D


  10. 以下哪个对象是可变对象。

    A. int a = 5;
    B. Integer a = 5;
    C. String a = "abc";
    D. StringBuffer sb = new StringBuffer("abc");

    答案:

    D


三、简答题(每题 5 分,共 10 分)​

  1. 请简述 Java 程序从编写到编译,再到运行的全过程,列出中间的使用的命令。

    答案:

    使用文本编辑器(如 Notepad++、Text 等)编写 Java 源代码,保存为 .java 扩展名的文件。使用 Java 编译器 javac 将源代码编译成字节码文件(.class 文件)。Java 命令 java 运行编译后的字节码文件。注意包 package 的使用。


  2. 请说明 final 关键字的作用。

    答案:

    final 关键字是一个修饰符,用于指定一个变量、方法或类不能被进一步修改或扩展。当应用于局部变量或实例变量时,final 表示该变量一旦被初始化后,其引用或值就不能被改变。当一个方法被声明为 final,则该方法不能在任何子类中被重写(override)。当一个类被声明为 final,则该类不能被继承。


四、程序分析题(每题 6 分,共 30 分)​

  1. 写出以下程序执行之后的结果。

    public class TestStr {
    public static void main(String[] args) {
    String str1 = "hello";
    String str2 = "hello";
    String str3 = "he" + "llo";
    String str4 = new String("hello");
    System.out.println(str1 == str2);
    System.out.println(str1 == str3);
    System.out.println(str1 == str4);
    System.out.println(str2 == str3);
    System.out.println(str2 == str4);
    System.out.println(str3 == str4);
    }
    }
    答案:

    题目变更:把第 5 个小问题的一个等号,变更为 2 个等号。

    输出为:

    true
    true
    false
    true
    false
    false

    每个 1 分。

    如果题目没有变更,那么输出是:

    true
    true
    false
    Thello
    false

    也是每个 1 分。


  2. 请阅读以下程序。如果程序有错误,请列出错误,并纠正使得通过编译。如果没有,直接写出结果。

    (01) interface A {
    (02) void m1();
    (03) }
    (04) interface B implements A {
    (05) void m2();
    (06) }
    (07) public class MyClass implements B {
    (08) public void m1()
    (09) {
    (10) System.out.println("111111");
    (11) }
    (12) public static void main(String[] args) {
    (13) new MyClass().m1();
    (14) }
    (15) }
    答案:

    每个 3 分:

    • 第 04 行:implements 应改为 extends。
    • 第 05 行:m2() 缺实现。

  3. 请阅读以下程序。如果程序有错误,请列出错误,并纠正使得通过编译。如果没有,直接写出结果。

    (01) public class MyException {
    (02) public MyException() { }
    (03) public MyException(String s) { super(s); }
    (04) }
    (05) public class Test {
    (06) public void f(int n) throw MyException {
    (07) if (n > 0) throws new MyException("error");
    (08) else return null;
    (09) }
    (10) public static void main(String args[]) {
    (11) Test t = new Test();
    (12) t.f();
    (13) }
    (14) }
    答案:
    • 第 01 行没有 extends Exception,2 分。
    • 第 06 行应为 throws,1 分。
    • 第 07 行应为 throw,1 分。
    • 缺 try catch 语句,1 分。
    • 第 12 行 t.f() 需要改成 t.f(5),只要补充一个整数即得分,1 分。

  4. 请阅读以下程序,并给出结果。

    class A {
    public void func1() {
    System.out.println("A func1 is calling");
    }
    public void func2() {
    func1();
    }
    }

    class B extends A {
    public void func1() {
    System.out.println("B func1 is calling");
    }
    public void func3() {
    System.out.println("B func3 is calling");
    }
    }

    class C {
    public static void main(String[] args) {
    A a = new B();
    callA(a);
    callA(new B());
    }
    public static void callA(A a) {
    a.func1();
    a.func2();
    }
    }
    答案:

    每个 1.5 分:

    B func1 is calling
    B func1 is calling
    B func1 is calling
    B func1 is calling

  5. 请阅读以下程序。如果程序有错误,请列出错误,并纠正给出运行结果。如果没有,直接写出结果。

    (01) class Parent {
    (02) String a;
    (03) public void Parent(String a) {
    (04) this.a = a;
    (05) }
    (06) public void print() {
    (07) System.out.println(a);
    (08) }
    (09) }
    (10)
    (11) public class Child extends Parent {
    (12) String b;
    (13) public Child(String a, String b) {
    (14) this.b = b;
    (15) super(a);
    (16) }
    (17) public void print() {
    (18) System.out.println(a + " to " + b);
    (19) }
    (20) public static void main(String arg[]) {
    (21) Parent p = new Child("east", "west");
    (22) p.print();
    (23) }
    (24) }
    答案:
    • 第 03 行没有 void,此外 Parent 类却默认构造函数,2 分。
    • super 必须在构造函数第一行,2 分。

    修改后,输出为,2 分:

    east to west

五、编程题(25 分,第一题 10 分,第二题 15 分)​

  1. 接受用户输入的邮箱字符串,需要编写一个方法,用于验证输入的字符串是否符合有效的电子邮件邮箱格式要求(例如,首字母为大写字母,包含 @ 符号,@ 后必须有 .)。

    评分标准:
    • 正确接收用户输入的邮箱字符串,有合理提示,3 分。
    • 格式验证规则实现,6 分,如首字母为大写,包含 @ 符号,@ 后必须有 .。
    • 逻辑完整与输出格式,1 分。

  2. 模拟一个宠物管理,每个宠物有编号、名字、种类、年龄、以及健康状况,宠物类型如猫、狗,需要提供可以添加宠物、显示所有宠物信息的功能,基类是 Animal,从文件 pet.txt 读入宠物信息,若添加重复的宠物,给出异常处理和用户提示。

    评分标准:
    • 类设计与继承关系,5 分。
    • 文件读取,异常处理,5 分。
    • 添加宠物与显示宠物方法实现,5 分。