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());
}
}运行成功!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
