《面向对象程序设计(Java)》期末试卷A (精选01)
《面向对象程序设计(Java)》期末试卷A (精选01)
大学生期末考试复习平台前往平台





一、选择题(共 20 题,每题 1.5 分,共 30 分)
1.运行名为 Test.class 的 Java 字节码文件,所用的 Java 命令是( )
- A.
javac Test.java - B.
javac Test.class - C.
java Test - D.
java Test.class
::::: details 查看答案与解析
答案:C
解析:
javac是 Java 编译器,用于将.java源文件编译为.class字节码文件,A、B 错误。java是 Java 虚拟机启动命令,运行字节码文件时不需要加.class后缀,只需写类名。- 正确命令:
java Test,C 正确,D 错误。
难度: ⭐
考点: #Java命令 #javac #java
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- javac:编译器,将
.java源文件编译为.class字节码文件 - java:虚拟机启动命令,运行字节码文件(不加
.class后缀)
::: warning 易错点
java Test运行时不加.class后缀javac后面跟源文件名(带.java),java后面跟类名(不带后缀)
:::
::::
:::: details 🔄 举一反三
- 如果源文件名为
HelloWorld.java,编译和运行的命令分别是什么?
::: details 查看练习答案与解析
答案:编译javac HelloWorld.java,运行java HelloWorld
解析:javac 编译源文件需要带.java后缀,java 运行类不需要后缀。
:::
::::
:::::
2.下列不可作为 Java 语言标识符的是( )
- A.
a2 - B.
$2 - C.
_2 - D.
22
::::: details 查看答案与解析
答案:D
解析:
Java 标识符命名规则:
- 可以由字母、数字、下划线
_、美元符号$组成 - 不能以数字开头
- 不能使用 Java 关键字
- A:
a2以字母开头,合法 ✓ - B:
$2以 $ 开头,合法 ✓ - C:
_2以下划线开头,合法 ✓ - D:
22以数字开头,非法 ✗
难度: ⭐
考点: #标识符 #命名规则
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 标识符规则:字母/
_/$开头,不含关键字,区分大小写 - 不能以数字开头
::: warning 易错点
$和_可以作为标识符开头- 数字不能作为标识符开头,但可以出现在中间
:::
::::
:::: details 🔄 举一反三
- 下列哪个是合法的 Java 标识符?
- A.
class - B.
_name - C.
3abc - D.
my-name
::: details 查看练习答案与解析
答案:B
解析:A 是 Java 关键字;B 以下划线开头,合法;C 以数字开头,非法;D 含连字符,非法。
:::
::::
- A.
:::::
3.以下关于运算符优先级顺序的描述中正确的是( )
- A. 关系运算符 < 算术运算符 < 赋值运算符
- B. 赋值运算符 < 关系运算符 < 算术运算符
- C. 算术运算符 < 关系运算符 < 赋值运算符
- D. 赋值运算符 < 算术运算符 < 关系运算符
::::: details 查看答案与解析
答案:B
解析:
Java 运算符优先级(从高到低):算术运算符 > 关系运算符 > 赋值运算符
用"<“表示"优先级低于”:赋值运算符 < 关系运算符 < 算术运算符
难度: ⭐⭐
考点: #运算符优先级
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 运算符优先级:算术 > 关系 > 逻辑 > 赋值
- 赋值运算符优先级最低
::: warning 易错点
- 赋值运算符优先级最低
- 逻辑运算符介于关系运算符和赋值运算符之间
:::
::::
:::: details 🔄 举一反三
- 表达式
a + b > c && d == e中,运算符的执行顺序是?
::: details 查看练习答案与解析
答案:先a+b,再>c和==e,最后&&
解析:算术(+) → 关系(>, ==) → 逻辑(&&),按优先级从高到低执行。
:::
::::
:::::
4.getCustomerInfo() 方法如下,try 中可以捕获三种类型的异常,如果在该方法中产生了一个 IOException,将会输出什么结果( )
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
- A.
IOException! - B.
IOException!Exception! - C.
FileNotFoundException!IOException! - D.
FileNotFoundException!IOException!Exception!
::::: details 查看答案与解析
答案:A
解析:
异常捕获的匹配规则:从上到下依次匹配,第一个匹配的 catch 块执行后,后面的 catch 块不再执行。
异常类的继承关系:FileNotFoundException → IOException → Exception
当产生 IOException 时:
FileNotFoundException是IOException的子类,不匹配 → 跳过IOException精确匹配 → 执行,输出IOException!Exception虽然也能匹配,但已被前面的 catch 捕获 → 不执行
难度: ⭐⭐
考点: #异常处理 #异常捕获顺序
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 异常捕获顺序:子类异常必须在父类异常之前
- 多 catch 块:从上到下匹配,第一个匹配的执行后不再继续
::: warning 易错点
- 多个 catch 块只执行第一个匹配的,不会全部执行
- 子类异常必须写在父类异常之前,否则编译报错
:::
::::
:::: details 🔄 举一反三
- 如果产生
FileNotFoundException,会输出什么?
::: details 查看练习答案与解析
答案:FileNotFoundException!
解析:FileNotFoundException精确匹配第一个 catch 块,执行后不再继续。
:::
::::
:::::
5.声明成员变量时,如果不使用任何访问控制符,则以下哪种类型的类不能对该成员进行直接访问( )
- A. 同一类
- B. 同一包中的子类
- C. 同一包中的非子类
- D. 不同包中的子类
::::: details 查看答案与解析
答案:D
解析:
不使用任何访问控制符时,成员的访问权限为默认(包访问权限/default):
| 访问者 | 能否访问 |
|---|---|
| 同一类 | ✓ |
| 同一包中的子类 | ✓ |
| 同一包中的非子类 | ✓ |
| 不同包中的子类 | ✗ |
| 不同包中的非子类 | ✗ |
难度: ⭐
考点: #访问修饰符 #default权限
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- private:本类可访问
- default(无修饰符):本包可访问
- protected:本包 + 其他包的子类可访问
- public:所有类可访问
::: warning 易错点
- default 权限不允许跨包访问,即使是子类也不行
- protected 允许跨包的子类访问,这是与 default 的关键区别
:::
::::
:::: details 🔄 举一反三
- 如果成员用
protected修饰,不同包中的子类能否访问?
::: details 查看练习答案与解析
答案:能
解析:protected 允许同包的所有类和不同包的子类访问。
:::
::::
:::::
6.对于下列代码:
String str1 = "java";
String str2 = "java";
String str3 = new String("java");
StringBuffer str4 = new StringBuffer("java");
下列结论正确的是( )
- A.
str1 == str2 - B.
str1 == str4 - C.
str2 == str3 - D.
str3 == str4
::::: details 查看答案与解析
答案:A
解析:
== 比较的是引用(地址),equals() 比较的是内容。
str1 = "java"和str2 = "java":字符串字面量存储在字符串常量池中,相同内容共享同一对象,所以str1 == str2为 true,A 正确。str3 = new String("java"):new在堆内存中创建新对象,与常量池中的对象地址不同,str2 == str3为 false,C 错误。str4 = new StringBuffer("java"):StringBuffer 是不同类型,与 String 比较==必然为 false,B、D 错误。
难度: ⭐⭐
考点: #String比较 #字符串常量池 #==与equals
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- String 常量池:字面量共享同一对象,
new创建新对象 ==:比较引用(地址)equals():比较内容
::: warning 易错点
new String("java")创建新对象,与常量池中的"java"地址不同==比较地址,equals()比较内容
:::
::::
:::: details 🔄 举一反三
-
以下代码输出什么?
String s1 = "hello"; String s2 = new String("hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2));::: details 查看练习答案与解析
答案:false然后true
解析:s1在常量池中,s2在堆内存中,==比较地址不同所以 false;equals()比较内容相同所以 true。
:::
::::
:::::
7.关于接口,下面的叙述错误的是( )
- A. 一个接口可以继承多个接口
- B. 一个类可以实现多个接口
- C. 抽象类在实现接口时,可以不实现该接口中声明的所有方法
- D. 抽象类在实现接口时,必须实现该接口中声明的所有方法
::::: details 查看答案与解析
答案:D
解析:
- A 正确:接口支持多继承
- B 正确:类可以实现多个接口
- C 正确:抽象类实现接口时,可以只实现部分方法,未实现的方法仍为抽象方法
- D 错误:抽象类实现接口时,不需要实现所有方法
难度: ⭐⭐
考点: #接口 #抽象类 #多继承
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 接口多继承:接口可以继承多个接口
- 类多实现:一个类可以实现多个接口
- 抽象类实现接口:可以只实现部分方法
::: warning 易错点
- 抽象类实现接口时不需要实现所有方法
- 具体类(非抽象类)实现接口时必须实现所有方法
:::
::::
:::: details 🔄 举一反三
- 如果一个具体类实现了一个接口但没有实现所有方法,会怎样?
::: details 查看练习答案与解析
答案:编译报错
解析:具体类必须实现接口中的所有抽象方法,否则必须声明为抽象类。
:::
::::
:::::
8.以下程序运行的结果是( )
public class Test {
public int div(int a, int b) {
try {
return a / b;
} catch (Exception e) {
System.out.println("Exception");
} catch (NULLException e) {
System.out.println("NullException");
} catch (ArithmeticException e) {
System.out.println("ArithmeticException");
} finally {
System.out.println("finally");
}
return 0;
}
public static void main(String[] args) {
Test demo = new Test();
System.out.println("商是:" + demo.div(9, 10));
}
}
- A.
Exception finally 商是:0 - B.
ArithmeticException finally 商是:0 - C.
finally 商是:0 - D. 编译报错
::::: details 查看答案与解析
答案:D
解析:
Java 异常捕获要求:子类异常必须写在父类异常之前,否则编译报错。
代码中 catch(Exception e) 写在最前面,而 ArithmeticException 是 Exception 的子类,后面的 catch(ArithmeticException e) 永远不可达,编译器报错。
此外,NullException 不是 Java 标准异常类(标准类为 NullPointerException),也会导致编译错误。
难度: ⭐⭐⭐
考点: #异常处理 #catch顺序 #编译错误
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- catch 顺序:子类异常必须在父类异常之前
- 不可达代码:如果父类异常在前,子类异常的 catch 块永远不可达
::: warning 易错点
- 子类异常必须写在父类异常之前,否则编译报错
NullException不是 Java 标准异常类
:::
::::
:::: details 🔄 举一反三
- 将 catch 顺序调整为
ArithmeticException→Exception,调用div(9, 0)输出什么?
::: details 查看练习答案与解析
答案:ArithmeticException然后finally然后商是:0
解析:9/0 抛出 ArithmeticException,匹配第一个 catch 输出 “ArithmeticException”,finally 始终执行,最后 return 0 输出 “商是:0”。
:::
::::
:::::
9.在某个类中存在一个方法:void getSort(int x),以下能作为这个方法的重载的声明的是( )
- A.
public get(float x) - B.
int getSort(int y) - C.
double getSort(int x, int y) - D.
void get(int x, int y) {}
::::: details 查看答案与解析
答案:C
解析:
方法重载要求:方法名相同,参数列表不同,与返回类型无关。
- A:方法名为
get,不是重载 ✗ - B:参数列表相同(形参名不同不算),仅返回类型不同,不是合法重载 ✗
- C:参数个数不同,合法重载 ✓
- D:方法名为
get,不是重载 ✗
难度: ⭐⭐
考点: #方法重载 #参数列表
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 方法重载:同名不同参,与返回类型无关
- 形参名不同不算重载
::: warning 易错点
- 方法重载只看参数列表,不看返回类型和形参名
- 仅返回类型不同不是合法重载
:::
::::
:::: details 🔄 举一反三
- 下列哪个是
public void show(int a)的合法重载?- A.
public int show(int b) - B.
public void show(double a) - C.
public void show() - D. B 和 C 都合法
::: details 查看练习答案与解析
答案:D
解析:A 参数相同仅返回类型不同,不合法;B 参数类型不同,合法;C 参数个数不同,合法。
:::
::::
- A.
:::::
10.以下哪句是错误的?( )
- A. 编译器会搜索要 import 的类的编译结果而不是源文件
- B. import 是要告诉编译器要 import 的包的信息
- C. import 是要把 import 的类的源代码插入到 import 语句所在的地方
- D. 编译器在编译的时候需要能访问得到 import 的类的编译结果文件
::::: details 查看答案与解析
答案:C
解析:
- A 正确:编译器查找的是
.class文件 - B 正确:
import语句告诉编译器所需类的包路径信息 - C 错误:
import不会将源代码插入到当前位置,它只是告诉编译器去哪里找类 - D 正确:编译时需要能访问到被 import 类的
.class文件
难度: ⭐⭐
考点: #import #编译机制
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- import 作用:告诉编译器类的包路径,不是插入源代码
- 与 C 的 #include 区别:
#include是插入源代码,import是指明路径
::: warning 易错点
- Java 的
import不等于 C 语言的#include import不会将源代码插入到当前位置
:::
::::
:::: details 🔄 举一反三
import java.util.*;的作用是什么?
::: details 查看练习答案与解析
答案:告诉编译器在java.util包中查找所需的类
解析:通配符*表示导入包中所有类,但不会实际加载所有类,只在需要时查找。
:::
::::
:::::
11.在 Java 中,关于 HashMap 类的描述,以下选项错误的是( )
- A. HashMap 使用键/值的形式保存数据
- B. HashMap 能够保证其中元素的顺序
- C. HashMap 允许将 null 用作键
- D. HashMap 允许将 null 用作值
::::: details 查看答案与解析
答案:B
解析:
- A 正确:HashMap 基于哈希表,以键值对形式存储数据
- B 错误:HashMap 不保证元素的顺序。如需有序,应使用
LinkedHashMap或TreeMap - C 正确:HashMap 允许一个 null 键
- D 正确:HashMap 允许多个 null 值
难度: ⭐⭐
考点: #HashMap #集合框架
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- HashMap:基于哈希表,键值对存储,不保证顺序
- LinkedHashMap:保持插入顺序
- TreeMap:按键的自然顺序排序
::: warning 易错点
- HashMap 不保证元素顺序
- 如需有序 Map,使用 LinkedHashMap 或 TreeMap
:::
::::
:::: details 🔄 举一反三
- 如果需要按插入顺序遍历 Map,应该使用哪个类?
::: details 查看练习答案与解析
答案:LinkedHashMap
解析:LinkedHashMap 在 HashMap 基础上维护了双向链表,保持键值对的插入顺序。
:::
::::
:::::
12.以下说法错误的是( )
- A. 静态方法可以直接访问本类的静态变量和静态方法
- B. 静态方法可以直接访问本类的非静态变量和非静态方法
- C. 非静态方法可以直接访问本类的静态变量和静态方法
- D. 非静态方法可以直接访问本类的非静态变量和非静态方法
::::: details 查看答案与解析
答案:B
解析:
- A 正确:静态方法属于类,可以直接访问类的静态成员
- B 错误:静态方法不能直接访问非静态成员(非静态成员属于对象实例,需要先创建对象才能访问)
- C 正确:非静态方法中可以直接访问静态成员
- D 正确:非静态方法中可以直接访问同类的其他非静态成员
难度: ⭐⭐
考点: #static #静态方法
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 静态方法:属于类,可直接访问静态成员,不能直接访问非静态成员
- 非静态方法:属于对象,可直接访问静态和非静态成员
::: warning 易错点
- 静态方法不能直接访问非静态成员,必须通过对象引用
- 非静态方法可以访问静态成员
:::
::::
:::: details 🔄 举一反三
- 在静态方法中如何访问非静态成员?
::: details 查看练习答案与解析
答案:创建类的对象,通过对象引用访问
解析:如MyClass obj = new MyClass(); obj.nonStaticMethod();
:::
::::
:::::
13.下列哪个选项定义的抽象类是正确的?( )
- A.
public abstract final class Car { abstract void move(); } - B.
public class abstract Car { abstract void move(); } - C.
public abstract class Car { abstract void drive(); } - D.
public abstract class Car { abstract void drive() { } }
::::: details 查看答案与解析
答案:C
解析:
- A:
abstract和final不能同时修饰类 ✗ - B:关键字顺序错误,
abstract应在class之前 ✗ - C:语法正确 ✓
- D:抽象方法不能有方法体
{ }✗
难度: ⭐⭐
考点: #抽象类 #抽象方法 #final
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 抽象类:用
abstract修饰 - 抽象方法:只有声明,没有方法体
- abstract 与 final:不能同时修饰类
::: warning 易错点
- 抽象方法不能有方法体
{ } abstract和final不能同时修饰类
:::
::::
:::: details 🔄 举一反三
- 下列哪个抽象方法定义是正确的?
- A.
abstract void show() { } - B.
abstract void show(); - C.
void abstract show(); - D.
abstract show();
::: details 查看练习答案与解析
答案:B
解析:A 有方法体,错误;B 无方法体,正确;C 关键字顺序错误;D 缺少返回类型。
:::
::::
- A.
:::::
14.以下程序段输出的结果是( )
public class Test {
public static void main(String args[]) {
String str = "ABCDE";
str.substring(3);
str.concat("XYZ");
System.out.print(str);
}
}
- A.
DE - B.
DEXYZ - C.
ABCDE - D.
CDEXYZ
::::: details 查看答案与解析
答案:C
解析:
String 是不可变的,substring() 和 concat() 方法都返回新字符串,不会修改原字符串。
如果需要修改,应写 str = str.substring(3); 或 str = str.concat("XYZ");。
难度: ⭐⭐
考点: #String不可变 #substring #concat
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- String 不可变:
substring()、concat()等返回新对象,不修改原字符串 - 修改 String:需要赋值
str = str.substring(3);
::: warning 易错点
- String 的所有修改方法都返回新对象,原对象不变
- 必须赋值才能改变引用
:::
::::
:::: details 🔄 举一反三
- 以下代码输出什么?
String s = "hello"; s = s.toUpperCase(); System.out.println(s);
::: details 查看练习答案与解析
答案:HELLO
解析:toUpperCase()返回新字符串,赋值给 s 后 s 指向新对象 “HELLO”。
:::
::::
:::::
15.在下面程序中的括号中,如下哪些代码可以创建并启动线程?( )
class MyRunnable implements Runnable {
public void run() {
// ...
}
}
- A.
new Runnable(MyRunnable).start() - B.
new Thread(MyRunnable).run() - C.
new Thread(new MyRunnable()).start() - D.
new MyRunnable().start()
::::: details 查看答案与解析
答案:C
解析:
创建并启动线程的正确方式:new Thread(Runnable对象).start()
- A:
Runnable是接口,不能这样使用 ✗ - B:调用
run()只是普通方法调用,不会启动新线程 ✗ - C:正确创建并启动线程 ✓
- D:
MyRunnable没有start()方法 ✗
难度: ⭐⭐
考点: #线程创建 #Runnable #start方法
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 线程创建:
new Thread(Runnable).start() - start() vs run():
start()启动新线程,run()只是普通方法调用
::: warning 易错点
- 调用
run()不会启动新线程 Runnable对象没有start()方法,必须包装在Thread中
:::
::::
:::: details 🔄 举一反三
-
继承 Thread 类创建线程的方式是什么?
::: details 查看练习答案与解析class MyThread extends Thread { public void run() { /* ... */ } } new MyThread().start();解析:继承 Thread 类并重写
run()方法,直接调用start()启动线程。
:::
::::
:::::
16.如下程序输出( )
public class Test {
public static void main(String[] args) {
String s = "Java";
StringBuilder buffer = new StringBuilder(s);
change(s);
System.out.println(s);
}
private static void change(String s) {
s = s + " and HTML";
}
}
- A.
Java - B.
Java and HTML - C.
and HTML - D. 什么都不显示
::::: details 查看答案与解析
答案:A
解析:
String 是不可变对象,且 Java 是值传递(引用类型的值是地址的副本)。
方法内的 s 是局部变量,重新赋值不影响 main 中的 s。输出 Java。
难度: ⭐⭐⭐
考点: #值传递 #String不可变
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- Java 值传递:基本类型传值副本,引用类型传地址副本
- String 不可变:修改 String 会创建新对象
::: warning 易错点
- Java 只有值传递,没有引用传递
- String 在方法内重新赋值不影响外部变量
:::
::::
:::: details 🔄 举一反三
- 如果将
change方法的参数改为StringBuilder,输出什么?
::: details 查看练习答案与解析
答案:Java and HTML
解析:StringBuilder 是可变对象,在方法内s.append(" and HTML")会修改原对象内容,外部变量能看到变化。
:::
::::
:::::
17.在使用 super 和 this 关键字时,以下描述正确的是( )
- A. 在子类构造方法中使用
super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 - B.
this()和super()可以同时出现在一个构造函数中 - C.
super()和this()不一定要放在构造方法内第一行 - D.
this()和super()可以在 static 环境中使用,包括 static 方法和 static 语句块
::::: details 查看答案与解析
答案:A
解析:
- A 正确:
super()必须是子类构造方法的第一条语句 - B 错误:两者不能同时出现(都要求在第一行)
- C 错误:都必须在构造方法的第一行
- D 错误:都不能在 static 环境中使用
难度: ⭐⭐
考点: #super #this #构造方法
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- super():调用父类构造方法,必须在第一行
- this():调用本类其他构造方法,必须在第一行
- 互斥:
super()和this()不能同时出现
::: warning 易错点
super()和this()必须在构造方法第一行- 两者不能同时出现在同一个构造方法中
:::
::::
:::: details 🔄 举一反三
- 如果子类构造方法中没有显式调用
super(),会发生什么?
::: details 查看练习答案与解析
答案:编译器自动在第一行添加super(),调用父类的无参构造方法
解析:如果父类没有无参构造方法,编译报错。
:::
::::
:::::
18.下面语句序列执行后,k 的值是什么?( )
int x = 6, y = 10, k;
switch (x % y) {
case 0: k = x * y;
case 6: k = x / y;
case 12: k = x - y;
default: k = x * y - x;
}
- A. 60
- B. 5
- C. 0
- D. 54
::::: details 查看答案与解析
答案:D
解析:
x % y = 6 % 10 = 6,匹配 case 6。
关键:switch 语句中没有 break,会发生贯穿(fall-through):
case 6: k = x / y = 6 / 10 = 0
case 12: k = x - y = 6 - 10 = -4
default: k = x * y - x = 6 * 10 - 6 = 54
最终 k = 54。
难度: ⭐⭐⭐
考点: #switch贯穿 #break #取模运算
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- switch 贯穿:没有 break 会从匹配 case 执行到底
- break:跳出 switch 语句
::: warning 易错点
- switch 语句忘记写 break 导致贯穿
- 贯穿会从匹配的 case 开始执行所有后续 case 和 default
:::
::::
:::: details 🔄 举一反三
- 如果每个 case 后都加上
break;,k 的值是什么?
::: details 查看练习答案与解析
答案:0
解析:匹配 case 6,k = 6 / 10 = 0,break 跳出 switch,k = 0。
:::
::::
:::::
19.下面关于缺省构造方法的描述中正确的是( )
- A. 当类中没有定义任何构造方法时,Java 编译器将为这个类创建缺省构造方法
- B. 缺省构造方法可以初始化其他方法中定义的变量
- C. Java 编译器会为所有的类创建缺省构造方法
- D. 如果在一个类中定义的构造方法都声明了参数,Java 编译器将为这个类创建一个缺省构造方法
::::: details 查看答案与解析
答案:A
解析:
- A 正确:当类中没有定义任何构造方法时,编译器自动生成无参缺省构造方法
- B 错误:缺省构造方法只能初始化成员变量
- C 错误:如果类中已定义了构造方法,编译器不会再创建
- D 错误:已定义带参数的构造方法后,编译器不会再创建缺省构造方法
难度: ⭐⭐
考点: #构造方法 #缺省构造方法
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 缺省构造方法:无参,方法体为空
- 自动生成条件:类中没有定义任何构造方法时
::: warning 易错点
- 如果自定义了构造方法,编译器不再提供默认无参构造
:::
::::
:::: details 🔄 举一反三
- 如果类中定义了
MyClass(int x)但没有定义无参构造方法,new MyClass()能编译吗?
::: details 查看练习答案与解析
答案:不能
解析:已定义有参构造方法后,编译器不再提供默认无参构造方法,需要手动添加。
:::
::::
:::::
20.下列哪个流类属于面向字符的输入流( )
- A.
BufferedWriter - B.
FileInputStream - C.
ObjectInputStream - D.
InputStreamReader
::::: details 查看答案与解析
答案:D
解析:
- A:
BufferedWriter是输出流 ✗ - B:
FileInputStream是字节流 ✗ - C:
ObjectInputStream是字节流 ✗ - D:
InputStreamReader是字节流到字符流的桥梁,属于面向字符的输入流 ✓
难度: ⭐⭐
考点: #IO流 #字符流 #字节流
:::: details 💡 学习锦囊
📖 相关公式与知识点:
- 字节流:InputStream/OutputStream 及其子类
- 字符流:Reader/Writer 及其子类
- InputStreamReader:字节流 → 字符流的桥梁
::: warning 易错点
- FileInputStream 是字节流,不是字符流
- InputStreamReader 是字符输入流
:::
::::
:::: details 🔄 举一反三
- 下列哪个是面向字节的输出流?
- A.
FileReader - B.
FileWriter - C.
FileOutputStream - D.
BufferedReader
::: details 查看练习答案与解析
答案:C
解析:A、D 是字符输入流;B 是字符输出流;C 是字节输出流。
:::
::::
- A.
:::::
更多推荐
所有评论(0)