如果在构造函数中没有或只有一些字段被初始化,会发生什么

Ish*_*war 5 java

构造函数的目的是初始化字段的值,设置对象的初始状态.那么如果构造函数中没有初始化某些字段或所有字段会发生什么?

它是否在用户定义构造函数之前调用JVM提供的默认构造函数?

那么,在这个例子中,会输出什么?

class Name{
      int x;
      boolean y;


      Name(){
      // no initialize
     }

     public static void main(){
        Name n = new Name();
        System.out.println(n.x + ", " + n.y);
     }

 }
Run Code Online (Sandbox Code Playgroud)

ern*_*t_k 6

类级字段(实例或静态字段)获取分配给它们的默认值.这意味着如果构造函数或实例(或静态)初始化块未显式初始化这些字段,则将保留默认值.

在你的情况下:

class Name{
      int x;     //default value for int is 0
      boolean y; //default value for boolean is false
Run Code Online (Sandbox Code Playgroud)

换句话说,你的输出应该是 0, false

此问题包含有关基本类型的实际默认值的详细信息.对于Object数据类型,默认值为null(另请参阅数据类型文档).

  • @IshwarMahawar"默认构造函数"正是当您没有显式声明构造函数时编译器为您添加的内容.它与你当前的`Name(){}`完全相同(除了它是`public`).换句话说,JVM将在创建对象时(在运行任何构造函数之前)分配默认值. (2认同)
  • @IshwarMahawar我明白了.我正在谈论创建对象,如*为它分配内存*并在字段中设置默认值(当与`new Classname()`相关的操作实际上由JVM运行时,并且包括运行代码构造函数) (2认同)