繁体   English   中英

未初始化的对象不为null,并在构造函数中返回

[英]Uninitialized object is not null AND return in constructor

我在Java中有两个问题:

  1. 我知道未初始化的对象会自动分配为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和此类变量呢?

  2. 我知道构造函数甚至不返回任何值,甚至voidreturn返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM