在刚学习 Java 的时候,很多人会觉得 “类” “对象” “集合” 这些概念有点抽象。与其死记概念,不如动手做一个小项目。

这篇笔记,我们一步一步实现一个最简单的注册系统,功能很纯粹:

  • 输入用户名

  • 输入密码

  • 保存用户

并在过程中理解几个核心知识点:类、对象、输入、集合、循环、判断逻辑

目录

一、定义用户:创建 User 类

❓为什么不把这段代码写在 Main.java里?

二、创建并使用对象

三、接入用户输入

四、支持多个用户(ArrayList)

1️⃣ 导入 ArrayList 集合(必须先导入才能使用)

2️⃣ 创建“用户列表”(容器)

3️⃣ 将注册的用户加入列表

4️⃣ 测试效果(查看用户数量)

五、让程序可以“无限注册”

六、升级:做一个菜单系统

🧠 核心思路

🧱 菜单框架

🧱 条件判断

七、实现功能

✅ 1. 注册功能

✅ 2. 查看用户

✅ 3. 退出系统

八、优化:避免用户名重复(关键)

✔ 解决思路:注册前先检查用户名是否已存在

🧠 “遍历列表找东西” 通用模板

九、完整代码

1. User.java

2. Main.java

🎯 总结

🚀 下一步可以做什么?


一、定义用户:创建 User 类

首先,我们要明确 “用户” 是什么样的——一个用户有用户名和密码两个核心信息,所以我们先创建一个专门的User类,用来定义用户的结构。

新建文件:User.java

public class User {
    String username;
    String password;
}

❓为什么不把这段代码写在 Main.java里?

原因很简单:

  • 分开写,文件不会越变越大,结构更清晰

  • 后续维护更方便(比如修改用户属性,只需要改User.java)

  • 符合“单一职责”:User.java 定义 “用户长什么样”,Main.java 负责“程序怎么运行”(怎么使用用户)


二、创建并使用对象

Main.java 中,创建用户对象,给对象赋值,看看如何操作用户信息:

public class Main {
    public static void main(String[] args) {
        // 创建一个User类的对象,用变量u引用它(相当于“创建一个用户”)
        User u = new User();
        
        // 给这个用户的用户名和密码赋值
        u.username = "admin";
        u.password = "123456";
        
        // 打印用户信息
        System.out.println(u.username); // 输出:admin
        System.out.println(u.password); // 输出:123456
    }
}

⚠️ 注意一个小细节:

如果直接打印对象 System.out.println(u); ,输出的会是类似 com.yyr.demo.User@4eec7777 的内容。

这是因为Java中,打印对象本质上会调用对象的 toString() 方法,而我们没有重写这个方法时,它会默认输出“类名@对象的内存地址”,并不是我们想要的用户信息。


三、接入用户输入

上面的代码中,用户名和密码是我们写死在代码里的,实际注册系统需要用户手动输入,这时候就需要用到 Scanner 类(用于接收控制台输入)。

修改 Main.java,加入输入功能,代码如下:

import java.util.Scanner; // 导入Scanner类,用于接收输入

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象,用于接收用户输入(相当于“打开输入工具”)
        Scanner input = new Scanner(System.in);
        
        // 提示用户输入用户名
        System.out.println("请输入用户名:");
        String username = input.nextLine(); // 接收用户输入的用户名
        
        // 提示用户输入密码
        System.out.println("请输入密码:");
        String password = input.nextLine(); // 接收用户输入的密码
        
        // 创建用户对象,将输入的信息赋值给对象
        User u = new User();
        u.username = username;
        u.password = password;
        
        // 提示注册成功
        System.out.println("注册成功:" + u.username);//这里的u.username和前面的username不一样
    }
}

💡 小提醒:

这里的 u.username 和前面的 username 不一样 —— username 只是一个临时变量,而 u.username 是存在用户对象里的属性,数据已经被“存”到用户对象中了。


四、支持多个用户(ArrayList)

上面的代码只能注册一个用户,关闭程序后数据就没了,我们需要一个 “容器” 来保存多个用户,这里就用到 Java 中的 ArrayList (动态数组,专门用来存多个同类型的数据)。

1️⃣ 导入 ArrayList 集合(必须先导入才能使用)

在Main.java的最顶部,加入导入语句:

import java.util.ArrayList;// 导入ArrayList类

2️⃣ 创建“用户列表”(容器)

在main方法中,创建一个专门用来存User对象的列表,代码如下:

ArrayList<User> users = new ArrayList<>();//users(复数,代表多个用户)

简单理解: ArraryList<User> 就相当于一个 “用户档案袋”,里面只能放User类型的对象(也就是用户)。

3️⃣ 将注册的用户加入列表

在创建用户对象、赋值完成后,用 add() 方法将用户加入列表,代码如下(插入到注册成功提示前):

users.add(u);

4️⃣ 测试效果(查看用户数量)

我们可以打印当前用户列表的长度,确认用户是否保存成功,加入如下代码:

System.out.println("当前用户数量:" + users.size());// size()方法获取列表中元素的个数

这里梳理一下三个关键变量的区别,避免混淆:

变量名

类型

代表什么

users

ArrayList<User>

用户列表(存放所有注册的用户)

u

User

单个用户对象(一次注册的一个用户)

username

String

临时字符串(接收用户输入的用户名)


五、让程序可以“无限注册”

现在我们的系统只能注册一次,不够实用,我们给它加一个“死循环”,让用户可以多次注册。使用死循环:

while (true) {
    // 注册逻辑
}

👉 程序会一直运行,这是正常的


六、升级:做一个菜单系统

目标效果:

1 注册
2 查看用户
3 退出
请选择:

🧠 核心思路

每次循环都打印菜单 → 让用户选择功能 → 根据选择执行对应操作(注册/查看/退出)

🧱 菜单框架

while(true) 创建死循环,循环内部打印菜单,接收用户选择,代码如下:

while (true) {
    System.out.println("1 注册");
    System.out.println("2 查看用户");
    System.out.println("3 退出");
    System.out.println("请选择:");

    String choice = input.nextLine();
}

🧱 条件判断

根据用户选择的 choice ,用 if-else if 判断,执行注册、查看、退出功能,代码如下(插入到接收choice之后):

if (choice.equals("1")) {
    // 注册
} else if (choice.equals("2")) {
    // 查看用户
} else if (choice.equals("3")) {
    break;
} else {
    System.out.println("输入错误");
}

⚠️ 关键注意点:

不能写 if(choice == 1) !因为 choice 是String类型(用户输入的是字符串),而1是int类型,类型不同无法比较;== 比较的是对象地址,equals() 才是比较字符串内容。


七、实现功能

1. 注册功能

将注册代码放入 choice.equals("1") 的判断中

System.out.println("请输入用户名:");
String username = input.nextLine();

System.out.println("请输入密码:");
String password = input.nextLine();

User newUser = new User();
newUser.username = username;
newUser.password = password;

users.add(newUser);

System.out.println("注册成功:" + newUser.username);

2. 查看用户

将查看用户的代码,放入 choice.equals("2") 的判断中,同时处理 “暂无用户” 的情况,代码如下:

if (users.size() == 0) {
    System.out.println("暂无用户");
} else {
    for (int i = 0; i < users.size(); i++) {
        User tempUser = users.get(i);
        System.out.println("用户名:" + tempUser.username + ",密码:" + tempUser.password);
    }
}

 3. 退出系统

System.out.println("退出成功");
break;

八、优化:避免用户名重复(关键)

真实系统中,用户名不能重复,所以注册前要先检查列表中是否已有该用户名

boolean exists = false;

for (int i = 0; i < users.size(); i++) {
    if (users.get(i).username.equals(username)) {
        exists = true;
        break;
    }
}

if (exists) {
    System.out.println("用户名已存在,请重新输入!");
} else {
    users.add(newUser);
    System.out.println("注册成功:" + newUser.username);
}

🧠 “遍历列表找东西” 通用模板

boolean found = false; // 标记是否找到
for (int i = 0; i < 列表.size(); i++) {
    if (查找条件) {
        found = true;
        break;
    }
}
if (found) {
    // 找到的逻辑
} else {
    // 没找到的逻辑
}

九、完整代码

整合所有功能,最终的完整代码如下,复制到对应的文件中,即可直接运行:

1. User.java

public class User {
    String username;
    String password;
}

2. Main.java

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 初始化输入工具和用户列表
        Scanner input = new Scanner(System.in);
        ArrayList&lt;User&gt; users = new ArrayList<>();
        
        // 系统主循环(菜单展示+功能选择)
        while (true) {
            System.out.println("1 注册");
            System.out.println("2 查看用户");
            System.out.println("3 退出");
            System.out.println("请选择:");
            String choice = input.nextLine();
            
            // 1. 注册功能
            if (choice.equals("1")) {
                System.out.println("请输入用户名:");
                String username = input.nextLine();
                System.out.println("请输入密码:");
                String password = input.nextLine();
                
                // 用户名去重判断
                boolean exists = false;
                for (int i = 0; i < users.size(); i++) {
                    if (users.get(i).username.equals(username)) {
                        exists = true;
                        break;
                    }
                }
                
                if (exists) {
                    System.out.println("用户名已存在,请重新输入!");
                } else {
                    User newUser = new User();
                    newUser.username = username;
                    newUser.password = password;
                    users.add(newUser);
                    System.out.println("注册成功:" + newUser.username);
                    System.out.println("当前用户数量:" + users.size());
                }
                
            // 2. 查看用户功能
            } else if (choice.equals("2")) {
                if (users.size() == 0) {
                    System.out.println("暂无用户");
                } else {
                    for (int i = 0; i < users.size(); i++) {
                        User tempUser = users.get(i);
                        System.out.println("用户名:" + tempUser.username + ",密码:" + tempUser.password);
                    }
                }
                
            // 3. 退出功能
            } else if (choice.equals("3")) {
                System.out.println("成功退出!");
                break;
                
            // 输入错误处理
            } else {
                System.out.println("输入错误,请重新输入!");
            }
        }
    }
}

🎯 总结

通过这个简单的注册系统,我们掌握了Java的核心基础知识点:

  • 类与对象:User类定义结构,new User()创建对象,给对象属性赋值

  • 集合使用:ArrayList存储多个用户对象,add()添加元素,size()获取长度,get()获取元素

  • 循环与条件:while循环实现菜单常驻,for循环遍历列表,if-else if判断功能选择

  • 输入输出:Scanner接收用户输入,System.out.println()打印信息


🚀 下一步可以做什么?

如果你想继续升级,可以尝试:

  • 🔐 登录功能(校验用户名密码)

  • 🗑 删除用户

  • ✏ 修改密码

  • 💾 文件存储(让数据不丢失)

  • 🧱 使用封装(private + getter/setter)


如果你是刚入门,这一篇建议你照着敲一遍代码,效果会完全不一样 👍

Logo

汇聚全球AI编程工具,助力开发者即刻编程。