news 2026/1/25 13:43:08

【Java SE 基础学习打卡】34 数组的定义与初始化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java SE 基础学习打卡】34 数组的定义与初始化

目录

  • 前言
  • 一、先学定义:数组的两种书写格式(推荐第一种)
    • 1.1 推荐格式(直观、规范)
    • 1.2 兼容格式(不推荐,仅了解)
    • 1.3 关键提醒:定义≠初始化
  • 二、静态初始化:直接往收纳盒里放数据(长度自动算)
    • 2.1 语法格式(两种写法,都常用)
    • 2.2 代码示例(新手重点练)
    • 2.3 核心特点
  • 三、动态初始化:先定收纳盒大小,再装数据(有默认值)
    • 3.1 语法格式
    • 3.2 核心:数组的默认值规则(新手必记)
    • 3.3 代码示例(动态初始化 + 赋值 + 默认值验证)
    • 3.4 静态 vs 动态初始化
  • 四、数组长度的获取:length 属性(不是方法!)
    • 4.1 代码示例
    • 4.2 新手避坑:别和 String 的 length () 搞混
  • 五、新手必避的 4 个 “初始化致命坑”
    • 5.1 坑 1:静态与动态初始化混用(最常见)
    • 5.2 坑 2:未初始化直接使用数组
    • 5.3 坑 3:索引越界(初始化后常见)
    • 5.4 坑 4:给数组赋值时类型不匹配
  • 总结

前言

上一节咱们搞懂了数组的核心概念 —— 它是装同类型数据的 “整齐收纳盒”。但光知道概念没用,得学会 “怎么造这个收纳盒(定义数组)” 和 “怎么往里面装数据(初始化数组)”:比如想装 5 个学生的成绩,是先定盒子大小再装数据,还是直接把成绩放进去让系统自动定大小?为什么刚造好的盒子里会有默认值?

这一节咱们就聚焦数组的 “创建 + 初始化”,从定义格式(两种写法,推荐更规范的那种),到静态初始化(直接装数据)、动态初始化(先定大小再装),再到 length 属性获取长度,最后拆解新手最容易踩的初始化误区。

一、先学定义:数组的两种书写格式(推荐第一种)

定义数组就是 “声明要造一个什么样的收纳盒”,Java 提供了两种合法格式,新手优先记推荐格式,更符合行业规范。

1.1 推荐格式(直观、规范)

数据类型[]数组名;
  • 示例:

    // 声明一个装int类型成绩的数组(收纳盒只装整数)int[]scores;// 声明一个装double类型价格的数组(收纳盒只装小数)double[]prices;// 声明一个装String类型姓名的数组(收纳盒只装字符串)String[]names;
  • 核心优势:[]跟在数据类型后,一眼就能看出 “这是一个数组”,比如int[]直接表示 “int 类型的数组”,可读性更高。

1.2 兼容格式(不推荐,仅了解)

数据类型 数组名[];
  • 示例:

    // 效果和int[] scores一样,但可读性差intscores[];
  • 为什么不推荐:这种写法是为了兼容 C/C++ 语法,[]跟在数组名后,容易误以为 “scores 是 int 类型,后面加 [] 是补充”,新手容易混淆。

1.3 关键提醒:定义≠初始化

新手容易犯的错:以为定义数组后就能直接用 —— 比如int[] scores; scores[0] = 90;,这会编译报错!因为定义只是 “说要造盒子”,还没真正创建盒子(分配内存),必须初始化后才能用。

二、静态初始化:直接往收纳盒里放数据(长度自动算)

静态初始化就是 “造盒子的时候直接把东西放进去”,不用指定盒子大小,系统会根据你放的元素个数自动计算数组长度。

2.1 语法格式(两种写法,都常用)

写法 1(完整格式,清晰)

数据类型[]数组名=new数据类型[]{元素1,元素2,...,元素n};

写法 2(简化格式,常用)

数据类型[]数组名={元素1,元素2,...,元素n};

2.2 代码示例(新手重点练)

publicclassArrayStaticInit{publicstaticvoidmain(String[]args){// 写法1:完整静态初始化(装3个学生成绩)int[]scores1=newint[]{90,85,95};System.out.println("scores1的第1个成绩:"+scores1[0]);// 输出90// 写法2:简化静态初始化(装4个商品价格)double[]prices={9.9,19.9,29.9,39.9};System.out.println("prices的第2个价格:"+prices[1]);// 输出19.9// 装字符串的数组(静态初始化)String[]names={"张三","李四","王五"};System.out.println("names的第3个姓名:"+names[2]);// 输出王五}}

2.3 核心特点

  • 元素类型必须和数组类型一致:比如int[]里不能装"90"(字符串),编译报错;

  • 长度由元素个数决定:比如{90,85,95}有 3 个元素,数组长度就是 3,后续不能改;

  • 简化写法只能在声明时用:比如不能先定义再用简化写法,下面的代码会报错:

    // 错误示例:简化初始化只能和声明写在一起int[]scores;scores={90,85,95};// 编译报错

三、动态初始化:先定收纳盒大小,再装数据(有默认值)

动态初始化就是 “先造一个指定大小的空盒子”,暂时不装自定义数据,系统会给每个位置赋默认值,后续再手动赋值。

3.1 语法格式

数据类型[]数组名=new数据类型[数组长度];
  • 示例:

    // 造一个能装5个int类型成绩的空盒子(长度固定为5)int[]scores=newint[5];

3.2 核心:数组的默认值规则(新手必记)

刚动态初始化的数组,每个元素都有 “默认初始值”,规则按数据类型分,记牢下面的表,避免误以为 “空盒子里啥都没有”:

数据类型分类具体类型默认值示例(int [5] 的默认值)
整数类型byte/short/int/long0scores[0] = 0
浮点类型float/double0.0prices[0] = 0.0
字符类型char‘\u0000’(空字符,不是空格)chars[0] = ‘\u0000’
布尔类型booleanfalseflags[0] = false
引用类型String / 数组 / 对象null(表示 “空”,无指向)names[0] = null

3.3 代码示例(动态初始化 + 赋值 + 默认值验证)

publicclassArrayDynamicInit{publicstaticvoidmain(String[]args){// 1. 动态初始化:造一个长度为3的int数组(默认值都是0)int[]scores=newint[3];System.out.println("初始化后默认值:"+scores[0]);// 输出0// 2. 手动给数组元素赋值scores[0]=90;// 第1个位置装90scores[1]=85;// 第2个位置装85scores[2]=95;// 第3个位置装95// 3. 访问赋值后的元素System.out.println("赋值后第1个成绩:"+scores[0]);// 输出90// 验证引用类型数组的默认值(String数组)String[]names=newString[2];System.out.println("String数组默认值:"+names[0]);// 输出null}}

3.4 静态 vs 动态初始化

初始化方式适用场景核心特点
静态初始化知道要装的所有元素值直接赋值,长度自动算
动态初始化只知道数组长度,元素值后续确定先定长度,有默认值,后续手动赋值
  • 例子:

    • 装已知的 3 个成绩:用静态初始化int[] scores = {90,85,95}

    • 装 5 个还没统计的成绩:用动态初始化int[] scores = new int[5],后续统计后再赋值。

四、数组长度的获取:length 属性(不是方法!)

数组创建后,能通过数组名.length获取长度(收纳盒的格子数),新手一定要注意:length属性,不是方法,后面没有()

4.1 代码示例

publicclassArrayLength{publicstaticvoidmain(String[]args){// 静态初始化:长度3int[]scores={90,85,95};System.out.println("scores数组长度:"+scores.length);// 输出3// 动态初始化:长度5double[]prices=newdouble[5];System.out.println("prices数组长度:"+prices.length);// 输出5// 遍历数组(结合length)for(inti=0;i<scores.length;i++){System.out.println("第"+(i+1)+"个成绩:"+scores[i]);}}}

4.2 新手避坑:别和 String 的 length () 搞混

// 错误示例:数组用length(),编译报错System.out.println(scores.length());// 报错:找不到方法length()// 正确对比:Stringstr="Java";System.out.println(str.length());// 字符串是方法,带(),输出4int[]arr={1,2,3};System.out.println(arr.length);// 数组是属性,不带(),输出3

五、新手必避的 4 个 “初始化致命坑”

5.1 坑 1:静态与动态初始化混用(最常见)

  • 错误示例:既指定长度又直接赋值

    // 想同时指定长度3和元素{1,2,3},编译报错int[]arr=newint[3]{1,2,3};
  • 后果:编译报错!提示 “数组初始化器不是一个表达式”;

  • 解决方法:二选一:

    // 要么静态初始化(不指定长度)int[]arr={1,2,3};// 要么动态初始化(先指定长度,后续赋值)int[]arr=newint[3];arr[0]=1;arr[1]=2;arr[2]=3;

5.2 坑 2:未初始化直接使用数组

  • 错误示例:只定义不初始化,直接赋值

    // 只声明数组,未创建/初始化int[]scores;scores[0]=90;// 编译报错:可能尚未初始化变量scores
  • 后果:编译报错!定义只是 “说要造盒子”,还没真正分配内存;

  • 解决方法:声明后立即初始化:

    int[]scores=newint[5];// 动态初始化scores[0]=90;// 正常赋值

5.3 坑 3:索引越界(初始化后常见)

  • 错误示例:访问超出数组长度的索引

    int[]arr={1,2,3};// 长度3,索引0/1/2System.out.println(arr[3]);// 访问索引3,运行时报错
  • 后果:运行时抛出ArrayIndexOutOfBoundsException(数组索引越界),程序崩溃;

  • 解决方法:访问索引必须满足0 ≤ 索引 < 数组长度,比如长度 3 的数组,索引只能是 0、1、2。

5.4 坑 4:给数组赋值时类型不匹配

  • 错误示例:int 数组装字符串

    int[]scores=newint[3];scores[0]="90";// 编译报错:String无法转换为int
  • 后果:编译报错!数组只能装定义时指定类型的元素;

  • 解决方法:赋值类型必须和数组类型一致:

    scores[0]=90;// int类型,匹配

总结

这一节咱们掌握了数组定义与初始化的核心技能,记住 3 个核心点:

  1. 定义数组优先用数据类型[] 数组名,更规范;

  2. 初始化二选一:静态(直接装数据,长度自动算)、动态(先定长度,有默认值),不能混用;

  3. 获取长度用数组名.length(属性,无括号),避免和字符串的 length () 混淆。

数组的初始化是使用数组的基础,掌握后就能真正把 “收纳盒” 造好并装数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/21 7:28:51

批量上传+自动导出,Fun-ASR让语音处理自动化

批量上传自动导出&#xff0c;Fun-ASR让语音处理自动化 在企业日常运营中&#xff0c;会议录音、客服对话、培训音频等语音数据正以前所未有的速度积累。如何高效地将这些“声音资产”转化为可编辑、可分析的文字内容&#xff0c;成为许多团队面临的现实挑战。传统人工听写效率…

作者头像 李华
网站建设 2026/1/21 7:28:28

Sunshine游戏串流平台终极指南:从零搭建高性能游戏云

Sunshine游戏串流平台终极指南&#xff1a;从零搭建高性能游戏云 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器&#xff0c;支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshin…

作者头像 李华
网站建设 2026/1/21 7:28:16

BetterNCM插件管理器完整安装教程:从入门到精通

BetterNCM插件管理器完整安装教程&#xff1a;从入门到精通 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM是一款功能强大的网易云音乐插件管理器&#xff0c;能够为你的音乐…

作者头像 李华
网站建设 2026/1/24 10:36:09

解锁Linux平台B站客户端:从零开始的全功能体验指南 [特殊字符]

解锁Linux平台B站客户端&#xff1a;从零开始的全功能体验指南 &#x1f680; 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 作为一名Linux用户&#xff0c;你是否曾经…

作者头像 李华
网站建设 2026/1/21 7:27:12

AMD Ryzen调试工具高效实战指南:从入门到精通

AMD Ryzen调试工具高效实战指南&#xff1a;从入门到精通 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/1/21 7:27:10

鸣潮自动化工具终极指南:解放双手的游戏效率神器

鸣潮自动化工具终极指南&#xff1a;解放双手的游戏效率神器 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为重复刷…

作者头像 李华