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

问题描述 投票:0回答:3

我在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 }
java constructor null initialization return
3个回答
0
投票

回答你的第一个问题:

由于此'a'是局部变量,因此如果未明确定义,则它们处于未定义状态。仅将实例变量指定为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

回答第二个问题:

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


1
投票

从下次开始考虑一次只询问一个问题。

我知道未初始化的对象会自动分配为null,但此代码不起作用 -

这适用于成员。不适用于局部变量。如果你的代码在一个方法中,你应该考虑分配。

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

只是一个普通的return;终止了那里的执行。它不会返回任何东西,这是有效的,就像break;声明一样。


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();
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.