构造函数中写成员变量的数据类型有什么问题?
What is the problem of writing data type of member variable in constructor?
public class Set {
int[] elements;
public Set() {
int[] elements= new int[0];
}
}
以上代码导致 NullPointerException。
相比之下,下面的代码不会导致 NullpointerExceoption 并且运行良好。
public class Set {
int[] elements;
public Set() {
elements= new int[0];
}
}
两个代码的唯一区别是是否给出了成员变量类型的int[]。
为什么类型导致异常?
我的猜测是构造函数不会做任何事情。但是我发现它通过构造函数做了一些神秘的事情。那么构造函数在第一段代码中实际上做了什么,为什么会导致异常?
在第一个示例中,int[] elements = new int[0];
您将局部变量 elements 定义为大小为 0 的数组。
在第二个示例中,您将大小为 0 的数组分配给实例变量元素。
public class Set {
int[] elements;
public Set() {
int[] elements= new int[0];
}
}
以上代码导致 NullPointerException。
相比之下,下面的代码不会导致 NullpointerExceoption 并且运行良好。
public class Set {
int[] elements;
public Set() {
elements= new int[0];
}
}
两个代码的唯一区别是是否给出了成员变量类型的int[]。
为什么类型导致异常? 我的猜测是构造函数不会做任何事情。但是我发现它通过构造函数做了一些神秘的事情。那么构造函数在第一段代码中实际上做了什么,为什么会导致异常?
在第一个示例中,int[] elements = new int[0];
您将局部变量 elements 定义为大小为 0 的数组。
在第二个示例中,您将大小为 0 的数组分配给实例变量元素。