如果我的memberVariable / memberArray(每个标准类型int / double / float ...等)都是新初始化的,我如何检查Java? Double / Integer / Float有什么区别?
class Class
{
double[] memberArray;
double memberVariable;
Class() { }
void init()
{
memberArray = new double[12];
//memberVariable = new double(); //EDIT: does not compile
}
void foo()
{
// check here if memberVariable/memberArray has been new-initialized
}
}
在ctor中构造这些不是一种选择,目前还不知道数组化。 而且我也想在这里使用原始类型,而不是容器。 这是一个例子,它不太可能在任何项目中使用。
答案 0 :(得分:4)
不要使用这种构造和初始化模式,因为您的对象在这些点之间处于未定义状态。
将init
中的功能移至构造函数。
Class() {
memberArray = new double[12];
/*this does not compile: memberVariable = new double();*/
}
(并且,如果您希望您的代码在调试期间凌晨3点可读,则将Class
重命名为其他类似于关键字的内容。
或者,您可以完全取消构造函数并初始化成员:
double[] memberArray = new double[12];
double memberVariable; // no need to initialise: Java sets to zero (unlike C)
这些方法中的任何一种都意味着您无需检查某些内容是否已初始化,因为始终为。
最后,如果您事先不知道数组大小,请使用带参数的构造函数:
Class(int size)
{
memberArray = new double[size];
}
并使用Class foo = new Class(12);
调用它来创建一个在数组中包含12个元素的实例。
答案 1 :(得分:1)
有两种基本类型的变量被赋予不同的默认值作为成员变量(当它们不是成员/实例变量时,它们根本没有给出默认值)。这两种类型是引用变量和原始变量。
参考变量'参考'作为对象的变量(任何非原始的)。所有其他人都是原始人。
基元的默认值为0,boolean
除外,其默认值为false
。参考值的默认值为null
,表示不引用任何对象。
因此,如果您想检查引用变量(,例如您的双打数组)是否已使用除null
之外的任何其他值进行初始化,您只需检查它是否为{{1 }} 或不。像这样;
null
如果要检查您的基元(例如双重)是否已被赋予非默认值,您可以检查它们是否与默认值不同。例如;
if(memberArray==null){
/* Do something if it hasn't been given a non-default value */
}
但请注意,因为您可以为它们提供一个与之后默认值相同的值。或者,Java具有Wrapper类,允许您使用引用变量来引用基元,例如if(memberVariable==0) {
/* Do something if it's still 0 */
}
(而不是Double
.Java区分大小写)。这样,您可以检查您的double
引用变量是否为空。
正如其他人所说,最好创建一个构造函数来确保它们会被某些值初始化。