我正在尝试访问在类中生成的char数组。但是,当我尝试通过以下方法访问此数组时,它变为null。我该如何解决?
public class DnaSequence {
private char[] dna;
public DnaSequence(char[] dna) {
/**
* I generated my dna array here and has been tested
*/
}
public int length() {
/**
* This is the part I'm trying to access that array but got a null
*/
return dna.length;
}
}
这是我使用的测试代码:
public class DnaSequenceTest {
public static void main(String[] args) {
char[] bases = { 'G', 'A', 'T', 'T', 'A', 'C', 'A' };
DnaSequence seq = new DnaSequence(bases);
int test = seq.length();
System.out.println(test);
}
}
并得到一个空指针异常。
答案 0 :(得分:1)
如果在构造函数中未为this.dna
分配值,则永远不会从null
更改其值。
任何对dna
的引用(在开始时都是this.
的引用)都是引用传递给构造函数而不是dna
实例变量的参数
public DnaSequence(char[] dna) {
/**
* I generated my dna array here and has been tested
*/
this.dna = ... // You need to assign to see it, probably this.dna = dna;
// that will set the dna instance variable equals
// to the dna parameter passed calling the constructor
}
答案 1 :(得分:0)
我认为您正在弄乱变量的范围。
问题在于dna变量的范围。
在函数DnaSequence(char [] dna)中,您使用了与上面声明的变量不同的dna变量。
在类内部(方法上方)声明的变量称为实例变量,而在方法内部的一个内部变量称为局部变量。 如果要访问与本地变量同名的实例变量,则需要使用“ this”关键字。
例如:
public class DnaSequence {
private char[] dna; //Instance Variable
public DnaSequence(char[] dna) { // Local Variable
/**
* I generated my dna array here and has been tested
*/
System.out.println(dna); // Will access the local variable
System.out.println(this.dna); // Will access the instance variable
}
public int length() {
/**
* This is the part I'm trying to access that array but got a null
*/
return dna.length; // Will access the instance variable
}
}
因此,如果没有 this 关键字,则如果您访问dna,它将不会更新您的实例变量,我认为您希望更新该变量。 由于尚未初始化,因此它将打印为null。
答案 2 :(得分:0)
问题是我按照您的描述创建了字段(String 对象),然后在我的构造函数中,我没有为私有变量赋值,而是再次使用 String 关键字,基本上是重新创建了变量。
检查你的构造函数,看看你是否初始化了两次!