Thinking in Java 4th edition
Chapter: Initialization & Cleanup
--Constructor initialization
--static data initialization有以下阐述:
-------------
To summarize the process of creating an object...
1. Even though it doesn't explicitly use the static keyword, the constructor is actually a static method.
-------------constructor是static的吗?如果是的话,以下问题又该如何解释呢:a. 这个static方法中经常会调用this。 (e.g. this.x = x)
b. 在调用这个static方法之前,会调用instance initializer block(如果存在的话)。
Chapter: Initialization & Cleanup
--Constructor initialization
--static data initialization有以下阐述:
-------------
To summarize the process of creating an object...
1. Even though it doesn't explicitly use the static keyword, the constructor is actually a static method.
-------------constructor是static的吗?如果是的话,以下问题又该如何解释呢:a. 这个static方法中经常会调用this。 (e.g. this.x = x)
b. 在调用这个static方法之前,会调用instance initializer block(如果存在的话)。
谢谢,好像第二个问题确实不存在了:constructor并不导致instance initializer的调用,而仅仅是一系列初始化过程中的一步。但是,this的调用和对象存储空间应该没有什么关系吧,否则,所有的static方法都可以在其中包含this对象了。p.s. 除了Thinking in Java 4th edition, 还有其他资料上有类似的阐述么?
你可以这么理解,constructor是特殊的成员函数,它用来构造实例,但一般的method只能通过实例去调用,在调用constructor的时候实例还没真正建立呢,这里就有矛盾了
所以显得constructor有类似static性质
从这个角度讲,构造函数也是属于一个类,和静态的方法相似。
但是静态方法和构造函数的区别是,在执行构造函数的时候,该对象已经存在,要不你怎么会用this呢?
我觉得用对象空间已分配来解释这个this的出现是讲不通的 -- 我用其他静态方法的时候,对象空间也有可能已经被分配了。
constructor是一类具有静态方法特征的method,不由instance所调用;但是和普通的static方法又有所区别,可以在内部调用刚刚创建的对象"this"。欢迎指正
instance initializer block 是啥?