是否有必要在Java中的每个类中都有一个构造函数

use*_*348 3 java oop constructor

class Temp
{ 
   {
      System.out.println("this is in it block");
   }


   public static void main(String... s)
   {
      System.out.println("abhi");
   }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不会打印init块的内容,但我们知道init块是构造函数的第一行.

但另一方面,如果我使用new Temp();它打印.为什么这样?

如果构造函数在每个类中,则上面的代码也应该在没有对象初始化的情况下打印它.不应该吗?

Ted*_*opp 5

您不需要在类中编写构造函数的代码.如果您没有任何构造函数,系统将自动为您生成默认构造函数.你的内部块称为实例初始化器 ; 它运行,以任何呼叫后一个构造函数执行时,super(...)在构造和之前的构造函数体中(其他地方).(如果构造函数以调用开头,this(...)则不为该构造函数运行实例初始化程序.)但是,您需要为构造函数和要执行的任何实例初始化程序创建类的实例.(如果您创建了内部块static,它将是一个静态初始化程序,并且在初始化类对象时将运行一次,无论是否创建了实例.)