java对象数组需先声明引用、再new创建容器、最后逐个实例化元素;声明时引用为null,new后元素仍为null,未初始化即访问会抛npe。

Java 中对象数组的声明与实例化赋值,核心在于:先声明数组引用,再用 new 创建数组容器,最后对每个元素单独实例化对象(除非用循环或 Stream 批量处理)。
声明对象数组(只定义引用)
声明只是告诉编译器“我要一个存放某种对象的数组”,此时数组本身还没存在,更没有对象:
String[] names; // 声明一个 String 类型的对象数组引用 Person[] people; // 声明一个 Person 类型的对象数组引用
这时 names 和 people 都是 null,不能直接调用方法或访问属性。
实例化数组容器(分配空间)
用 new 创建指定长度的数组,此时数组存在了,但所有元素默认为 null:
names = new String[3]; // 创建长度为 3 的 String 数组,内容为 {null, null, null}
people = new Person[2]; // 创建长度为 2 的 Person 数组,内容为 {null, null}
注意:这里只创建了“容器”,不是“对象”。names[0] 是 null,不是空字符串;people[0] 也是 null,不是 Person 实例。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
逐个实例化数组元素(真正创建对象)
必须显式为每个下标位置创建对象,否则访问会抛 NullPointerException:
-
names[0] = "Alice";// 字符串字面量自动装箱为 String 对象 names[1] = new String("Bob");people[0] = new Person("张三", 25);people[1] = new Person("李四", 30);
也可以在声明同时完成数组和部分元素的初始化(静态初始化):
String[] fruits = {"apple", "banana", "orange"}; // 等价于 new String[]{"apple",...}
这种写法要求大括号内是实际对象(或字面量),且只能用于声明时。
常见错误提醒
以下写法是错的:
-
Person[] ps = new Person[3]; ps = new Person();—— 后一句把数组引用改成了单个对象,类型不匹配 -
ps[0].setName("Tom");—— 没给ps[0]赋值前就调用方法,会 NPE -
String[] s = new String[2]; s[0] = "a"; s[1] = "b"; s[2] = "c";—— 下标越界,数组长度只有 2
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










