测试说明与范围
考察范围
类与对象
- 类的定义语法
- 对象创建与使用
- 属性与方法
构造函数
- 无参/有参构造
- 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()
提交测试
点击【提交】自动评分
完成后将显示得分、错题解析及改进建议