Java自定义类数组报null的相关问题及解决
Java自定义类数组报null问题
不要沿用c++的想法。
java的数组分基本数据类型和引用类型
- 基本数据类型:如int[] s=new int[10]; 这里面创建了长度为10的整型数组,并且自动为每个元素创建了对象,即能找到相关地址
- 引用类型:如写了个class student(){}, 在student[] s=new student[10]中只是new了数组空间,我们还要对s[0]-s[9]每一个创建对象,否则数组为null。
解决方法
for(int i=0;i<10;i++) { s[i]=new student(); }
可以理解为先创建了空数组,然后为每一个元素添加了属于它的属性。
实例:
设某一个班共有N(N=20)名学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号、姓名和各门课成绩。 (奖学金评定标准是:总成绩超过全班总平成绩20%发给一个奖学金,超过全班总平成绩10%发给二个奖学金。)
Java自定义类二维数组出现NullPointerException错误
自定义的类
package com.hbq.bugs; // MyClass 类 public class MyClass { public int s1; public int getS1() { return s1; } public void setS1(int s1) { this.s1 = s1; } }
主函数
package com.hbq.bugs; public class App { public static void main(String[] args) { MyClass [][] c=new MyClass[10][10]; c[0][0].setS1(1); } }
运行会出现
进入debug模式发现
c[0]的所有元素都是null。
这是由于引用对象不初始化默认都为null的原因。
所以会有一个长度为10的一维数组,每个一维数组的元素又是长度为10的一维数组,这个数组里的元素默认都为null。
所以要对每一行每一列进行实例化赋值开拓新空间。
package com.hbq.bugs; public class App { public static void main(String[] args) { MyClass[][] c = new MyClass[10][10]; // c[0][0].setS1(1); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { c[i][j] = new MyClass(); } } c[0][0].setS1(1); System.out.println(c[0][0].getS1()); } }
运行成功!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot Rabbit MQ topic 配置文件绑定队列和交换机的
本文详细讲解了在SpringBoot中使用RabbitMQ进行队列与交换机的绑定方法,包括创建交换机、队列和绑定它们的步骤,以及如何发送和接收消息,适用于开发高并发系统,如秒杀系统等2024-09-09SpringBoot整合Docker实现一次构建到处运行的操作方法
本文讲解的是 SpringBoot 引入容器化技术 Docker 实现一次构建到处运行,包括镜像构建、Docker仓库搭建使用、Docker仓库可视化UI等内容,需要的朋友可以参考下2022-10-10详解mybatis plus使用insert没有返回主键的处理
这篇文章主要介绍了详解mybatis plus使用insert没有返回主键的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论