我在Java中有两个问题:
我知道未初始化的对象会自动分配null
,但此代码不起作用 -
A a; //A is some valid user-defined object
System.out.println(a != null);
这会出错:error: variable a might not have been initialized
这表明a
不为空。那么,我如何区分null
和这些类型的vaiables?
我知道构造函数不返回任何值,void
和return
都不返回void
,那么以下代码如何才能完美运行?
A() {
//...Some code
return; //Works perfectly even if it returns void from inside construtor
}
答案 0 :(得分:1)
从下次开始考虑一次只询问一个问题。
我知道未初始化的对象会自动分配为null,但此代码不起作用 -
这适用于实例成员。不适用于局部变量。如果你的代码在方法中,你应该考虑分配。
我知道构造函数不会返回任何值,甚至不返回void,返回返回void,那么以下代码如何才能完美运行?
只是一个普通的return;
终止了那里的执行。它不会返回任何内容,这有效,就像break;
语句一样。
答案 1 :(得分:0)
在第一个问题中,只有未初始化的全局变量被赋值为'null'而不是局部变量。
在第二个问题中,返回工作正常,因为它适用于“返回调用者”的任何方法。要更好地了解此代码。
class practice {
practice(){
for(int i=0 ; i<10 ; i++){
System.out.println(i);
if(i==5)return;
}
}
public static void main(String[] args){
new practice();
}
}
答案 2 :(得分:0)
回答您的第一个问题:
因为这个&#39; a&#39;是一个局部变量,如果没有明确定义,它们处于未定义状态。只有实例变量被赋值为null作为默认值。这就是为什么你得到上面提到的编译错误。
有关详细信息,请参阅oracle文档here。
The compiler will assign a reasonable default value for fields of the above types;
for local variables, a default value is never assigned
回答第二个问题:
在构造函数中,您只能编写返回以停止执行。你不能用一些价值写回报。它基本上意味着该函数将完成当前例程的处理并返回调用例程。