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(如果存在的话)。

解决方案 »

  1.   

    调用构造器的时候说明对象存储空间已经分配了,用this没什么不可的啊,在调用 static 构造方法之前会调用实例的初始化块,也是可以的啊
      

  2.   


    谢谢,好像第二个问题确实不存在了:constructor并不导致instance initializer的调用,而仅仅是一系列初始化过程中的一步。但是,this的调用和对象存储空间应该没有什么关系吧,否则,所有的static方法都可以在其中包含this对象了。p.s. 除了Thinking in Java 4th edition, 还有其他资料上有类似的阐述么?
      

  3.   

    我想作者只是描述这么个意思,并不是说constructor是static的
    你可以这么理解,constructor是特殊的成员函数,它用来构造实例,但一般的method只能通过实例去调用,在调用constructor的时候实例还没真正建立呢,这里就有矛盾了
    所以显得constructor有类似static性质
      

  4.   

    静态的方法属于一个类,非静态的方法属于某个对象
    从这个角度讲,构造函数也是属于一个类,和静态的方法相似。
    但是静态方法和构造函数的区别是,在执行构造函数的时候,该对象已经存在,要不你怎么会用this呢?
      

  5.   

    this指代的就是当前构造的新对象的一个地址,怎么能说没有关系呢,如果没有关系,还要this干什么啊,构造器的调用标识着开始给类的各个变量赋值或者默认初始化了,当然“导致”instance initializer的调用了,只不过,static的变量或者引用指初始化一次而已
      

  6.   

    恩,我的意思是在static方法中出现this一般而言是不允许的,那么现在constructor中出现了this,如何解释这个this?
    我觉得用对象空间已分配来解释这个this的出现是讲不通的 -- 我用其他静态方法的时候,对象空间也有可能已经被分配了。
      

  7.   

    感谢以上几位网友的答复,我目前对这个问题的理解是:
    constructor是一类具有静态方法特征的method,不由instance所调用;但是和普通的static方法又有所区别,可以在内部调用刚刚创建的对象"this"。欢迎指正
      

  8.   

    b. 在调用这个static方法之前,会调用instance initializer block(如果存在的话)。
    instance initializer block 是啥?
      

  9.   

    Java之父的The Java Programming Language 讲构造器的时候说:构造器并不是一个方法,它只是一个初始化块,它的调用是在默认初始化完成和指定初始化之后。这里面并没有讲到构造器是静态方法,我想Bucel Eckel只是根据它的调用时机和特征把它当做静态方法处理,至于你LZ说“在调用其他方法的时候,对象空间也有可能分配了”,这句是在不敢苟同,真正的静态方法是不需要实例支持的,它为什么要分配存储空间呢?还有一个问题:this不是对象,说白了它是一个C里面的指针,所以“但是和普通的static方法又有所区别,可以在内部调用刚刚创建的对象"this"”,理解还是有点问题。
      

  10.   

    在你new一个对象的时候,你的构造函数将会被执行,同时你的this也可以被使用,。
      

  11.   

    恩,谢谢指正我对于this的理解;关于对象空间分配问题,静态方法确实不需要实例支持,我之前对你的阐述理解有误。