1.关于构造器是否是静态方法的讨论
在《JAVA编程思想》一书中看到构造器是静态方法这个观点,当时突然很有灵感的思考到了这个问题,后来在也询问和查阅很多人的观点和看法,但作为一个新手都不敢轻易地认为哪一边的观点究竟是对错。后来在翻阅别的书籍时,又看到了与这个内容相关的知识点,终于是解决了这个小小的疑惑。
2.构造器简介
书中写道构造器可以看作一个静态方法,很多人都默认的将这个构造器看作是构造方法,于是阐述了自己的观点说道自己不认为构造器的"静态"不是所谓的静态。但是在另外一书(《深入理解JVM虚拟机》)中对构造器进行了相应的描述,有类的初始化中讲述了类构造器<clinit>()以及实例构造器<init>(),类构造器<clinit>()不一定使用,它是用来加载属于类的东西,也就是加上static的属性,方法以及代码块,在使用<clinit>()方法之前会先加载父类的<clinit>(),这也就是父类的静态会先于子类的静态加载。而实例构造器<init>()方法也就是我们平常所说的构造方法。
3.书中的构造器
但是《JAVA编程思想》所说的构造器并不是上面两个构造器中的任何一个,这个构造器是用来创建Class对象的,在类加载的过程中,分为加载(加载和类加载并不相同),验证,准备,解析,初始化,并且类加载只有一次。加载过程是创建CLass对象并放入方法区,是访问这个类的入口,当然这个阶段还有其他的任务。准备阶段时为类变量分配内存并初始化类变量,这里的初始化并不是赋予程序总所给定的值,而是0,这个可以到《Thinking in Java》第八章:构造器内部的多态方法的行为,对象初始化的顺序这里查看,会看到这个0值。在初始化阶段会进行类构造器<clinit>()(类中有static的时候会使用这个方法),开始给变量赋初值,加载静态代码块,还有静态方法,这里是类加载,所以只可能运行类加载器,各位不要搞混了哦。接下来的实例构造器就是平常我们所说的构造方法,是用来创建对象的构造器,也就是我们平常所说的构造器。
所以说,《JAVA编程思想》一书中所说的构造器并不是构造方法,也不可以想当然的就认为构造器并不是构造方法。
这里表示一下观点:构造器并不是构造方法,当时构造方法就是构造器,并且只是实例构造器,当然这一点还有待以后去论证。(小学时候的老师就教导我们书上的答案不一定是对的,要带着抱有怀疑的态度去看待,所以一切的东西都有待论证,都有会被推翻的时候)。