《面向对象程序设计(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 🔄 举一反三

  1. 如果源文件名为 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 🔄 举一反三

  1. 下列哪个是合法的 Java 标识符?
    • A. class
    • B. _name
    • C. 3abc
    • D. my-name
      ::: details 查看练习答案与解析
      答案:B
      解析:A 是 Java 关键字;B 以下划线开头,合法;C 以数字开头,非法;D 含连字符,非法。
      :::
      ::::

:::::

3.以下关于运算符优先级顺序的描述中正确的是( )

  • A. 关系运算符 < 算术运算符 < 赋值运算符
  • B. 赋值运算符 < 关系运算符 < 算术运算符
  • C. 算术运算符 < 关系运算符 < 赋值运算符
  • D. 赋值运算符 < 算术运算符 < 关系运算符

::::: details 查看答案与解析

答案:B

解析:
Java 运算符优先级(从高到低):算术运算符 > 关系运算符 > 赋值运算符

用"<“表示"优先级低于”:赋值运算符 < 关系运算符 < 算术运算符


难度: ⭐⭐
考点: #运算符优先级

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • 运算符优先级:算术 > 关系 > 逻辑 > 赋值
  • 赋值运算符优先级最低

::: warning 易错点

  • 赋值运算符优先级最低
  • 逻辑运算符介于关系运算符和赋值运算符之间
    :::
    ::::

:::: details 🔄 举一反三

  1. 表达式 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 块不再执行

异常类的继承关系:FileNotFoundExceptionIOExceptionException

当产生 IOException 时:

  1. FileNotFoundExceptionIOException 的子类,不匹配 → 跳过
  2. IOException 精确匹配 → 执行,输出 IOException!
  3. Exception 虽然也能匹配,但已被前面的 catch 捕获 → 不执行

难度: ⭐⭐
考点: #异常处理 #异常捕获顺序

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • 异常捕获顺序:子类异常必须在父类异常之前
  • 多 catch 块:从上到下匹配,第一个匹配的执行后不再继续

::: warning 易错点

  • 多个 catch 块只执行第一个匹配的,不会全部执行
  • 子类异常必须写在父类异常之前,否则编译报错
    :::
    ::::

:::: details 🔄 举一反三

  1. 如果产生 FileNotFoundException,会输出什么?
    ::: details 查看练习答案与解析
    答案FileNotFoundException!
    解析FileNotFoundException 精确匹配第一个 catch 块,执行后不再继续。
    :::
    ::::

:::::

5.声明成员变量时,如果不使用任何访问控制符,则以下哪种类型的类不能对该成员进行直接访问( )

  • A. 同一类
  • B. 同一包中的子类
  • C. 同一包中的非子类
  • D. 不同包中的子类

::::: details 查看答案与解析

答案:D

解析:
不使用任何访问控制符时,成员的访问权限为默认(包访问权限/default)

访问者能否访问
同一类
同一包中的子类
同一包中的非子类
不同包中的子类
不同包中的非子类

难度: ⭐
考点: #访问修饰符 #default权限

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • private:本类可访问
  • default(无修饰符):本包可访问
  • protected:本包 + 其他包的子类可访问
  • public:所有类可访问

::: warning 易错点

  • default 权限不允许跨包访问,即使是子类也不行
  • protected 允许跨包的子类访问,这是与 default 的关键区别
    :::
    ::::

:::: details 🔄 举一反三

  1. 如果成员用 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 == str2true,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 🔄 举一反三

  1. 以下代码输出什么?

    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 🔄 举一反三

  1. 如果一个具体类实现了一个接口但没有实现所有方法,会怎样?
    ::: 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) 写在最前面,而 ArithmeticExceptionException 的子类,后面的 catch(ArithmeticException e) 永远不可达,编译器报错。

此外,NullException 不是 Java 标准异常类(标准类为 NullPointerException),也会导致编译错误。


难度: ⭐⭐⭐
考点: #异常处理 #catch顺序 #编译错误

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • catch 顺序:子类异常必须在父类异常之前
  • 不可达代码:如果父类异常在前,子类异常的 catch 块永远不可达

::: warning 易错点

  • 子类异常必须写在父类异常之前,否则编译报错
  • NullException 不是 Java 标准异常类
    :::
    ::::

:::: details 🔄 举一反三

  1. 将 catch 顺序调整为 ArithmeticExceptionException,调用 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 🔄 举一反三

  1. 下列哪个是 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 参数个数不同,合法。
      :::
      ::::

:::::

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 🔄 举一反三

  1. 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 不保证元素的顺序。如需有序,应使用 LinkedHashMapTreeMap
  • C 正确:HashMap 允许一个 null 键
  • D 正确:HashMap 允许多个 null 值

难度: ⭐⭐
考点: #HashMap #集合框架

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • HashMap:基于哈希表,键值对存储,不保证顺序
  • LinkedHashMap:保持插入顺序
  • TreeMap:按键的自然顺序排序

::: warning 易错点

  • HashMap 不保证元素顺序
  • 如需有序 Map,使用 LinkedHashMap 或 TreeMap
    :::
    ::::

:::: details 🔄 举一反三

  1. 如果需要按插入顺序遍历 Map,应该使用哪个类?
    ::: details 查看练习答案与解析
    答案:LinkedHashMap
    解析:LinkedHashMap 在 HashMap 基础上维护了双向链表,保持键值对的插入顺序。
    :::
    ::::

:::::

12.以下说法错误的是( )

  • A. 静态方法可以直接访问本类的静态变量和静态方法
  • B. 静态方法可以直接访问本类的非静态变量和非静态方法
  • C. 非静态方法可以直接访问本类的静态变量和静态方法
  • D. 非静态方法可以直接访问本类的非静态变量和非静态方法

::::: details 查看答案与解析

答案:B

解析:

  • A 正确:静态方法属于类,可以直接访问类的静态成员
  • B 错误:静态方法不能直接访问非静态成员(非静态成员属于对象实例,需要先创建对象才能访问)
  • C 正确:非静态方法中可以直接访问静态成员
  • D 正确:非静态方法中可以直接访问同类的其他非静态成员

难度: ⭐⭐
考点: #static #静态方法

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • 静态方法:属于类,可直接访问静态成员,不能直接访问非静态成员
  • 非静态方法:属于对象,可直接访问静态和非静态成员

::: warning 易错点

  • 静态方法不能直接访问非静态成员,必须通过对象引用
  • 非静态方法可以访问静态成员
    :::
    ::::

:::: details 🔄 举一反三

  1. 在静态方法中如何访问非静态成员?
    ::: 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:abstractfinal 不能同时修饰类 ✗
  • B:关键字顺序错误,abstract 应在 class 之前 ✗
  • C:语法正确 ✓
  • D:抽象方法不能有方法体 { }

难度: ⭐⭐
考点: #抽象类 #抽象方法 #final

:::: details 💡 学习锦囊
📖 相关公式与知识点:

  • 抽象类:用 abstract 修饰
  • 抽象方法:只有声明,没有方法体
  • abstract 与 final:不能同时修饰类

::: warning 易错点

  • 抽象方法不能有方法体 { }
  • abstractfinal 不能同时修饰类
    :::
    ::::

:::: details 🔄 举一反三

  1. 下列哪个抽象方法定义是正确的?
    • A. abstract void show() { }
    • B. abstract void show();
    • C. void abstract show();
    • D. abstract show();
      ::: details 查看练习答案与解析
      答案:B
      解析:A 有方法体,错误;B 无方法体,正确;C 关键字顺序错误;D 缺少返回类型。
      :::
      ::::

:::::

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 🔄 举一反三

  1. 以下代码输出什么?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 🔄 举一反三

  1. 继承 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 🔄 举一反三

  1. 如果将 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 🔄 举一反三

  1. 如果子类构造方法中没有显式调用 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 🔄 举一反三

  1. 如果每个 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 🔄 举一反三

  1. 如果类中定义了 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 🔄 举一反三

  1. 下列哪个是面向字节的输出流?
    • A. FileReader
    • B. FileWriter
    • C. FileOutputStream
    • D. BufferedReader
      ::: details 查看练习答案与解析
      答案:C
      解析:A、D 是字符输入流;B 是字符输出流;C 是字节输出流。
      :::
      ::::

:::::

更多推荐