# re: 也谈一个对象初始化细节 回复 更多评论
2007-12-20 14:53 by
记住以下两点就好理解了
类的成员先于实例成员初始化
父类实例与子类实例的关系可以理解为 Is-A 的关系
所以子类实例初始化之前必须先有父类的实例
其实还应该区分类的初始化和实例了初始化,反应到字节码操作指令中是
类的初始化方法是 <clinit>()
实例的初始化方法是 <init>()
任何一个类的初妈化都要求它的所有祖先类(而不是祖先接口)预先被初始化。而一个接口的初始化,并不要求它的祖先接口预先被初始化。
类有主动初始化和被动初始化,如new和使用静态字段,还有我们一定用过 Class.forName() 方法,它还有一个重载方法 forName(String name, boolean initialize, ClassLoader loader),一个参数的forName,默认的initialize 是 true,即加载后就初始化。