Java 一维数组:定义、分配与初始化的全链路教学
Java一维数组是对象,声明引用变量后需用new或大括号初始化,数组存储于堆内存,长度固定,通过length属性获取长度。基本类型元素有默认初始值(数值0,字符空,布尔假),引用类型默认为null。下标从0开始,越界抛出数组下标越界异常。
Ja va 一维数组本质上是一个对象,定义它只是声明了一个引用变量,要真正使用数组,必须通过 new 或直接赋值(大括号)来初始化。推荐用 int[] arr 这种写法。数组对象分配在堆内存中,基本类型元素有默认初始值(数值型 0,char 为 'u0000',boolean 为 false),引用类型默认则是 null。下标从 0 开始,一旦越界就会抛出 ArrayIndexOutOfBoundsException。

说白了,Ja va 的一维数组并不是一个简单的变量,它其实是一个对象。定义数组这一步,只是在声明一个引用变量,告诉你“将来可以指向某个数组对象”。但真正要用它,内存分配和初始化必须跟上——这三点,缺一不可。
一维数组怎么定义?两种写法,推荐一种
定义数组的本质,就是声明一个能指向数组对象的引用变量。语法上其实有两种选择:
- 推荐写法:数据类型[] 数组名,例如 int[] scores; ——这种写法的好处是清晰,一眼就能看出“scores 是 int[] 类型”,符合 Ja va 的类型语义
- 旧式写法:数据类型 数组名[],例如 int scores[]; ——容易让人误以为“scores 是 int 类型”,现在已经不怎么推荐了
注意,到这里只是声明了引用,并没有真正创建数组对象。如果这时候试图访问元素,编译虽然能通过,运行时就会报 NullPointerException 或者未初始化错误。
数组内存在哪分配?必须用 new 或静态初始化
数组既然是引用类型,所有实例自然都存放在堆内存里。分配内存只有两条路可走:
- 动态分配:用 new 数据类型[长度] 明确申请空间,比如 int[] arr = new int[5]; ——系统会分配 5 个 int 的连续空间,每个元素自动设为默认值(int 就是 0)
- 静态分配:用 new 数据类型[]{值1, 值2, ...} 或者简写 数据类型[] arr = {值1, 值2, ...}; ——JVM 会根据你给的元素个数自动推断长度,然后一次性分配并赋值
没有 new 或者大括号初始化,就好比没给数组对象办“出生证”,后面任何下标操作都会直接失败。
初始化后,元素默认值是什么?不同类型不一样
一旦完成初始化(不管是动态还是静态),每个元素就有了确定的初始值。基本类型有固定的默认值,引用类型则默认是 null:
- 数值型(byte/short/int/long/float/double)→ 默认 0 或 0.0
- char → 默认 'u0000'(注意这是空字符,不是空格)
- boolean → 默认 false
- String 或者自定义类的数组 → 每个元素默认 null,如果直接调用方法,会触发 NullPointerException
举个例子:String[] names = new String[3]; 创建之后,names[0]、names[1]、names[2] 全都是 null,必须逐个赋值才能安全使用。
赋值和访问:下标从 0 开始,越界会抛异常
数组的长度是固定的,一旦初始化完成就不能再扩容或缩容。访问和修改元素都得靠下标(索引),规则虽然简单,但必须严格遵守:
- 合法下标范围是 0 到 length - 1,比如长度为 4 的数组,可用下标就是 0、1、2、3
- 赋值示例:arr[0] = 10; arr[2] = 30;
- 读取示例:int first = arr[0]; System.out.println(arr[3]);
- 越界访问(比如 arr[-1] 或者 arr[5],当 length=5)会直接抛出 ArrayIndexOutOfBoundsException
获取数组长度统一用 数组名.length(注意不是 length() 方法),这是数组唯一的公共字段,记住就好。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















