Java小白一枚,当时学到构造器的时候,《java编程思想》中文第4版第96页提到中提到“总结一下对象的创建过程,假设有个名为Dog的类:1.即使没有显示地使用static关键字,构造器实际上也是静态方法。因此,当首次创建类型为Dog的对象时(构造器可以看成是静态方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件。”
去网上查了好多资料,大家对书中这段话的理解大多是全盘推翻,觉得此话毫无意义,可以忽略不计。理由总结来讲就是下面两条:
1、静态方法中不能出现this、super等关键字,而构造方法主要用途就是来初始化成员变量,this关键字在构造方法中屡见不鲜。
2、静态方法可以理解为“属于”类的,不需要创建对象就可以调用,而构造方法是在创建对象时调用的,为对象服务
但我细细琢磨后觉得如此权威的一本书,而且是修正后的第四版,我这个小白都能看的出的问题人家一代大神不可能放任不管。所以作者这样讲一定有他的道理。
然后我回过头来仔细考虑了静态方法之所以会被“设计出来”,是因为有时候我们往往不想先实例化一个对象却又需要调用一个方法,就会把这个方法定义为静态的,大家最熟悉的main方法就是如此,在调用main方法之前没有创建任何对象,但是程序的执行需要从main方法开始。
那么从这个角度去探讨构造方法是隐式的静态方法就可以讲得通了:在创建一个对象时,需要调用它可爱的构造方法,注意前提条件是“创建一个对象时”、“创建一个对象时”、“创建一个对象时”(重要的事情说三遍),并不是像实例方法是在创建了一个对象后,用对象的引用去调用方法。这一点与静态方法极其类似!
但构造方法与静态方法又有着很大的区别(如this、super关键字的使用),所以《java编程思想》的作者把构造方法说成隐式静态是很严谨的!构造方法不同于实例方法和静态方法,这点不仅体现在功能上(在创建对象时初始化成员变量)还有它隐式静态的特性!
自学java没多久,文中若有疏漏之处欢迎各位网友批评指正!