前言
Java 作为一门广泛应用的编程语言,在大学计算机相关专业的课程体系里占据着关键位置。在期末考试中,选择题通常是考查学生对基础知识掌握程度的重要手段。本文精心整理了 100 道 Java 基础选择题,并附上详细解析,期望能助力同学们更高效地复习与巩固知识点。
题目 1
关于 Java 的基本数据类型,以下说法正确的是( )。
- A. int 类型占用 4 个字节
- B. char 类型占用 2 个字节
- C. boolean 类型占用 1 个字节
- D. float 类型占用 8 个字节
答案:A、B
解析:
- A 选项正确,在 Java 中,int 类型占用 4 个字节(32 位)。
- B 选项正确,char 类型在 Java 中占用 2 个字节(16 位),用于表示 Unicode 字符。
- C 选项错误,boolean 类型的内存占用并没有明确规定,不过通常认为是 1 位。
- D 选项错误,在 Java 里,float 类型占用 4 个字节(32 位),而 double 类型才占用 8 个字节(64 位)。
题目 2
下列哪个关键字用于定义一个类?( )
- A. class
- B. interface
- C. abstract
- D. static
答案:A
解析:
- A 选项正确,class 关键字专门用于定义一个类。
- B 选项错误,interface 关键字是用于定义接口的。
- C 选项错误,abstract 关键字用于定义抽象类或抽象方法。
- D 选项错误,static 关键字用于定义静态成员。
题目 3
下列关于 Java 数组的说法,正确的是( )。
- A. 数组的长度可以动态改变
- B. 数组的索引从 1 开始
- C. 数组元素必须是基本数据类型
- D. 数组初始化后,其长度是固定的
答案:D
解析:
- A 选项错误,数组的长度在创建时就已经确定,后续不能动态改变。
- B 选项错误,数组的索引是从 0 开始的。
- C 选项错误,数组元素既可以是基本数据类型,也可以是引用数据类型。
- D 选项正确,数组一旦初始化完成,其长度就是固定的。
题目 4
下列哪个运算符用于比较两个对象是否相等?( )
- A. ==
- B. equals()
- C. compareTo()
- D. ===
答案:B
解析:
- A 选项错误,== 运算符主要用于比较基本数据类型,或者比较对象的引用是否相同。
- B 选项正确,equals () 方法用于比较两个对象的内容是否相等。
- C 选项错误,compareTo () 方法用于比较两个对象的顺序。
- D 选项错误,Java 中并不存在 === 运算符。
题目 5
下列关于 Java 继承的说法,正确的是( )。
- A. Java 支持多继承
- B. 子类可以继承父类的所有方法
- C. 子类可以覆盖父类的方法
- D. 子类可以访问父类的所有变量
答案:C
解析:
- A 选项错误,Java 不支持多继承,只支持单继承。
- B 选项错误,子类不能继承父类的私有方法。
- C 选项正确,子类可以通过重写(覆盖)父类的方法来实现多态。
- D 选项错误,子类不能访问父类的私有变量。
题目 6
下列关于 Java 接口的说法,正确的是( )。
- A. 接口中可以有具体方法的实现
- B. 一个类可以实现多个接口
- C. 接口中的方法默认是 public 的
- D. 接口中可以有静态变量
答案:B、C、D
解析:
- A 选项错误,在 Java 8 之前,接口中只能有抽象方法;Java 8 之后,接口中可以有默认方法和静态方法,但传统意义上接口主要是抽象方法集合。
- B 选项正确,在 Java 中,一个类可以实现多个接口。
- C 选项正确,接口中的方法默认修饰符是 public。
- D 选项正确,接口中可以有静态变量(常量)。
题目 7
下列关于 Java 异常处理的说法,正确的是( )。
- A. try 块中可以没有 catch 块
- B. finally 块总是会被执行
- C. catch 块可以捕获多个不同类型的异常
- D. throw 关键字用于抛出异常
答案:A、B、C、D
解析:
- A 选项正确,try 块可以没有 catch 块,但必须有 finally 块。
- B 选项正确,finally 块无论是否发生异常都会被执行,除非遇到 System.exit (0) 。
- C 选项正确,可以使用多个 catch 块来捕获不同类型的异常。
- D 选项正确,throw 关键字用于抛出异常。
题目 8
下列关于 Java 集合框架的说法,正确的是( )。
- A. ArrayList 是线程安全的
- B. LinkedList 底层是链表结构
- C. HashSet 允许存储重复元素
- D. HashMap 允许键为 null
答案:B、D
解析:
- A 选项错误,ArrayList 不是线程安全的,Vector 才是线程安全的。
- B 选项正确,LinkedList 底层是双向链表结构。
- C 选项错误,HashSet 不允许存储重复元素。
- D 选项正确,HashMap 允许键为 null,也允许值为 null。
题目 9
下列关于 Java 泛型的说法,正确的是( )。
- A. 泛型是在编译时检查类型安全性的
- B. 泛型可以用于类、接口和方法
- C. 泛型可以提高代码的可读性和安全性
- D. 泛型在运行时会保留类型信息
答案:A、B、C
解析:
- A 选项正确,泛型在编译时进行类型检查,以此确保类型安全。
- B 选项正确,泛型可以应用于类、接口和方法。
- C 选项正确,泛型能够提高代码的可读性和安全性。
- D 选项错误,泛型在运行时会发生类型擦除,不会保留类型信息。
题目 10
下列关于 Java 多线程的说法,正确的是( )。
- A. Thread 类用于创建线程
- B. Runnable 接口用于实现线程
- C. synchronized 关键字用于实现线程同步
- D. sleep () 方法用于让线程休眠
答案:A、B、C、D
解析:
- A 选项正确,Thread 类用于创建线程。
- B 选项正确,Runnable 接口用于实现线程。
- C 选项正确,synchronized 关键字用于实现线程同步。
- D 选项正确,sleep () 方法用于让线程休眠指定的时间。
题目 11
以下哪个选项是Java中实现多态的方式?
- A. 继承
- B. 接口
- C. 方法重写
- D. 以上都是
答案:D
解析:
多态是面向对象编程的四大基本特性之一,其实现方式涵盖继承、接口和方法重写。通过继承和方法重写,子类能够覆盖父类的方法,进而实现不同的行为;接口可以定义规范,不同的类可以实现相同的接口,并提供不同的实现。
题目 12
以下代码的输出结果是?
public class Test {
|
|
public static void main(String[] args) {
|
|
String s1 = "hello"; |
|
String s2 = new String("hello"); |
|
System.out.println(s1 == s2); |
|
System.out.println(s1.equals(s2)); |
|
} |
|
} |
- A. true true
- B. true false
- C. false true
- D. false false
答案:C
解析:
s1 指向字符串常量池中的 "hello",而 s2 是在堆中新创建的 String 对象,所以 s1 == s2
为 false。
equals
方法比较的是两个对象的内容是否相同,所以 s1.equals(s2)
为 true。
题目 13
以下哪个关键字用于实现线程同步?
- A. synchronized
- B. volatile
- C. transient
- D. native
答案:A
解析:
synchronized
关键字用于实现线程同步,它可以修饰方法或代码块,保证同一时间只有一个线程可以访问被同步的代码。
volatile
用于保证变量的可见性。
transient
用于序列化时忽略某些字段。
native
用于声明本地方法。
题目 14
以下关于Java中抽象类的描述,正确的是?
- A. 抽象类不能被实例化
- B. 抽象类中可以没有抽象方法
- C. 抽象类的子类必须重写抽象类中的所有抽象方法
- D. 以上都是
答案:D
解析:
抽象类是一种特殊的类,不能被实例化。
抽象类中可以没有抽象方法,也可以同时包含抽象方法和非抽象方法。
如果一个类继承了抽象类,那么它必须重写抽象类中的所有抽象方法,除非它本身也是抽象类。
题目 15
以下代码执行后,变量count的值是?
public class Test {
|
|
public static void main(String[] args) {
|
|
int count = 0; |
|
for (int i = 0; i < 10; i++) {
|
|
if (i % 2 == 0) {
|
|
count++; |
|
} |
|
} |
|
} |
|
} |
- A. 0
- B. 5
- C. 10
- D. 15
答案:B
解析:
循环从 0 到 9,当 i 为偶数时(i % 2 == 0
),count 自增 1。0、2、4、6、8 是偶数,所以 count 的值为 5。
题目 16
以下关于Java中接口的描述,正确的是?
- A. 接口中可以有具体方法的实现
- B. 一个类可以实现多个接口
- C. 接口中的方法默认是public的
- D. 接口中可以有静态变量
答案:B、C、D
解析:
Java 8 之前接口中只能有抽象方法,Java 8 之后可以有默认方法和静态方法。
一个类可以实现多个接口。
接口中的方法默认修饰符是 public。
接口中可以有静态变量(常量)。
题目 17
以下代码的输出结果是?
public class Test {
|
|
public static void main(String[] args) {
|
|
int[] arr = {1, 2, 3, 4, 5}; |
|
for (int i : arr) {
|
|
if (i % 2 == 0) {
|
|
System.out.print(i + " "); |
|
} |
|
} |
|
} |
|
} |
- A. 1 3 5
- B. 2 4
- C. 1 2 3 4 5
- D. 编译错误
答案:B
解析:
增强型 for 循环遍历数组 arr,当元素为偶数时(i % 2 == 0
),打印该元素。所以输出结果为 2 4。
题目 18
以下关于Java中枚举的描述,正确的是?
- A. 枚举是一种特殊的类
- B. 枚举可以有构造方法
- C. 枚举可以实现接口
- D. 以上都是
答案:D
解析:
枚举是一种特殊的类,用于定义一组固定的常量。
枚举可以有构造方法,用于初始化枚举常量。
枚举可以实现接口,提供额外的功能。
题目 19
以下代码执行后,变量result的值是?
public class Test {
|
|
public static void main(String[] args) {
|
|
int a = 5; |
|
int b = 10; |
|
int result = a++ + --b; |
|
System.out.println(result); |
|
} |
|
} |
- A. 14
- B. 15
- C. 16
- D. 17
答案:A
解析:
a++
先使用 a 的值 5,然后 a 自增 1 变为 6。
--b
先将 b 自减 1 变为 9,然后使用 b 的值 9。
所以 result = 5 + 9 = 14
。
题目 20
以下关于Java中泛型的描述,正确的是?
- A. 泛型是在编译时检查类型安全性的
- B. 泛型可以用于类、接口和方法
- C. 泛型可以提高代码的可读性和安全性
- D. 泛型在运行时会保留类型信息
答案:A、B、C
解析:
泛型在编译时进行类型检查,确保类型安全。
泛型可以用于类、接口和方法。
泛型可以提高代码的可读性和安全性。
泛型在运行时会发生类型擦除,不会保留类型信息。
题目 21
以下关于Java中垃圾回收机制的描述,正确的是?
- A. 垃圾回收器可以立即回收不再使用的对象
- B. 程序员可以手动调用垃圾回收器
- C. 垃圾回收器可以保证程序不会出现内存泄漏
- D. 以上都不正确
答案:B
解析:
垃圾回收器会在适当的时候回收不再使用的对象,但不能保证立即回收。
程序员可以使用 System.gc()
方法建议垃圾回收器进行垃圾回收,但不能强制执行。
垃圾回收器可以减少内存泄漏的风险,但不能完全保证程序不会出现内存泄漏。
题目 22
以下代码的输出结果是?
public class Test {
|
|
public static void main(String[] args) {
|
|
int a = 10; |
|
int b = 5; |
|
int c = a / b * b; |
|
System.out.println(c); |
|
} |
|
} |
- A. 0
- B. 5
- C. 10
- D. 15
答案:C
解析