学生类应私有字段+getter/setter+构造器约束必填项;id用Long/String避免0误判;name校验非空;年级等用enum;集合依查询方式选HashMap(按ID查)或ArrayList(遍历展示);控制台输入统一用nextLine()转类型并校验;增删改查需处理重复、空值、不存在等边界。
学生类怎么设计才不踩空指针和数据不一致的坑
学生信息必须封装成类,但新手常把字段全设为
或用
硬编码年级/班级,导致后续修改困难、
频发。核心是:用私有字段 + getter/setter + 构造器约束必填项。
建议用
或
(避免
默认 0 引发误判)
在 setter 中加
年级、专业等固定选项,定义为
(如
),别用字符串比较
避免在类里直接写数据库操作或控制台打印逻辑——职责要单一
用 ArrayList 还是 HashMap 管理学生集合
取决于主要查询方式。如果按学号查最频繁(比如录入成绩、修改信息),
比
快得多;但如果只是遍历列表、分页展示,
更直观、内存占用更低。
用
时,key 选
,确保
不为空且唯一(插入前先
检查)
用
时,查学号得写循环或
,注意返回
而非直接 get(),否则容易
别在运行时混用两种结构存同一份数据——同步成本高,易丢数据
控制台交互怎么避免 Scanner.nextLine() 吃掉回车
这是 Java 控制台项目最经典的陷阱:
或
不读取换行符,紧接着调
就会立刻返回空字符串。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
统一用
读所有输入,再手动转类型:
或者每次调用
后补一句
清缓冲区
输入校验必须做:
判断空白输入,
拦截非法数字格式
增删改查功能里最容易被忽略的边界条件
不是功能写出来就完事,真实使用中用户会乱输、重复添加、查不存在的 ID、删完再删——这些不处理,程序当场崩。
立即学习
“
Java免费学习笔记(深入)
”;
:检查学号是否已存在(
),避免覆盖
:返回
表示是否删除成功,别只打印“删除成功”却没真删
:只更新传入的非 null 字段(比如只改电话,其他字段保持原值),别全量覆盖
所有操作后建议调一次
展示当前状态,方便验证
实际跑起来你会发现,最难的不是写满五个功能,而是让每一步输入都有反馈、每一次删除都可逆、每一个空值都不抛异常——这些细节堆起来,才是项目能“用”的分水岭。
publicStringNullPointerExceptionidLongStringintnameObjects.requireNonNull(name, "姓名不能为空")enumGrade.FRESHMANHashMapArrayListArrayListHashMapstudent.getId()idif (students.containsKey(id))ArrayListstream().filter(...).findFirst()OptionalNoSuchElementExceptionnextInt()nextDouble()nextLine()nextLine()Integer.parseInt(scanner.nextLine().trim())nextInt()scanner.nextLine()trim().isEmpty()!str.matches("\d+")addStudent()map.containsKey(id)deleteStudent(String id)booleanupdateStudent()listAllStudents()