构造器初始化Java对象
我是在做IO流的笔记时,发现反序列化机制无需通过构造器来初始化Java对象;这时我就想构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象?对于之前的概念也是有些模糊了,顺手记录一下!!!
深入构造器
构造器是一个特殊的方法,这个特殊的方法用于创建实例时执行初始化。构造器是创建对象的重要途径,因此Java类必须包含一个或者一个以上的构造器。
使用构造器执行初始化
构造器最大的用处就是在创建对象时执行初始化。因为当创建一个对象时,系统为这个对象的实例变量进行默认初始化,这种默认的初始化把所有基本类型的实例变量设为0(对数值型实例变量)或false(对布尔型实例变量),把所有引用类型的实例变量设为null。
如果想改变这种默认的初始化,想让系统创建对象时就为该对象的实例变量显示指定初始值,就可以通过构造器来实现。
那么构造器是不是完全负责创建Java对象?
不是!构造器是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的。实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象已经产生了----这些操作在构造器执行之前就都完成了。也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在该构造器中通过this来引用。当构造器的执行体结束后,这个对象作为构造器的返回值被返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。