Java检查变量是否已初始化

时间:2011-09-22 04:49:01

标签: java variables initialization

所以我对Java很新。在我的大学上课时,这个第一学期的重点是在使用名为ObjectDraw的java库时将语法缩小,并掌握一些基本思想。下学期我们将开始远离ObjectDraw并进入核心Java。无论如何我遇到了一些问题,我需要使用类似于php的isset函数。我知道php和java是完全不同的,所以我不应该尝试比较它们,但php是我以前对类似编程的知识的唯一基础。我只是想知道是否有某种方法会返回一个布尔值,表示实例变量是否已初始化。例如......

if(box.isset()) {
  box.removeFromCanvas();
}

到目前为止,我遇到了这个问题,当我的程序试图隐藏或删除尚未构建的对象时,我遇到了运行时错误。

2 个答案:

答案 0 :(得分:64)

假设您对变量是否已明确赋值感兴趣,答案是“不是真的”。尚未明确分配的字段(实例变量或类变量)与已分配其默认值的字段(0,false,null等)之间完全没有区别。< / p>

现在如果你知道,一旦被分配,该值永远不会重新赋值为null,你可以使用:

if (box != null) {
    box.removeFromCanvas();
}

(这也避免了可能的NullPointerException),但您需要注意“值为null的字段”与“未明确赋值的字段”不同”。 Null是一个完全有效的变量值(当然,对于非原始变量)。实际上,您甚至可能希望将上述代码更改为:

if (box != null) {
    box.removeFromCanvas();
    // Forget about the box - we don't want to try to remove it again
    box = null;
}

局部变量的区别也是可见的,在它们被“明确赋值”之前无法读取 - 但是可以明确赋值的其中一个值为null(对于引用类型变量):

// Won't compile
String x;
System.out.println(x);

// Will compile, prints null
String y = null;
System.out.println(y);

答案 1 :(得分:6)

实例变量或字段以及静态变量根据变量类型分配默认值:

int:0
char:'\ u0000'或0
double:0.0
布尔值:false
参考:null

只是想澄清局部变量(即在块中声明,例如,方法,for循环,while循环,try-catch等)未初始化为默认值,必须显式初始化。