示例
class User{
public User() {
System.out.println("User's constructor...");
}
}
class Parent{
private User user = new User();
public Parent() {
System.out.println("Parent's constructor...");
}
}
class Children extends Parent{
private User user = new User();
public Children() {
System.out.println("Children's constructor...");
}
}
public class ExtendTest {
public static void main(String[] args) {
/**
* User's constructor...
* Parent's constructor...
* User's constructor...
* Children's constructor...
*/
new Children();
}
}
总结
- 静态只在类加载的时候执行且只执行一次;
- 非静态只有在实例化的时候执行,每次创建对象都执行;
- 静态在非静态之前执行,基类静态优先于衍生类静态执行;
- 静态属性和静态代码块的执行属性取决于它们在类中的位置,谁在前先执行谁;
- 非静态属性和构造代码块的执行顺序取决于它们在类中的位置,谁在前执行谁;
- 先初始化父类,在初始化子类。