怀化学院

  • 官方网址: http://www.hhtc.edu.cn
  • 官方电话:0745-2853370
  • 电子邮箱:hhxyzsb@vip.163.com
  • 院校地址:怀化市鹤城区怀东路180号

怀化学院《Java语言程序设计》27年模拟试卷

一、单项选择题(共30题,每题2分,共60分)

1.以下关于Java语言特点的描述,错误的是( )

A. Java是纯面向对象的语言,所有代码都写在类中
B. Java支持多继承,一个类可以直接继承多个父类
C. Java程序通过Java虚拟机实现跨平台
D. Java提供了自动垃圾回收机制


2.下列哪个声明是正确的char类型常量?( )
A. 'ab' B. "a" C. '\u0061' D. '\\'


3.执行以下代码后,输出结果是( )

java
int a = 5;int b = a++ + ++a;System.out.println(b);

A. 10 B. 11 C. 12 D. 13


  1. 下列哪个表达式不会出现编译错误?( )
    A. float f = 3.14;
    B. char c = "A";
    C. long l = 1234567890123L;
    D. boolean b = 1;

  2. 关于数组的声明,以下语法正确的是( )
    A. int[] arr = new int(10);
    B. int arr[][] = new int[][3];
    C. int[] arr = {1,2,3};
    D. int[3] arr = new int[3];

  3. 以下switch语句中,合法的表达式类型是( )
    A. long B. double C. String(Java 7+) D. boolean

  4. 下列代码输出结果为( )

java
public class Test {
    public static void main(String[] args) {
        int x = 0;
        if (x = 1) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }}

A. true B. false C. 编译错误 D. 运行异常


  1. 关于类的访问权限,以下说法正确的是( )
    A. 一个Java源文件中只能有一个public类
    B. 默认访问权限的类可以被同一包外的子类访问
    C. private修饰的成员可以被子类继承
    D. protected成员在任何包中都可访问


  2. 以下关于构造方法的描述,正确的是( )
    A. 构造方法必须显式定义
    B. 构造方法可以被继承
    C. 构造方法可以调用普通方法
    D. 构造方法可以有返回类型void


  3. 执行以下代码,输出结果为( )

java
class Parent {
    static { System.out.print("P"); }
    Parent() { System.out.print("p"); }}class Child extends Parent {
    static { System.out.print("C"); }
    Child() { System.out.print("c"); }}public class Main {
    public static void main(String[] args) {
        new Child();
    }}

A. PpCc B. PCPpCc C. PCPc D. PCpc


  1. 下列哪个关键字用于防止方法被重写?( )
    A. static B. final C. abstract D. private

  2. 关于抽象类和接口,说法错误的是( )
    A. 抽象类可以有构造方法
    B. 接口中的变量默认为public static final
    C. 一个类可以实现多个接口,但只能继承一个抽象类
    D. 抽象类中不能有非抽象方法


  3. 下列哪个是Java中正确的多线程创建方式?( )
    A. 继承Thread类并重写start()方法
    B. 实现Runnable接口并实现run()方法
    C. 实现Callable接口必须重写call()方法,且不能通过Thread启动
    D. 以上全部正确


  4. 以下代码可能存在线程安全问题,需要同步的代码块是( )

java
class Counter {
    private int count = 0;
    public void increment() { count++; }
    public int getCount() { return count; }}

A. 仅increment方法 B. 仅getCount方法
C. increment和getCount都需要 D. 不需要同步


  1. 关于异常处理,以下说法正确的是( )
    A. finally块一定会执行,即使有System.exit(0)
    B. throws关键字用于方法内部抛出异常
    C. RuntimeException及其子类必须显式捕获或声明
    D. 自定义异常通常继承Exception


  2. 执行下面代码,输出结果是( )

java
try {
    int a = 10 / 0;} catch (ArithmeticException e) {
    System.out.print("A");} finally {
    System.out.print("B");}

A. A B. B C. AB D. 编译错误


  1. 下列哪个流是字符输入流?( )
    A. FileInputStream B. ObjectOutputStream
    C. BufferedReader D. DataInputStream

  2. 使用File类创建多级目录,应调用( )
    A. mkdir() B. mkdirs() C. createNewFile() D. createDirectory()

  3. 关于StringStringBuilder,正确的是( )
    A. String是可变字符序列
    B. StringBuilder是线程安全的
    C. String+操作底层会使用StringBuilder
    D. StringBuilderappend()方法返回void


  4. 下列哪个布局管理器将容器划分为5个区域(North, South, East, West, Center)?( )
    A. FlowLayout B. BorderLayout C. GridLayout D. CardLayout

  5. 在Swing中,为JButton添加事件监听器,通常需要实现哪个接口?( )
    A. MouseListener B. KeyListener C. ActionListener D. WindowListener

  6. 下列代码的输出结果是( )

java
int[] arr = new int[3];System.out.println(arr[3]);

A. 0 B. null C. 编译错误 D. ArrayIndexOutOfBoundsException


  1. 以下关于equals()==的说法,正确的是( )
    A. ==比较的是对象的内容
    B. equals()默认比较内存地址
    C. 两个String对象内容相同,==一定为true
    D. 基本数据类型可以使用equals()

  2. 下面哪个集合类不允许存储重复元素并且线程安全?( )
    A. ArrayList B. HashSet C. Vector D. CopyOnWriteArrayList

  3. 代码System.out.println(1 + 2 + "3" + 4 + 5);输出结果是( )

    A. 12345 B. 3345 C. 3345 D. 15

26.关于静态内部类,说法正确的是( )

A. 可以直接访问外部类的实例变量
B. 不需要外部类实例即可创建
C. 不能包含静态成员
D. 必须使用static关键字修饰,且只能定义在外部类中


27.执行以下代码,输出结果为( )

java
public class Test {
    public static void main(String[] args) {
        int i = 0;
        for (; i < 3; i++) {
            if (i == 1) continue;
            System.out.print(i);
        }
    }}

A. 0 B. 02 C. 012 D. 02∞


  1. 关于RandomAccessFile,说法错误的是( )
    A. 支持随机读写
    B. 既可以读也可以写
    C. 只能操作文件,不能操作内存
    D. 必须通过new RandomAccessFile("file","r")指定模式


  2. 下面哪个选项可以正确编译并运行?( )
    A. Object[] obj = new String[10]; obj[0] = new Integer(5);
    B. List<String> list = new ArrayList<>(); list.add(10);
    C. double d = 10 / 3; System.out.println(d);
    D. short s = 10; s = s + 1;

  3. 关于Thread.sleep(1000),下面描述正确的是( )
    A. 释放对象锁
    B. 让当前线程进入就绪状态
    C. 必须捕获InterruptedException
    D. 可以放在同步代码块外


二、程序分析题(共10题,每题4分,共40分)

请写出程序的运行结果或指出错误原因

1.

java
public class Main {
    public static void main(String[] args) {
        String s1 = "Java";
        String s2 = new String("Java");
        String s3 = s2.intern();
        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
    }}

结果: __________

2.

java
class A {
    public void show() { System.out.print("A"); }}class B extends A {
    public void show() { System.out.print("B"); }}public class Test {
    public static void main(String[] args) {
        A a = new B();
        a.show();
        ((B)a).show();
    }}

结果: __________

3.

java
public class LoopTest {
    public static void main(String[] args) {
        int i = 0;
        while (i++ < 3) {
            System.out.print(i + " ");
        }
    }}

结果: __________

4.

java
public class FinallyTest {
    public static int test() {
        try {
            return 1;
        } finally {
            return 2;
        }
    }
    public static void main(String[] args) {
        System.out.println(test());
    }}

结果: __________

5.

java
class Parent {
    String name = "Parent";
    void print() { System.out.println(name); }}class Child extends Parent {
    String name = "Child";
    void print() { System.out.println(name); }}public class Demo {
    public static void main(String[] args) {
        Parent p = new Child();
        System.out.println(p.name);
        p.print();
    }}

结果: __________

6.

java
public class SyncTest {
    public static void main(String[] args) throws InterruptedException {
        Object lock = new Object();
        Thread t1 = new Thread(() -> {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {}
                System.out.print("A");
            }
        });
        Thread t2 = new Thread(() -> {
            synchronized (lock) {
                System.out.print("B");
                lock.notify();
            }
        });
        t1.start();
        Thread.sleep(10);
        t2.start();
    }}

结果(可能顺序不唯一,写出可能的一种合理输出): __________

7.

java
public class ExceptionFlow {
    public static void main(String[] args) {
        try {
            method();
        } catch (Exception e) {
            System.out.print("C");
        }
    }
    static void method() {
        try {
            throw new RuntimeException();
        } catch (RuntimeException e) {
            System.out.print("R");
            throw e;
        } finally {
            System.out.print("F");
        }
    }}

结果: __________

8.

java
import java.util.*;public class ListDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        for (Integer i : list) {
            if (i == 2) {
                list.remove(i);
            }
        }
        System.out.println(list);
    }}

结果(含异常信息): __________

9.

java
public class VarArgs {
    static void test(int... a) {
        System.out.print(a.length);
    }
    public static void main(String[] args) {
        test(1,2,3);
        test();
    }}

结果: __________

10.

java
public class StaticInit {
    static { System.out.print("1"); }
    static StaticInit t = new StaticInit();
    { System.out.print("2"); }
    static { System.out.print("3"); }
    public static void main(String[] args) {
        System.out.print("4");
    }}

结果: __________


三、应用编程题(共5题,每题20分,共100分)

要求:代码结构清晰,命名规范,包含必要的异常处理

1. 学生管理系统(升级版)

  • 定义Student类,属性:id(String), name(String), age(int), score(double)

  • 实现构造方法、getter/settertoString

  • 实现Comparable<Student>接口,按成绩降序排序,成绩相同时按年龄升序

  • 在主类中创建一个包含至少5个学生的ArrayList<Student>

  • 使用Collections.sort排序,并输出排序前和排序后的学生列表

  • 添加功能:从文本文件students.txt中读取数据(格式:id,name,age,score每行一条),若文件不存在则创建并写入初始化数据,若存在则读取后排序输出

  • 要求处理IOException和数字格式异常

2. 图形用户界面:简易员工工资计算器

  • 窗口标题“Salary Calculator”,大小400×300,关闭时退出

  • 使用BorderLayout布局

  • 北区:JLabel提示“小时工资:” + JTextField,和“工作小时:” + JTextField,以及JButton“计算”

  • 中心:JTextArea用于显示结果(不显示历史,只显示最新计算的工资)

  • 南区:JButton“清除”清除所有文本框和结果

  • 事件:点击“计算”时,读取两个文本框的数值(处理NumberFormatException,弹出JOptionPane警告),计算工资=小时工资×工作小时,保留两位小数显示在JTextArea

  • 点击“清除”重置所有组件

  • 要求使用Swing,事件监听使用Lambda或内部类

3. 文件复制与加密工具

  • 编写一个类FileEncryptCopy,包含方法:

    • void copyAndEncrypt(String src, String dest, int shift)
      将源文件(文本文件)的每个字符向后移动shift个位置(例如shift=1,a→b,z→a,保留大小写和非字母)后写入目标文件

    • void copyAndDecrypt(String src, String dest, int shift) 逆操作

  • 在主类中提供控制台菜单(使用Scanner):

    1. 加密复制

    2. 解密复制

    3. 退出

  • 用户选择后输入源文件路径、目标文件路径、移位值(1-25),执行操作并提示成功或捕获FileNotFoundExceptionIOException

  • 要求使用字符流(FileReader / FileWriter 或 BufferedReader / BufferedWriter

4. 多线程模拟银行取款(线程安全)

  • 定义BankAccount类,属性:balance(double)

  • 方法:synchronized void withdraw(double amount),余额不足时打印“余额不足”并回滚

  • 创建Customer类实现Runnable,构造器中传入账户和取款金额,在run中调用withdraw并打印取款详情

  • 主类中创建一个共享BankAccount初始余额1000元

  • 创建3个线程,分别尝试取款800元、600元、500元

  • 启动所有线程,主线程等待所有取款结束后打印最终余额

  • 使用Thread.join()确保结果正确

  • 输出每次取款前后的余额,展示同步效果

5. 自定义异常与成绩统计

  • 定义一个自定义异常ScoreOutOfRangeException,继承Exception,构造方法接收字符串信息

  • 编写方法static double average(int[] scores) throws ScoreOutOfRangeException

    • 遍历数组,如果某个成绩小于0或大于100,则抛出ScoreOutOfRangeException并携带错误成绩信息

    • 否则计算平均值(double类型)

  • 主类中:创建一个包含5个成绩的数组(其中包含一个非法成绩如-5或120)

  • 捕获异常,打印异常信息,并输出“请重新输入成绩”

  • 修正后(可写死修正值)再次调用方法,正确输出平均值

  • 不使用Scanner,直接写测试数据