书本第146页最下面的批注:
构造器也是static方法,尽管static关键字并没有显示地写出来。不知道哪位高手对于这句话有没有其他资料来支持,java的老爸也没有这么说

解决方案 »

  1.   

    这里是错的。
    static方法里不能使用this,构造方法用一下this就ok了。
      

  2.   

    瞎扯。
    自己运行 
    javap -c java.lang.String | grep init
    javap -c java.lang.String | grep static
    就可以验证了。
      

  3.   

    jvm spec4.6节,有这么一句话
    A specific instance initialization method (§3.9) may have at most one of its ACC_PRIVATE, ACC_PROTECTED, and ACC_PUBLIC flags set and may also have its ACC_STRICT flag set, but may not have any of the other flags in Table 4.5 set.
    但是在介绍invokespecial指令的时候,你会感觉它又像是static的
      

  4.   

    非static成员跟对象有关,在构造器里,对象都还没初始完成;所以构造器应该是static的。可以用this只是个表面现象,是语言设计者提供的一种访问途径,跟其他非static成员中的this的实现不一样。
      

  5.   

    饿  think in java一直没看,都说经典,但我觉得最经典的是实践不是搞理论。不知道你学到这个在实践中有什么用吗?用ide编出错了它就会提示你,你不用就完了。
      

  6.   

    在非static成员方法运行时,表示对象地址的this会被压入局部变量区,作为局部变量区的第一个元素,这样在成员方法内部就可以访问对象的状态。java中的类在编译成class文件后,每个构造器都生成对应的<init>方法,估计对于每个<init>方法也会像非static方法一样将对象的地址压入局部变量区。
      

  7.   

           可是,TIJ4里多处提到构造器是static的,我想作者不可能一直没意识到这个问题吧。至于JVM里是怎么实现的,就不知道了
      

  8.   

    fdafsd
      

  9.   

    不懂 
    不过我认为当你new的时候应该就可以看出来了 
      

  10.   

    首先说下我对以下几个基本概念的理解:1. new 关键字用来分配内存
    2. 构造函数,用来初始化变量,只是附初值,并不包括分配内存;
    3. this关键字,指向对象内存的一个指针;
    4. static关键字,可以理解为是一个标识,没有static的变量,方法,实例对象可以引用到,如果加了的话只能通过类引用。对于Class a = new a(),这样的语句,实际执行的是就是开辟一段内存空间,然后对空间的变量附一个初值,new 后面的a指明开辟内存的大小,内存中变量的类型,后面的括号指明对变量的初值是什么,然后将this指向这块内存。ps:对于this(a,b)这样类似指针函数的功能,上面说明无法解释,希望高手来说明一下。
      

  11.   

    1.new 分配内存+对象初始化。
    3.看上下文。非static方法和构造器中,用this访问成员时,可以这样理解。this()调用其他构造器例外,语法而已。
    4.static的也可以通过实例引用。Class a = new A();看字节码的话是
      0: new #2; //class A
       3: dup
       4: invokespecial #3; //Method "<init>":()V
       7: astore_1new指令分配内存,得到的引用在栈顶,dup一份,栈顶上的引用作为构造器变体<init>方法的第一个参数this。<init>负责初始化。这里的new指令可以认为是static的,但说构造方法是static就扯了。
    当然指令new并不同于语法中的new。如果学过C++,理解operator new的话就容易理解了,语言的new操作符导致operator new的调用,然后调用构造函数。而operator new是可重载的,是static的。
      

  12.   

    你看的那个书,应该是中文版的吧,肯定是翻译错误。不要纠结这种问题,还要讨论毛?static有什么特性,构造方法有吗?构造方法有的特性static有对应的吗?斑竹结贴吧。
      

  13.   

    我倒是感觉构造方法是static的。首先static方法成员是属于类的,非static方法成员是对象的。
    而构造函数是用于创建对象的,创建对象的方法成员会是属于对象自己的?而且可以想象,在对象被创建之前,构造方法肯定已经被加载到内存当中,这时候都没有对象的啊还有,你能想象一个对象拥有一份自己的构造方法么?而且一个对象被创建了,他还拥有构造函数干嘛呢?所以构造函数肯定是属于类的。但至于属于类的函数是不是就是static的 这个我到不是很清楚
      

  14.   

    什么是静态方法?只有加了static才是静态方法吗?
    静态方法的本意是类方法,是类层次上的东西,跟对象无关,只要调用静态方法,就会加载class,产生Class这种类对象,(当然,前提是还没有加载)
    调用static限定的静态方法和构造方法都会加载class,构造方法多了一个附属产品(产生了对象)。
    static限定的方法跟构造方法是两种不同类型的静态方法,所以说,使用上会有区别,但本质是相同的。
      

  15.   

    自学了半年java,拿这本书看懂了一小半,剩下的确实看不懂了
      

  16.   

    http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.3.2
    起码在java语言定义的范畴内,静态方法有起自己的定义。当然,你重写了定义,可以引伸出和java定义不同的结论来。
      

  17.   

    A method that is declared static is called a class method. A class method is always invoked without reference to a particular object.
    我翻译这两句的意思是:被声明为static的方法称为类方法。类方法不涉及特定的对象。
    我觉得这里仅仅指明了static方法(静态方法)是一种类方法,当然,我说的“静态方法的本意是类方法”说法是错误的,(我不是要来为我的观点辩护。)
    但是,从类方法这个层次上讲,static方法与构造方法应该是一样的。(它们都是类方法,是类层次上的东西,跟对象无关,我觉的THKJ的作者也应该是这个意思)。
    还有,我觉得上面两段英文好像没有给声明为static的方法下一个定义,它只是说static方法是一种类方法。
      

  18.   

      好像书里面有提过关于构造方法为什么是static.楼主再仔细看看,这边书好好好,就是厚.嗯!相对于我的小脑袋而言.大头什么的就当我没说[哈哈]
      

  19.   

    java底层是C,如果java他老爸解释不了,就查查看C语言的设计