Cal*_*YSR 37 java variables initialization
所以我对Java很新.在我的大学上课时,这个第一学期的重点是在使用名为ObjectDraw的java库时将语法缩小,并掌握一些基本思想.下学期我们将开始远离ObjectDraw并进入核心Java.无论如何我遇到了一些问题,我需要使用类似于php的isset函数.我知道php和java是完全不同的,所以我不应该尝试比较它们,但php是我以前对类似编程的知识的唯一基础.我只是想知道是否有某种方法会返回一个布尔值,表示实例变量是否已初始化.例如...
if(box.isset()) {
box.removeFromCanvas();
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我遇到了这个问题,当我的程序试图隐藏或删除尚未构建的对象时,我遇到运行时错误.
Jon*_*eet 67
不是真的-有一个字段(实例变量或类变量)尚未明确分配之间绝对没有任何区别可言着呢,已经分配了它的默认值一个- 0,假,空等等.
现在,如果您知道一旦分配,该值将永远不会重新赋值为null,您可以使用:
if (box != null) {
box.removeFromCanvas();
}
Run Code Online (Sandbox Code Playgroud)
(这也避免了可能NullPointerException
)但你需要知道"值为null的字段"与"未明确赋值的字段"不同.Null是一个完全有效的变量值(当然,对于非原始变量).实际上,您甚至可能希望将上述代码更改为:
if (box != null) {
box.removeFromCanvas();
// Forget about the box - we don't want to try to remove it again
box = null;
}
Run Code Online (Sandbox Code Playgroud)
局部变量的差异也是可见的,在它们被"明确赋值"之前无法读取 - 但是可以明确赋值的其中一个值为null(对于引用类型变量):
// Won't compile
String x;
System.out.println(x);
// Will compile, prints null
String y = null;
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
实例变量或字段以及静态变量根据变量类型分配默认值:
int:0
char:'\ u0000'或0
double:0.0
boolean:false
reference:null
只是想澄清局部变量(即在块中声明,例如,方法,for循环,while循环,try-catch等)未初始化为默认值,必须显式初始化.