一、单项选择题(共20小题,每小题3分,共60分)
1.关于Java虚拟机(JVM)的描述,下列哪项是正确的?
A. 每个Java程序运行时一定会创建多个JVM实例
B. JVM负责将字节码解释或编译为机器码执行
C. JVM不支持垃圾回收(GC)
D. JVM只能运行在Windows操作系统上
2.下列哪项不是Java关键字?
A. goto B. const C. record D. NULL
3.给出以下代码片段,输出结果是?
java
int a = 5;
int b = 10;
System.out.println(a++ + --b * a);
A. 45 B. 50 C. 54 D. 60
4.关于数组的声明,下列哪项语法是正确的?
A. int[] arr = new int[];
B. int arr[][] = new int[3][];
C. int[4] arr = {1,2,3,4};
D. int arr = new int[5];
5.关于this关键字,说法错误的是?
A. this可以用于调用本类的其他构造方法
B. this可以访问当前对象的实例变量
C. 在静态方法中可以使用this
D. this可以作为方法的返回值(return this)
6.以下关于继承的说法,正确的是?
A. Java支持多继承一个父类
B. 子类可以继承父类的所有成员,包括私有成员
C. 子类构造方法中必须通过super调用父类构造方法,如果没有显式调用,编译器会自动插入super()
D. final修饰的类可以被继承
7.下列有关抽象类和接口的描述,错误的是?
A. 抽象类中可以没有抽象方法
B. 接口中的所有方法默认都是public abstract(JDK8之前)
C. 一个类可以实现多个接口,但只能继承一个抽象类
D. 抽象类中不能定义静态方法
8.关于异常处理,以下代码的输出是?
java
public class Test {
public static void main(String[] args) {
try {
System.out.println("A");
throw new RuntimeException();
} catch (Exception e) {
System.out.println("B");
return;
} finally {
System.out.println("C");
}
System.out.println("D");
}
}
A. A B C D B. A B C C. A B D D. A C
9.下列哪个类的对象是线程安全的?
A. StringBuilder B. ArrayList C. HashMap D. Vector
String s = "Java"; String t = "Java"; System.out.println(s == t); 输出结果是?
A. true B. false C. 编译错误 D. 运行时异常
10.以下关于ArrayList和LinkedList的说法,正确的是?
A. ArrayList在头部插入元素的效率高于LinkedList
B. LinkedList实现了RandomAccess接口
C. ArrayList的初始容量默认为10
D. 两者都是线程安全的
11.下面哪个Stream操作会改变原始数据源?
A. filter() B. map() C. sorted() D. 都不会改变
12.关于File类的描述,正确的是?
A. File可以读写文件内容
B. File可以创建目录
C. File是字节流的一种
D. File实现了Closeable接口
13.下列关于多线程的叙述,错误的是?
A. 调用Thread.sleep()不会释放锁
B. 调用Object.wait()会释放锁
C. Thread.yield()会让线程进入阻塞状态
D. synchronized可以修饰方法和代码块
14.给定以下代码,输出是什么?
java
public class Counter {
int count = 0;
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
c1.count = 10;
c2.count = 20;
System.out.println(c1.count + c2.count);
}
}
A. 0 B. 10 C. 20 D. 30
15.关于JDBC PreparedStatement,说法正确的是?
A. 可以防止SQL注入攻击
B. 性能一定优于Statement
C. 只能执行查询操作
D. 不需要关闭资源
16.下面哪个不是线程状态?
A. NEW B. RUNNING C. BLOCKED D. WAITING
17.下列哪个选项能正确创建一个包含泛型的ArrayList?
A. ArrayList<int> list = new ArrayList<>();
B. ArrayList list = new ArrayList<Integer>();
C. ArrayList<Integer> list = new ArrayList<>();
D. ArrayList<Object> list = new ArrayList<Integer>();
18.以下关于Lambda表达式的描述,正确的是?
A. Lambda表达式只能用于函数式接口
B. Lambda表达式可以访问非final的局部变量
C. Lambda表达式的参数类型必须显式声明
D. Lambda表达式会创建一个匿名内部类的对象
19.关于网络编程,下列说法错误的是?
A. UDP协议面向无连接,速度快但不可靠
B. 在Java中使用ServerSocket实现TCP服务器端
C. DatagramSocket用于UDP通信
D. TCP通信时,客户端和服务端必须使用相同的端口号
二、简答题(共4小题,每小题10分,共40分)
请简要回答问题,必要时可附代码示例。
20..简述final关键字在Java中的三种主要使用场景及其作用。
21.说明ArrayList与LinkedList在底层数据结构、插入删除操作的时间复杂度上的区别,并分别给出一个适合使用它们的典型场景。
22.什么是异常?请区分受检异常(checked exception)和运行时异常(unchecked exception),各举两个例子。
23.简述sleep()和wait()方法的区别(从所属类、锁的释放、使用条件三个方面说明)。
三、程序阅读题(共5小题,每小题8分,共40分)
以下每道题均为程序填空题,请根据代码上下文在画线处填入正确的代码片段。
25题(8分)
java
public class Person {
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写toString方法
public ________①________ {
return "Person{name='" + name + "', age=" + age + "}";
}
public static void main(String[] args) {
Person p = new Person("Alice", 25);
System.out.println(p);
}
}
①处应填入:______
26题(8分)
java
import java.util.*;
public class MapTraverse {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 85);
scores.put("Emma", 92);
// 使用增强for循环遍历Map,输出每个键值对
for(________②________ : scores.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
}
}
②处应填入:______
27题(8分)
java
public class ExceptionDemo {
public static void main(String[] args) {
try {
int a = 10 / 0;
} catch (________③________ e) {
System.out.println("除零异常");
} finally {
System.out.println("finally执行");
}
}
}
③处应填入:______
28题(8分)
java
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
________④________
}
return instance;
}
}
④处写出线程安全的单例模式双重检查锁中的对象创建语句(不考虑volatile):______
29题(8分)
java
import java.io.*;
public class CopyFile {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("src.txt");
FileOutputStream fos = new FileOutputStream("dst.txt");
byte[] buffer = new byte[1024];
int len;
while(________⑤________ != -1) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
}
}
⑤处应填入:______
四、程序综合设计题(共3小题,每小题20分,共60分)
三道题均为程序填空题,请根据题意在横线处补全代码。
30题(20分)
题目:设计一个学生类Student,包含学号(id)、姓名(name)、成绩(score)。在Main类中创建一个ArrayList<Student>集合,添加3个学生对象,然后使用Stream API筛选出成绩≥60的学生,并按成绩降序排序,最后输出学生的姓名和成绩。
补全以下代码:
java
import java.util.*;
import java.util.stream.Collectors;
class Student {
private int id;
private String name;
private double score;
public Student(int id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
public String getName() { return name; }
public double getScore() { return score; }
@Override
public String toString() {
return name + ":" + score;
}
}
public class Main30 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(1, "张三", 85.5));
list.add(new Student(2, "李四", 59.0));
list.add(new Student(3, "王五", 72.3));
List<Student> result = list.stream()
.________⑥________(s -> s.getScore() >= 60)
.sorted(________⑦________(s1, s2) -> Double.compare(s2.getScore(), s1.getScore()))
.collect(________⑧________);
result.forEach(System.out::println);
}
}
⑥处:______
⑦处:______
⑧处:______
31题(20分)
题目:编写一个多线程程序,模拟两个线程对同一个共享账户进行取款操作。账户初始余额为2000元,每次取款200元,取款10次后停止。要求使用synchronized保证线程安全。
补全以下代码:
java
class Account {
private int balance = 2000;
public synchronized void withdraw(int amount) {
if(________⑨________) {
System.out.println(Thread.currentThread().getName() + " 取款 " + amount + ",余额不足");
return;
}
balance -= amount;
System.out.println(Thread.currentThread().getName() + " 取款 " + amount + ",剩余余额:" + balance);
}
public int getBalance() { return balance; }
}
class WithdrawTask implements Runnable {
private Account account;
public WithdrawTask(Account account) { this.account = account; }
@Override
public void run() {
for(int i = 0; i < 5; i++) {
if(account.getBalance() <= 0) break;
account.withdraw(200);
try {
Thread.sleep(50);
} catch (InterruptedException e) { }
}
}
}
public class Main31 {
public static void main(String[] args) {
Account acc = new Account();
Thread t1 = new Thread(new WithdrawTask(acc), "线程A");
Thread t2 = new Thread(new WithdrawTask(acc), "线程B");
t1.start();
________⑩________
}
}
⑨处:______
⑩处:______
32题(20分)
题目:编写一个JDBC程序,查询数据库student_db中student表的所有记录,并打印在控制台。表结构:id(int), name(varchar), age(int)。请补全SQL执行和结果集遍历部分(假设已加载驱动,数据库url、用户名密码已提供)。
补全以下代码:
java
import java.sql.*;
public class Main32 {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/student_db";
String user = "root";
String password = "123456";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
String sql = "SELECT * FROM student";
rs = stmt.executeQuery(sql);
while(________⑪________) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " | " + name + " | " + age);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
try { if(rs != null) rs.close(); } catch(SQLException e) {}
try { if(stmt != null) ________⑫________; } catch(SQLException e) {}
try { if(conn != null) ________⑬________; } catch(SQLException e) {}
}
}
}
⑪处:______
⑫处:______
⑬处:______

中南林业科技大学涉外学院
湖南 长沙 | 民办三本 | 435.2万

湖南中医药大学湘杏学院
湖南 长沙 | 民办三本 | 150万

衡阳师范学院南岳学院
湖南 衡阳 | 民办三本 | 78.6万

南华大学船山学院
湖南 衡阳 | 民办三本 | 96万

湖南科技大学潇湘学院
湖南 湘潭 | 民办三本 | 150万

湖南工业大学科技学院
湖南 株洲 | 民办三本 | 150万

湖南工程学院应用技术学院
湖南 湘潭 | 民办三本 | 155万

湖南文理学院芙蓉学院
湖南 常德 | 民办三本 | 156万

湖南理工学院南湖学院
湖南 岳阳 | 民办三本 | 69万

湖南农业大学东方科技学院
湖南 长沙 | 民办三本 | 99.5万