[英]Uninitialized object is not null AND return in constructor
我在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
和此类变量呢?
我知道构造函数甚至不返回任何值,甚至void
, return
返回void
,那么下面的代码如何完美地工作?
A() { //...Some code return; //Works perfectly even if it returns void from inside construtor }
从下次开始,考虑一次只问一个问题。
我知道未初始化的对象会自动分配为null,但是此代码不起作用-
这适用于实例成员。 不适用于局部变量。 如果您的代码在方法内部,则应考虑分配。
我知道构造函数甚至不返回任何值,即使void也不返回,而return返回void,那么下面的代码如何完美地工作?
只是一个简单的return;
在此处终止执行。 它不会返回任何内容,并且就像break;
一样,它是有效的break;
声明。
在第一个问题中,仅将未初始化的全局变量分配为“ 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();
}
}
回答第一个问题:
由于此'a'是局部变量,如果未明确定义,则它们处于未定义状态。仅实例变量被分配为null作为默认值。 这就是为什么您会收到上述编译错误的原因。
请参阅Oracle文档这里了解更多信息。
The compiler will assign a reasonable default value for fields of the above types;
for local variables, a default value is never assigned
回答第二个问题:
在构造函数中,您只能编写return来停止执行。 你不能用一些价值写回报。 它基本上意味着该函数将完成对当前例程的处理,并将返回到调用例程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.