Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查成员是否是新初始化的_Java - Fatal编程技术网

Java 检查成员是否是新初始化的

Java 检查成员是否是新初始化的,java,Java,如果我的memberVariable/memberArray(每个标准类型的int/double/float…等)是新初始化的,我如何在Java中进行检查? Double/Integer/Float的区别是什么 class Class { double[] memberArray; double memberVariable; Class() { } void init() { memberArray = new double[12];

如果我的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中构造这些元素不是一个选项,此时不知道arraysize。 我还想在这里使用基本类型,而不是容器。
这是一个例子,它不太可能在任何项目中使用。

不要使用这种构造和初始化模式,因为对象在这些点之间处于未定义状态

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];
}

并使用
classfoo=newclass(12)调用它
创建一个数组中有12个元素的实例。

有两种基本类型的变量,它们作为成员变量被赋予不同的默认值(当它们不是成员/实例变量时,它们根本不被赋予默认值)。这两种类型是参考变量和基本变量

引用变量“引用”是指作为对象的变量(任何不是基元的变量)。其他的都是原语

原语的默认值为0,但
布尔值
的默认值为
false
除外。参考值的默认值为
null
,这意味着不引用任何对象

因此,如果您想检查引用变量(例如您的双精度数组)是否已使用
null
以外的任何值初始化,您只需检查它是否为
null
。就这样,

if(memberArray==null){ 
    /* Do something if it hasn't been given a non-default value */ 
}
如果要检查您的基本体(例如double)是否已指定非默认值,可以检查它们是否与默认值不同。比如,

if(memberVariable==0) { 
    /* Do something if it's still 0 */ 
}
不过,请注意,因为您可能会在以后给它们一个与默认值相同的值。或者,Java有包装类,允许您使用引用变量引用原语,例如
Double
(而不是
Double
。Java区分大小写)。这样,您就可以检查
Double
引用变量是否为空


但是,正如其他人所说,最好创建一个构造函数来确保使用某些值初始化它们。

您希望
memberVariable
Double
还是
Double
?因为这会影响答案。好吧,考虑到这段代码甚至不会编译,你也不会。除此之外。。。Java中有
null
的概念。你应该仔细研究一下。各种各样的事情:请不要调用类
-它会让你以后感到困惑。你在编译器中试过这个吗?你会犯什么错误?你做了什么来修复这些错误?“Java有构造函数是有原因的”-我的答案现在已经过时,我无法在ctor中构造它,因为此时数组的大小未知。@Bathsheba我在发布注释时捕捉到了您的编辑:)长话短说:无法确定原始成员数组变量是否已初始化,或者它们是否默认为0/0.0/false等?编辑:只需阅读Rudis的答案,所以我必须检查数组是否为null..+1-可能值得补充的是,使用
Double
将允许
null
检查。@BrianRoach-这一点很好。我将简要介绍包装器类。
if(memberArray==null)
这就是我想要的,谢谢。