测试说明与范围

考察范围

类与对象

  • 类的定义语法
  • 对象创建与使用
  • 属性与方法

构造函数

  • 无参/有参构造
  • this 关键字
  • 构造重载

封装与访问权限

  • private/protected/public/default
  • getter/setter

static 与包

  • static 变量/方法/代码块
  • package 与 import

答题须知

  • 每题单选/多选已标明,共 20 题,满分 100 分
  • 编程题需贴完整代码,注意缩进与规范
  • 完成后点击下方【提交】按钮查看分数与解析

选择题(每题 5 分)

1. 下列关于构造函数说法正确的是?(单选)
  • A. 构造函数必须显式声明返回类型
  • B. 构造函数名称必须与类名相同
  • C. 一个类只能有一个构造函数
  • D. 构造函数可以被 static 修饰
构造函数名称与类名一致,无返回类型;可以有多个重载;不能用 static。
2. 关于 this 关键字用法错误的是?(单选)
  • A. this.name = name; 区分同名成员变量与形参
  • B. this(); 调用本类其他构造方法
  • C. this 可在 static 方法中使用
  • D. this.toString(); 调用当前对象方法
this 代表当前对象引用,不能在 static 上下文中使用,因为 static 属于类级别。
3. 访问权限按可见范围从小到大排序正确的是?(单选)
  • A. private < protected < default < public
  • B. private < default < protected < public
  • C. default < private < protected < public
  • D. protected < default < private < public
正确顺序:private(同类)< default(同包)< protected(同包+子类)< public(全局)。
4. 下列关于 static 说法正确的是?(多选)
  • A. static 变量属于类,被所有对象共享
  • B. static 方法可通过 类名.方法名() 调用
  • C. static 方法内部可直接访问非 static 成员
  • D. static 代码块在类加载时执行一次
static 方法只能直接访问 static 成员;非 static 成员需先创建对象。
5. 包名与目录结构对应关系正确的是?(单选)
  • A. 包名 com.itheima.util → 目录 /com/itheima/util
  • B. 包名 com.itheima.util → 目录 com/itheima/util
  • C. 包名与目录名大小写可忽略
  • D. 包名可以包含空格
包名与目录层级一一对应,大小写敏感,不能有空格。

判断改错题(每题 5 分)

6. 判断并改正:一个源文件可以声明多个 public 类。
错误。一个 .java 源文件只能有一个与文件名相同的 public 类,其余类不能使用 public 修饰。
7. 判断并改正:使用 import java.*; 可以导入 java 及其所有子包。
错误。通配符 * 只导入当前包下类,不会递归导入子包。应使用 import java.util.*; 等形式。

编程题(共 50 分)

8. 【类设计 20 分】创建 com.test.bank 包,完成 BankAccount 类
  • 属性:private String id; private double balance; private static double interestRate = 0.03;
  • 构造:无参 & 全参
  • 方法:deposit、withdraw、transfer、toString
  • 封装:提供 getter/setter,balance 只读
package com.test.bank; public class BankAccount { private String id; private double balance; private static double interestRate = 0.03; public BankAccount() {} public BankAccount(String id, double balance) { this.id = id; this.balance = balance; } public void deposit(double amt) { balance += amt; } public boolean withdraw(double amt) { if (amt <= balance) { balance -= amt; return true; } return false; } public boolean transfer(BankAccount target, double amt) { if (this.withdraw(amt)) { target.deposit(amt); return true; } return false; } @Override public String toString() { return "BankAccount{id='" + id + "', balance=" + balance + "}"; } // getter & setter 略 }
9. 【封装测试 15 分】在 com.test.demo 包内创建 Main 类测试 BankAccount
  • 创建两个账户并初始化余额
  • 调用 transfer 方法转账并打印结果
  • 尝试直接修改 balance(应失败)
package com.test.demo; import com.test.bank.BankAccount; public class Main { public static void main(String[] args) { BankAccount a1 = new BankAccount("A001", 1000); BankAccount a2 = new BankAccount("A002", 500); System.out.println(a1.transfer(a2, 200)); System.out.println(a1); System.out.println(a2); // a1.balance = 999; // 编译错误:balance 是 private } }
10. 【static 应用 15 分】为 BankAccount 添加静态功能
  • 静态变量 accountCount 记录开户总数
  • 在构造方法中自增 accountCount
  • 提供静态方法 getAccountCount()
public class BankAccount { private static int accountCount = 0; ... public BankAccount(...) { ... accountCount++; } public static int getAccountCount() { return accountCount; } } // 在 Main 中调用 BankAccount.getAccountCount()

提交测试

点击【提交】自动评分

完成后将显示得分、错题解析及改进建议