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

时间:2018-01-02 12:00:29

标签: java constructor null initialization return

我在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和这些类型的vaiables?

  2. 我知道构造函数不返回任何值,voidreturn都不返回void,那么以下代码如何才能完美运行?

    A() {
        //...Some code
        return;        //Works perfectly even if it returns void from inside construtor
    }
    

3 个答案:

答案 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

回答第二个问题:

在构造函数中,您只能编写返回以停止执行。你不能用一些价值写回报。它基本上意味着该函数将完成当前例程的处理并返回调用例程。