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

如何创建成员内部类数组

在 Java 中,成员内部类(非静态内部类)的实例必须与外部类的实例相关联。因此,创建成员内部类数组需要以下步骤:


1. 声明成员内部类数组

数组的类型需使用外部类名限定内部类,语法为:

外部类名.内部类名[] 数组名 = new 外部类名.内部类名[长度];

示例

public class Outer {class Inner { // 成员内部类void print() {System.out.println("内部类方法");}}public static void main(String[] args) {// 声明成员内部类数组Outer.Inner[] innerArray = new Outer.Inner[3];}
}

2. 初始化数组成员

必须通过外部类实例逐个初始化数组元素,语法为:

数组名[i] = 外部类实例.new 内部类构造器();

示例

public class Outer {class Inner { /* ... */ }public static void main(String[] args) {Outer outer = new Outer(); // 创建外部类实例Outer.Inner[] innerArray = new Outer.Inner[3];// 初始化每个元素for (int i = 0; i < innerArray.length; i++) {innerArray[i] = outer.new Inner(); // ✅ 正确关联外部类实例}// 使用数组中的内部类对象innerArray[0].print(); // 输出:"内部类方法"}
}

3. 常见错误与解决方案

(1) 未关联外部类实例
Outer.Inner[] innerArray = new Outer.Inner[3];
innerArray[0] = new Inner(); // ❌ 错误:缺少外部类实例

解决方案
必须通过外部类实例创建内部类对象:

innerArray[0] = outer.new Inner();
(2) 数组元素未初始化
Outer.Inner[] innerArray = new Outer.Inner[3];
innerArray[0].print(); // ❌ 错误:元素为null,导致NullPointerException

解决方案
遍历数组并初始化所有元素。


4. 完整代码示例

public class Outer {private int id;public Outer(int id) {this.id = id;}// 成员内部类class Inner {void display() {System.out.println("外部类ID: " + id);}}public static void main(String[] args) {Outer outer = new Outer(100);Outer.Inner[] innerArray = new Outer.Inner[3];// 初始化数组for (int i = 0; i < innerArray.length; i++) {innerArray[i] = outer.new Inner();}// 调用方法for (Inner inner : innerArray) {inner.display(); // 输出:外部类ID: 100}}
}

总结

步骤关键操作注意事项
声明数组Outer.Inner[] array = new Outer.Inner[n];类型必须为外部类名.内部类名
初始化元素array[i] = outer.new Inner();必须通过外部类实例创建内部类对象
使用元素调用内部类方法(如array[i].method()确保元素已初始化,避免NullPointerException

通过遵循上述步骤,即可正确创建和初始化成员内部类的数组。

http://www.xdnf.cn/news/160417.html

相关文章:

  • 小刚说C语言刷题——1109加密四位数
  • [笔记] MCPO搭建教程
  • 河南联通光猫超级管理员账号设置
  • 2025新版修复蛇年运势测试风水起名系统源码
  • VS BUG(6) LINK : fatal error LNK1158: 无法运行“rc.exe”
  • 自动化运维:从工具到实践的全面解析
  • C语言中转义字符的定义与使用详解
  • 基于ssm的仓库管理系统(源码+数据库)
  • 开源AI视频FramePack发布:6GB显卡本地运行
  • 大模型奖励建模新突破!Inference-Time Scaling for Generalist Reward Modeling
  • 用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)
  • CrewAI Community Version(二)——Agent
  • 解锁数据潜力的自监督学习技术
  • QEMU源码全解析 —— 块设备虚拟化(23)
  • springboot入门-repository数据访问层JPA和mybatis
  • 代理专栏总结
  • 架构师备考-设计模式23种及其记忆特点
  • 栈应用:括号匹配
  • arduino显示数码管1~9
  • 除自身以外的乘积 --- 前缀和
  • UNO Less-to-More Generalization: 通过上下文生成解锁更多可控性
  • 代码随想录打卡|Day28 动态规划(理论基础、斐波那契数列、爬楼梯、使用最小花费爬楼梯)
  • 深度学习-学习笔记
  • 网络原理 - 9
  • 硬件须知的基本问题2
  • Network.framework 的引入,不是为了取代 URLSession
  • 【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码)
  • 静态多态和动态多态的区别
  • 大规模SoC芯片Hierarchical Flow Calibre LVS教程
  • 20250426在ubuntu20.04.2系统上打包NanoPi NEO开发板的FriendlyCore系统刷机eMMC的固件