所以我对Java很新。在我的大学上课时,这个第一学期的重点是在使用名为ObjectDraw的java库时将语法缩小,并掌握一些基本思想。下学期我们将开始远离ObjectDraw并进入核心Java。无论如何我遇到了一些问题,我需要使用类似于php的isset函数。我知道php和java是完全不同的,所以我不应该尝试比较它们,但php是我以前对类似编程的知识的唯一基础。我只是想知道是否有某种方法会返回一个布尔值,表示实例变量是否已初始化。例如......
if(box.isset()) {
box.removeFromCanvas();
}
到目前为止,我遇到了这个问题,当我的程序试图隐藏或删除尚未构建的对象时,我遇到了运行时错误。
答案 0 :(得分:64)
假设您对变量是否已明确赋值感兴趣,答案是“不是真的”。尚未明确分配的字段(实例变量或类变量)与已分配其默认值的字段(0,false,null等)之间完全没有区别。< / p>
现在如果你知道,一旦被分配,该值永远不会重新赋值为null,你可以使用: (这也避免了可能的 局部变量的区别也是可见的,在它们被“明确赋值”之前无法读取 - 但是可以明确赋值的其中一个值为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;
}
// 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等)未初始化为默认值,必须显式初始化。