我刚查资料了的,构造器其实就是static的
java编程思想上说
Even though it doesn’t explicitly use the static keyword, the constructor is actually a static method. So the first time an object of type Dog is created, or the first time a static method or static field of class Dog is accessed, the Java interpreter must 
locate Dog.class, which it does by searching through the classpath. 那这个问题就变成了:为什么我们能在static的构造方法里调用非static的字段和方法?

解决方案 »

  1.   

    以前就有人问过了
    看你怎么理解这里所说的static
    如果是从导致类加载的角度来看,那么算static的,因为访问类的static方法或static属性,或者调用构造函数会导致类被加载。
    如果从static的访问限制来看,那么不是static,构造函数会把this指针压栈,也就是说需要this对象,所以不是static,因为static和对象无关,只和类有关。
      

  2.   

    楼上正解,其实你可以分两种情况而论
    1.如果你是在类被加载的时候看待,那么它是static的。因为在JVM加载类时首先会初始化static属性为默认值,在这里构造器会被调用。
    2.如果你是在创建对象的时候看待,那么它不是static的,构造器在里就如对象引用调用成员方法一样。类名后的这个括号“()”就表示调用构造器。通过楼上的指点,个人理解。。
      

  3.   

    可以理解构造器是一种特殊的static方法
      

  4.   

    lz其实java编程思想上面只是说的普通的,但是构造方法很特殊正如lz所说。
      

  5.   

    这句话说的有点问题
    static只是用来描述普通的方法是否静态
    构造函数比较特殊,并不能说他是static的从访问方式来说
    构造函数在没有对象的情况下,可以被new关键字执行,构造代码有静态的方面
    从调用方面来说
    构造函数并不是静态的,因为它并不是在进程初始化时加载的,这和static函数是根本区别
    每个构造函数依然是依赖于它所处的对象的
      

  6.   

    不是这样的,在构造器中可以使用this和super指针,每个对象创建时,都是创建对象内存,其中包括构造方法,然后调用构造方法
      

  7.   

    构造函数当然不是static的,我不太明白java编程思想干嘛这么说来误导大家。
    从java源代码的角度来看这个问题,构造函数即不是静态方法也不是动态方法,他属于自己的函数体系——构造函数,从这个方面来看它肯定不是什么static方法。
    从虚拟机运行角度来看,方法都存在于方法区,并且都属于类,无论动态还是静态,那么这样来说,jvm并不区分什么静态方法或者动态方法,总体来说,方法在虚拟机域存在一个,但是作为源码的动态和静态的区别在运行时有一个重要的区别,就是所有动态方法都包含一个隐式参数,就是this(指代当前对象),而静态方法没有这个参数;而构造函数是有this这个参数的,在虚拟机内构造函数的名称为"<init>"。隐藏可以断定构造函数根本就不是静态函数,而且就构造函数本身而言,可以使用jni或者sun 的一些内部不安全包,像调用普通的动态方法一样去调用构造函数。如果把构造函数视为普通动态函数其实比视为静态函数更合理一些。
    我想think in java吧构造函数视为静态函数,可能是调用静态函数的指令与构造函数一直,因此才说应该把构造函数视为静态函数,但是这样也是不正确的,因为调用私有动态函数与静态函数的调用指令也是一样的,这并不能说明私有函数是静态的。