Java初学者项目实战:创建一个基本的用户管理系统

初学者应先用ArrayList和User类实现内存级CRUD,避免过早引入Spring Boot或数据库;User需含id、name、email并重写toString();操作时注意判空、输入缓冲区清理及字符串用equals()比较。

Java初学者做用户管理系统,别急着写 Spring Boot 或数据库连接——先用 ArrayList 和基础类把增删改查逻辑跑通,否则一上来就配 application.yml 或写 JDBC 会卡在异常堆栈里出不来。

User 类 + ArrayList 实现内存级 CRUD

这是最轻量、最可控的起点。所有操作都在 JVM 内存中完成,不涉及文件读写或 SQL,避免 I/O 权限、驱动版本、URL 格式等干扰项。

关键点:

  • User 类必须有 id(建议用 int 自增)、nameemail 字段,并重写 toString() 方便调试
  • 主管理类(如 UserManager)持有一个 private List users = new ArrayList();
  • 新增用户时,id 应取 users.size() + 1(或维护一个 nextId 计数器),避免重复 ID
  • 根据 id 查找/删除时,务必判空:用 if (user != null) 包裹业务逻辑,否则 NullPointerException 会直接中断流程
public class User {
    private int id;
    private String name;
    private String email;

    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // getter/setter 省略
    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "', email='" + email + "'}";
    }
}

命令行交互别硬写 Scanner 嵌套,用状态机思路拆解

初学者常把所有 System.out.printlnscanner.nextLine() 堆在 main 方法里,结果输入一个数字后回车没消费掉换行符,下一次 nextLine() 直接返回空字符串——这不是逻辑错,是输入缓冲区没清理。

更稳的做法:

  • 用一个 while (true) 循环 + switch 处理主菜单选项(1-添加,2-查询,0-退出)
  • 每个功能单独抽成方法,比如 addUser(Scanner scanner),并在方法内统一调用 scanner.nextLine() 消费残留换行符
  • 对数字输入,先用 scanner.hasNextInt() 判断,再用 scanner.nextInt(),之后立刻跟一句 scanner.nextLine()

避免在 equals() 中用 == 比较字符串

用户输入邮箱后想按邮箱查找,如果写成 user.getEmail() == inputEmail,永远返回 false。Java 中字符串内容比较必须用 .equals(),且要防 null

  • 推荐写法:Objects.equals(user.getEmail(), inputEmail)(需静态导入 java.util.Objects
  • 手动判空写法:inputEmail != null && inputEmail.equals(user.getEmail())
  • 别用 String.equalsIgnoreCase() 除非明确需要忽略大小写——邮箱本身

    是大小写敏感的(虽然多数服务端不区分,但 Java 层逻辑应严格)

下一步扩展前先做三件事

等控制台能稳定增删改查后,再考虑升级:

  • ArrayList 替换成 HashMap,用 id 当 key,把查/删时间从 O(n) 降到 O(1)
  • 加一个 saveToFile(String filename) 方法,用 ObjectOutputStream 序列化整个列表(注意 User 要实现 Serializable
  • 把控制台交互换成简易 Swing 界面时,别直接在事件监听里写业务逻辑——把 UserManager 当成纯数据层,GUI 只负责调用它的方法并更新显示

真正容易卡住的不是语法,而是没意识到:用户输入的换行符、字符串引用比较、集合遍历时的并发修改异常(ConcurrentModificationException)——这些不会报“找不到符号”,但会让你对着黑窗口干瞪眼。