Java自定义类数组报null的相关问题及解决
作者:Dwoura犀利
这篇文章主要介绍了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()); } }
运行成功!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。