在Java里如何使用数组完成通讯录项目_Java入门项目说明

发布时间 - 2026-02-02 00:00:00    点击率:
应使用Person类封装姓名和电话再用Person[]数组管理,避免String[]双数组导致的越界、空指针、数据错乱及扩容困难等问题,并需额外维护size变量记录有效元素数。

String[] 存姓名和电话会很快遇到越界和空指针

初学者常直接声明 String[] names = new String[10];String[] phones = new String[10];,靠下标对齐来管理联系人。但实际操作中:
– 插入第 11 条数据时抛出 ArrayIndexOutOfBoundsException
– 删除中间某条后,留下 null 空位,遍历时必须反复判空
– 姓名和电话靠下标“隐式关联”,一旦数组长度不一致或错位,数据就错乱
– 扩容需手动 new 更大数组 + System.arraycopy(),极易漏拷贝或索引偏移

把联系人封装成类再用 Person[] 数组才可控

定义一个 Person 类,包含 namephone 字段和必要构造方法,再用对象数组统一管理:

class Person {
    String name;
    String phone;
    Person(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }
}

这样做的好处:
– 单个 Person 对象天然绑定姓名与电话,不依赖下标对齐
– 判断是否为空只需 persons[i] != null,比双数组少一半判空逻辑
– 查找、删除时操作的是单个引用,不会误动其他字段
– 后续想加邮箱、地址等字段,只改 Person 类,数组层完全不用动

数组长度固定,所以必须自己维护有效元素数 size

不能依赖 persons.length 当联系人数——那是容量,不是实际数量。必须额外用一个 int size 记录当前已存几条:

  • 添加时:先检查 size ,再赋值 persons[size++] = new Person(...)
  • 删除时:把末尾元素挪到被删位置,再执行 size--(避免留空洞)
  • 遍历时:循环条件是 i ,不是 i
  • 打印全部联系人时,如果 size == 0,直接提示“通讯录为空”,别遍历整个数组

真要扩容,Arrays.copyOf() 比手写复制更安全

size == persons.length 时,必须扩容。别自己写循环拷贝:

persons = Arrays.

copyOf(persons, persons.length * 2);

注意点:
Arrays.copyOf() 返回新数组,原引用必须重新赋值,否则扩容无效
– 新数组后半部分自动填 null,不影响 size 控制的访问范围
– 不要用 persons = new Person[persons.length * 2] 然后忘了拷贝——这是最常丢数据的操作
– 如果项目后续要频繁增删,数组就不是最佳结构,该换 ArrayList 了,但入门阶段用数组练逻辑,重点在理解 size 和容量的区别

真正卡住人的从来不是语法,而是没想清楚“我到底要管多少个有效数据”——size 变量漏维护、扩容后忘记重赋值、删完不减 size,这些细节一错,整个通讯录就查不到人、删不对人、显示一堆 null。


# java  # 邮箱  # 区别  # String  # NULL  # 封装  # int  # 循环  # 指针  #   # Length  # 空指针  # 对象  # 再用  # 为空  # 的是  # 人时  # 这是  # 那是  # 遍历  # 只需  # 更大  # 这样做 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: javascript基于原型链的继承及call和apply函数用法分析  如何在Ubuntu系统下快速搭建WordPress个人网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何用好域名打造高点击率的自主建站?  简历在线制作网站免费版,如何创建个人简历?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何在Windows服务器上快速搭建网站?  Laravel如何处理异常和错误?(Handler示例)  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel怎么为数据库表字段添加索引以优化查询  如何在Tomcat中配置并部署网站项目?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  使用豆包 AI 辅助进行简单网页 HTML 结构设计  EditPlus中的正则表达式实战(6)  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  网站制作报价单模板图片,小松挖机官方网站报价?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何实现建站之星域名转发设置?  焦点电影公司作品,电影焦点结局是什么?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  独立制作一个网站多少钱,建立网站需要花多少钱?  油猴 教程,油猴搜脚本为什么会网页无法显示?  免费网站制作appp,免费制作app哪个平台好?  北京网站制作的公司有哪些,北京白云观官方网站?  linux top下的 minerd 木马清除方法  JavaScript数据类型有哪些_如何准确判断一个变量的类型  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何创建自定义中间件?(Middleware代码示例)  js代码实现下拉菜单【推荐】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何挑选最适合建站的高性能VPS主机?  如何快速搭建高效香港服务器网站?  如何利用DOS批处理实现定时关机操作详解  iOS发送验证码倒计时应用  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  如何在腾讯云免费申请建站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  详解Android图表 MPAndroidChart折线图  Laravel如何创建自定义Artisan命令?(代码示例)