空构造函数但实例变量仍然初始化?

Kau*_*ain 4 java constructor

我是java的新手,我对对象初始化有疑问.

我目前所知道的:

构造函数用于初始化实例变量,如果我们没有显式地对构造函数进行编码,则提供默认构造函数,该构造函数自动为实例变量提供默认值,如0等int.

我的问题: 以下代码是如何工作的(我没有初始化实例变量)?

我尝试了如下基本代码:

public class hello{

int i;   //Instance variable
         public hello()
         {
         //Constructor is empty!!!
        }


public static void main(String args[])
    {

  System.out.println(new hello().i);


}
}
Run Code Online (Sandbox Code Playgroud)

结果是0,但是怎么样?我没有在构造函数中做任何事情,因为我明确地编码了构造函数,不应该调用默认构造函数(我知道我的脑子里有一个错误的概念,所以请纠正我).

上面的代码是如何工作的,请清除我的疑问.谢谢!

Kon*_*Kon 8

默认构造函数不初始化任何内容.它是空的.现场级变量自动初始化为某些默认值(比如0用于int无论构造函数的类型).

其他默认值是

boolean -> false
double -> 0.0D
[any object reference incl. String] -> null
Run Code Online (Sandbox Code Playgroud)

  • @KaushalJain:是的,这是C++和Java之间的区别.有很多,这是其中之一.在Java中,您未明确初始化的实例字段保证其"所有位关闭"默认值; 这可以通过[JLS§4.12.5](https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5)和[JLS§15.9. 4](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.9.4). (2认同)

zxg*_*ear 5

您可能会混淆实例变量和局部变量.局部变量是必须在使用前初始化的变量,否则会出现编译错误.int i在这种情况下是一个实例变量,可以保持未初始化而不会导致编译器抱怨.int实例变量默认为0.