在 Java 中初始化对象数组(其中有一个数组)
Initialize array of objects(which has an array) in Java
我对 java 比较陌生,这只是我第二次尝试设计具有 class 对象数组的程序。我遇到了麻烦,因为当我进入调试模式时,它向我显示数组正在正确构建。但是,当我尝试构建字符串甚至打印到控制台时,出现空指针异常。
我正在尝试创建一个 Slot class 对象数组。
public class C {
int slotNum;
Slot[] s;
public C(int byteSize, int slotNum){
this.slotNum = slotNum;
Slot[] s = new Slot[slotNum]; //create an array of slots
for(int i = 0; i < slotNum; i++){ //for every slot and instantiate
s[i] = new Slot(byteSize);
}
display();
}
并且 Slot class 有自己的数组 block[],由通过其构造函数传入的值构造。
public class Slot {
boolean v;
short block[];
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
short block[] = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}
稍后在程序中,我尝试打印到控制台或构建一个字符串,但当我尝试使用 C class 中的插槽[] 中的任何元素时,它总是会中断 class。
我是否正确地实例化和初始化了我的 2 个不同的数组?
public class C {
int slotNum;
Slot[] s;
public C(int byteSize, int slotNum){
this.slotNum = slotNum;
s = new Slot[slotNum]; //create an array of slots
for(int i = 0; i < slotNum; i++){ //for every slot and instantiate
s[i] = new Slot(byteSize);
}
display();
}
改用类似的方法
public class Slot {
boolean v;
short block[];
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
block = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}
替换
short block[] = new short[byteSize];
和
block = new short[byteSize];
在构造函数中始终使用this
运算符进行初始化,以便您可以清楚地区分局部变量和实例变量
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
this.block = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}
我对 java 比较陌生,这只是我第二次尝试设计具有 class 对象数组的程序。我遇到了麻烦,因为当我进入调试模式时,它向我显示数组正在正确构建。但是,当我尝试构建字符串甚至打印到控制台时,出现空指针异常。
我正在尝试创建一个 Slot class 对象数组。
public class C {
int slotNum;
Slot[] s;
public C(int byteSize, int slotNum){
this.slotNum = slotNum;
Slot[] s = new Slot[slotNum]; //create an array of slots
for(int i = 0; i < slotNum; i++){ //for every slot and instantiate
s[i] = new Slot(byteSize);
}
display();
}
并且 Slot class 有自己的数组 block[],由通过其构造函数传入的值构造。
public class Slot {
boolean v;
short block[];
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
short block[] = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}
稍后在程序中,我尝试打印到控制台或构建一个字符串,但当我尝试使用 C class 中的插槽[] 中的任何元素时,它总是会中断 class。
我是否正确地实例化和初始化了我的 2 个不同的数组?
public class C {
int slotNum;
Slot[] s;
public C(int byteSize, int slotNum){
this.slotNum = slotNum;
s = new Slot[slotNum]; //create an array of slots
for(int i = 0; i < slotNum; i++){ //for every slot and instantiate
s[i] = new Slot(byteSize);
}
display();
}
改用类似的方法
public class Slot {
boolean v;
short block[];
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
block = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}
替换
short block[] = new short[byteSize];
和
block = new short[byteSize];
在构造函数中始终使用this
运算符进行初始化,以便您可以清楚地区分局部变量和实例变量
public Slot(int byteSize){
valid = false;
//Instantiate each element in block[] to 0
this.block = new short[byteSize];
for(int i = 0; i < block.length; i++){
block[i] = 0;
}
}