当前位置: 首页 > news >正文

10年老兵带你学Java(第3课):数组和方法 - 代码的复用


本课目标

  • 数组:一组数据的容器
  • 方法:代码的复用
  • 面向对象入门:类和方法的关系

上节课学了变量,一个变量存一个数据。
这节课学数组,一个变量存一组数据。还有方法,把代码打包成可复用的块。


一、数组:装一组数据

1.1 什么是数组?

假设你要存5个学生的成绩:

  • 不用数组:score1、score2、score3、score4、score5 → 变量太多管不过来
  • 用数组:一个数组score,存5个成绩

数组的特点:

  • 长度固定(创建时确定)
  • 索引从0开始
  • 存取速度快

1.2 数组的声明和创建

方式1:先声明后创建

int[]scores;// 声明数组scores=newint[5];// 创建数组,长度为5

方式2:声明和创建一起

int[]scores=newint[5];

方式3:直接初始化

int[]scores={90,85,78,92,88};

1.3 数组的使用

publicclassArrayDemo{publicstaticvoidmain(String[]args){int[]scores={90,85,78,92,88};// 访问数组元素(索引从0开始)System.out.println("第一个成绩:"+scores[0]);// 90System.out.println("第三个成绩:"+scores[2]);// 78// 修改数组元素scores[0]=95;System.out.println("修改后第一个成绩:"+scores[0]);// 95// 获取数组长度System.out.println("数组长度:"+scores.length);// 5}}

1.4 遍历数组(重点)

方式1:普通for循环

int[]scores={90,85,78,92,88};for(inti=0;i<scores.length;i++){System.out.println("第"+(i+1)+"个成绩:"+scores[i]);}

方式2:增强for循环(推荐)

int[]scores={90,85,78,92,88};for(intscore:scores){System.out.println("成绩:"+score);}

解释:for (int score : scores)的意思是:依次取出scores里的每个元素,存到score变量里。

1.5 数组的默认值

创建数组但没赋值时,会有默认值:

类型默认值
整数(int、long)0
浮点数(float、double)0.0
布尔(boolean)false
引用类型(String等)null(空引用)
int[]arr=newint[3];System.out.println(arr[0]);// 0System.out.println(arr[1]);// 0

1.6 数组的常见操作

求平均分:

int[]scores={90,85,78,92,88};intsum=0;for(intscore:scores){sum+=score;}doubleaverage=(double)sum/scores.length;System.out.println("平均分:"+average);// 86.6

找最大值:

int[]scores={90,85,78,92,88};intmax=scores[0];// 假设第一个是最大for(inti=1;i<scores.length;i++){if(scores[i]>max){max=scores[i];}}System.out.println("最高分:"+max);// 92

二、方法:代码的复用

2.1 什么是方法?

方法(Method)就是一段可以反复调用的代码。

打个比方:

  • 变量是盒子,装数据
  • 方法是工具箱,装功能

方法的好处:

  1. 减少代码重复
  2. 代码结构更清晰
  3. 方便维护和修改

2.2 方法的定义

语法:

访问修饰符 返回类型 方法名(参数列表){// 方法体return结果;}

例子:无参无返回值

publicvoidsayHello(){System.out.println("Hello!");}

例子:有参有返回值

publicintadd(inta,intb){returna+b;}

2.3 方法的调用

publicclassMethodDemo{publicstaticvoidmain(String[]args){MethodDemodemo=newMethodDemo();// 调用无返回值方法demo.sayHello();// 调用有返回值方法intresult=demo.add(10,20);System.out.println("10 + 20 = "+result);}publicvoidsayHello(){System.out.println("Hello!");}publicintadd(inta,intb){returna+b;}}

注意:在同一个类里,static方法可以直接调用,非static方法需要先创建对象。

2.4 方法的参数

无参方法:

publicvoidprintLine(){System.out.println("============");}

有参方法:

publicvoidprintName(Stringname){System.out.println("姓名:"+name);}// 调用printName("张三");// 输出:姓名:张三

多个参数:

publicintmax(inta,intb){returna>b?a:b;}// 调用intm=max(10,20);// m = 20

2.5 方法的返回值

  • void:不返回任何值
  • 其他类型:返回对应类型的值
// 返回intpublicintgetSum(inta,intb){returna+b;}// 返回StringpublicStringgetGreeting(Stringname){return"你好,"+name+"!";}// 返回booleanpublicbooleanisAdult(intage){returnage>=18;}

2.6 方法重载

同一个类里,方法名可以相同,但参数列表必须不同。

publicclassOverloadDemo{// 两个int参数publicintadd(inta,intb){returna+b;}// 三个int参数(重载)publicintadd(inta,intb,intc){returna+b+c;}// 两个double参数(重载)publicdoubleadd(doublea,doubleb){returna+b;}publicstaticvoidmain(String[]args){OverloadDemodemo=newOverloadDemo();System.out.println(demo.add(1,2));// 3System.out.println(demo.add(1,2,3));// 6System.out.println(demo.add(1.5,2.5));// 4.0}}

编译器根据参数类型和数量判断调用哪个。


三、面向对象入门:类和方法的关系

3.1 什么是类?

类(Class)是对象的模板。

打个比方:

  • 图纸,定义了对象长什么样
  • 对象实物,根据图纸造出来的

类包含:

  • 属性(也叫字段):对象的特征
  • 方法:对象的行为

3.2 类的定义

例子:定义一个学生类

publicclassStudent{// 属性Stringname;intage;intscore;// 方法:自我介绍publicvoidintroduce(){System.out.println("大家好,我叫"+name+",今年"+age+"岁");}// 方法:考试publicvoidexam(intscore){this.score=score;System.out.println(name+"这次考试得了"+score+"分");}}

解释:

  • this.name指的是当前对象的name属性
  • this可以省略,但如果参数名和属性名相同,就必须用this区分

3.3 对象的创建和使用

publicclassMain{publicstaticvoidmain(String[]args){// 创建对象(new关键字)Students1=newStudent();Students2=newStudent();// 给属性赋值s1.name="张三";s1.age=18;s2.name="李四";s2.age=19;// 调用方法s1.introduce();// 输出:大家好,我叫张三,今年18岁s2.introduce();// 输出:大家好,我叫李四,今年19岁s1.exam(95);s2.exam(88);}}

3.4 构造方法(重点)

构造方法是创建对象时自动调用的方法。

publicclassStudent{Stringname;intage;// 无参构造方法publicStudent(){System.out.println("无参构造被调用");}// 有参构造方法publicStudent(Stringname,intage){this.name=name;this.age=age;System.out.println("有参构造被调用");}publicvoidintroduce(){System.out.println("大家好,我叫"+name+",今年"+age+"岁");}}

使用:

Students1=newStudent();// 调用无参构造Students2=newStudent("张三",18);// 调用有参构造

注意:

  • 如果不写构造方法,Java会自动提供一个无参构造
  • 如果写了有参构造,Java就不再提供无参构造

四、综合练习:学生成绩管理系统

4.1 需求

用数组和方法,实现一个简单的成绩管理系统:

  1. 存储5个学生的成绩
  2. 计算平均分
  3. 找最高分和最低分

4.2 代码

publicclassScoreManager{// 存储成绩的数组privateint[]scores;// 构造方法,初始化数组publicScoreManager(intsize){scores=newint[size];}// 添加成绩publicvoidaddScore(intindex,intscore){if(index>=0&&index<scores.length){scores[index]=score;}}// 计算平均分publicdoublegetAverage(){intsum=0;for(intscore:scores){sum+=score;}return(double)sum/scores.length;}// 获取最高分publicintgetMax(){intmax=scores[0];for(inti=1;i<scores.length;i++){if(scores[i]>max){max=scores[i];}}returnmax;}// 获取最低分publicintgetMin(){intmin=scores[0];for(inti=1;i<scores.length;i++){if(scores[i]<min){min=scores[i];}}returnmin;}// 打印所有成绩publicvoidprintAll(){System.out.print("成绩列表:");for(intscore:scores){System.out.print(score+" ");}System.out.println();}// 主方法publicstaticvoidmain(String[]args){ScoreManagermanager=newScoreManager(5);// 添加成绩manager.addScore(0,90);manager.addScore(1,85);manager.addScore(2,78);manager.addScore(3,92);manager.addScore(4,88);// 输出结果manager.printAll();System.out.println("平均分:"+manager.getAverage());System.out.println("最高分:"+manager.getMax());System.out.println("最低分:"+manager.getMin());}}

4.3 运行结果

成绩列表:90 85 78 92 88 平均分:86.6 最高分:92 最低分:78

五、常见错误

❌ 错误1:数组越界

int[]arr={1,2,3};// 错误!索引3越界(数组长度是3,索引0-2)System.out.println(arr[3]);// 正确System.out.println(arr[2]);// 输出3

❌ 错误2:空指针异常

int[]arr;// 只是声明,没有创建数组// 错误!arr是null,访问null会报NullPointerExceptionSystem.out.println(arr.length);// 正确arr=newint[3];System.out.println(arr.length);// 3

❌ 错误3:方法忘记返回值

// 错误!声明了返回int,但没returnpublicintgetMax(){inta=10;intb=20;// 缺少 return}// 正确publicintgetMax(){inta=10;intb=20;returna>b?a:b;}

六、本课总结

  • 数组:装一组数据,长度固定,索引从0开始
  • 方法:代码复用,把功能打包成方法
  • 面向对象:类是大图纸,对象是根据图纸造的实物
  • 构造方法:创建对象时自动调用的特殊方法

记住:

  • 数组索引从0开始,别越界
  • 访问数组前要确保它已经创建(不是null)
  • 方法重载看参数列表,不是看返回值
  • this关键字指向当前对象

七、下节课预告

第4课:面向对象三大特性

  • 封装:把数据藏起来
  • 继承:子承父业
  • 多态:同一个方法,不同的表现

这是面向对象的核心,理解了这三特性,才算真正入门Java。


关注我,跟着老兵学Java,少走弯路。

💬评论区聊聊:学完这课,数组和方法的哪个用法最容易搞混?

http://www.jsqmd.com/news/668794/

相关文章:

  • 贵阳找工作该看什么?一份2026年本地招聘市场完整观察指南 - 精选优质企业推荐官
  • Product Hunt 每日热榜 | 2026-04-19
  • HarmonyOS原子化服务:轻量化应用的未来形态
  • Windows 10系统清理终极指南:让旧电脑重获新生的免费神器
  • 面试官灵魂拷问:Linux软链接与硬链接到底有什么区别?(附底层Inode级深度图解)
  • RKMEDIA VO图层配置与双屏显示实战
  • C语言分支循环作业错题与心得
  • 如何学好C语言:从入门到精通,掌握编程基石
  • 我重新梳理了一遍 RAG,终于明白它不只是接个向量库
  • 为什么92%的AGI项目在记忆对齐阶段失败?——2026奇点大会实测数据揭示5大认知断层与3步修复协议(含开源Memory-LLM v0.9预览版)
  • zmq源码分析之io_thread_t
  • 贵阳伍子柒网络|贵阳本地企业专属GEO服务商,技术适配、效果可查、服务贴心
  • Wan2.2-I2V-A14B与Dify集成:打造无需编码的AI视频工作流
  • 5G流量卡科普与避坑指南:如何选择正规号卡
  • 【AI大语言模型基础(0)】
  • 常用API:
  • 别再学框架了!2026奇点大会证实:未来3年高薪岗位只筛选这7种AGI协同行为模式
  • 2025-2026年全球访客机品牌推荐:五大口碑产品评测对比顶尖工厂访客身份核验繁琐 - 品牌推荐
  • mysql如何优化索引以减少扫描_mysql高效索引设计原则
  • 终极免费视频下载工具:ytDownloader完整使用指南
  • 2025-2026年香港求职机构推荐:五大口碑服务评测对比顶尖求职者面试技巧不足 - 品牌推荐
  • 从寄存器手册到代码:手把手教你逆向分析ES8311官方驱动配置逻辑
  • 刚刚,4月编程排行榜出炉,AI都能写代码了,C语言凭啥还排第二?
  • H3C交换机上给不同VLAN配DHCP,一次搞定网关、地址池和DNS(附完整命令)
  • 【AGI蛋白质折叠预测革命】:2024年AlphaFold 3与RoseTTAFold AI实测对比,精准度突破99.2%的5大临床应用落地路径
  • 2025-2026年访客机品牌推荐:五大口碑产品评测对比顶尖工厂安全管理访客滞留案例 - 品牌推荐
  • FPGA设计里选乘法器IP还是写RTL?从面积、时序和易用性帮你决策
  • 2025-2026年香港求职机构推荐:五大口碑服务评测对比顶尖职场新人面试紧张缺乏经验 - 品牌推荐
  • 纯小白地面站烧录Pixhawk2.4.8并校准
  • 赛元SC95F8617触摸库实战:从电机干扰到人体检测,我的按摩椅项目避坑实录