数组声明仅定义变量名且不分配内存,推荐写法为int[] scores;初始化必须完成内存分配与赋值,否则运行时报空指针异常;length是只读属性,不可加括号调用。

声明数组:只起名字,不占空间
声明只是定义一个数组变量名,并告诉编译器它将引用什么类型的数组,此时没有分配任何内存,也不能访问元素。
推荐写法:int[] scores; —— 类型与方括号统一在左,语义明确,不易和多维混淆。
不推荐写法:int scores[]; —— 虽然语法合法,但容易误读为“scores 是 int 类型”,尤其在复杂声明中易出错。
注意:声明时不能写长度,如 int[5] arr; 是非法语法;也不可立即用,比如 int[] arr; System.out.println(arr.length); 会编译失败(未初始化)。
初始化数组:必须完成的三类操作
初始化 = 分配内存空间 + 设置初始值。跳过这步直接使用,运行时会报 NullPointerException 或 ArrayIndexOutOfBoundsException。
-
动态初始化:已知长度、暂不知具体值
int[] ages = new int[4]; → 分配 4 个 int 空间,每个默认为 0 -
静态初始化:值已确定,声明即赋值
String[] names = {"Alice", "Bob"}; → 长度自动为 2,必须在声明时写完大括号内容,不可拆成两行 -
标准静态初始化:显式 new + 花括号,适合延迟赋值场景
double[] prices = new double[]{19.9, 29.5}; → 同样长度为 2,可用于方法调用或后续赋值
获取数组长度:.length 是属性,不是方法
Java 数组的长度是创建时就固定的,通过 数组名.length 直接访问,后面不加括号。
例如:int[] data = {10, 20, 30}; System.out.println(data.length); 输出 3。
关键细节:
- 最大合法索引是 data.length - 1,访问 data[3] 会抛异常
- data.length() 是错误写法,编译不通过
- 该属性对所有类型数组通用:int[]、String[]、boolean[] 等都支持
- 数组长度不可修改,如需增删,请改用 ArrayList
常见错误与避坑提醒
这些点看似简单,却是新手高频出错区:
- 只声明没初始化就访问元素,如 int[] a; System.out.println(a[0]); → 运行时报 NullPointerException
- 把静态初始化拆开写:int[] a; a = {1, 2, 3}; → 编译失败,花括号初始化必须配合声明或 new
- 误以为数组长度可变,反复尝试 a.length = 5; → 编译错误,length 是只读字段
- 混淆下标起始:第 1 个元素是 arr[0],不是 arr[1];遍历时循环条件应为 i
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











