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

Java 未初始化的对象不为null,并在构造函数中返回,java,constructor,null,initialization,return,Java,Constructor,Null,Initialization,Return,我有两个关于Java的问题: 我知道未初始化的对象会自动赋值为null,但此代码不起作用- A a; //A is some valid user-defined object System.out.println(a != null); 这会产生错误:错误:变量a可能尚未初始化。 这表示a不为null。那么,我如何区分null和这类可值呢 我知道构造函数不返回任何值,甚至不返回void,并且返回void,那么下面的代码如何能够完美地工作呢 A() { //...So

我有两个关于Java的问题:

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

A a;        //A is some valid user-defined object  
System.out.println(a != null);
这会产生错误:错误:变量a可能尚未初始化。 这表示a不为null。那么,我如何区分null和这类可值呢

我知道构造函数不返回任何值,甚至不返回void,并且返回void,那么下面的代码如何能够完美地工作呢

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

从下一次考虑一次只问一个问题。

我知道未初始化的对象会被自动赋值为null,但这段代码不起作用-

这适用于所有成员。不适用于局部变量。如果你的代码在一个方法里面,你应该考虑赋值.< /p> 我知道构造函数不返回任何值,甚至不返回void,并且返回void,那么下面的代码如何能够完美地工作呢

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

只是简单的回报;在那里终止执行。它不会返回任何东西,这是有效的,就像中断一样;声明

在第一个问题中,只有未初始化的全局变量被赋值为“null”,而不是局部变量

在第二个问题中,return在任何“returntothecaller”方法中都起作用。要更好地理解,请查看此代码

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来停止执行。您不能使用某个值写入return。它基本上意味着函数将完成当前例程的处理并返回调用例程。

History:在C/C++中,所有变量都将被单位化。使用java时,所有字段都自动归零,以简化对象创建。但是,对于局部变量,没有自动默认值,因为这会导致错误,出现意外的零/忘记的情况:int a;如果{a=42;}否则{…}@suresh,我得到的结果是返回终止那里的执行,但返回void。如何处理?编译器只是忽略它吗?或者有一些内部机制。