java语言规范里有这么一句话
Constructor declarations are not members. They are never inherited and therefore are not subject to hiding or overriding.
实例构造器无法被隐藏或覆写,不参与多态,因而可以做静态绑定。从这个意义上可以认为实例构造器是“静态”的,但这种用法与Java语言定义的“静态方法”是两码事
--------------------------------------------------------------------------------------------------------------
疑问结束
java的初始化顺序,贴上一段代码
父类:
子类:
主方法:
运行结果:
在没有把初始化的顺序了解透彻的话很容易会理所当然的理解为先执行父类的静态代码块再执行父类的代码块,然后再执行子类的静态代码块再执行子类的代码块,在第一次看到这个程序的时候我也犯了同样的错误,并且在执行父类初始化的时候调用的show方法理所当然的认为是调用了父类的show方法,其实初始化的是子类的对象,调用的是被子类重写的show方法。
得出结论,初始化的顺序:
父类静态变量、 父类静态初始块 (它们的在类中的顺序就决定了它们的初始化顺序,而不是变量一定会优先于初始块)> 子类静态变量 、子类静态初始块 > 父类成员变量 、父类非静态初始块(顺序执行,debug下看到不在代码块中输入成员变量,没有执行到成员变量初始化时,成员变量为null) > 父类构造器 > 子类成员变量 、 子类非静态初始块 (顺序执行)> 子类构造器
清理:
JAVA垃圾回收器负责回收无用对象占据的内存资源。垃圾回收器只释放那些由new分配的内存。
1.对象可能不被垃圾回收
2.垃圾回收至于内存相关