总的来说:先加载类,在加载实例
顺序如下:
1、类属性,也叫静态属性(含静态代码块,就是属性前面加了static的那种),只加载一次。父类加载在子类前。
在类加载器加载该类的时候加载。
2、实例属性,也叫非静态属性。父类在子类之前。
在生成实例的时候加载(构造方法之前)。
3、构造方法,先父类,后子类。
生成实例的时候会调用构造方法(实例属性加载完调用构造方法)。
2.3俩点有个要注意的地方:加载完父类实例属性后会加载父类构造方法,然后再加载子类实力属性以及子类构造方法。
不多说,直接上例子。
1、Print.java
package com.yuyubing.lambda;
public class Print {
public Print(int i) {
System.out.println("instance print: " + i);
}
public Print(int i, PrintType type) {
if (type == PrintType.PARENTS) {
System.out.println("parent static print: " + i);
} else {
System.out.println("son static print: " + i);
}
}
enum PrintType {
PARENTS,
SON
}
}
2、Parents.java
package com.yuyubing.lambda;
import com.yuyubing.lambda.Print.PrintType;
public class Parents {
private static Print param5 = new Print(5, PrintType.PARENTS);
static {
System.out.println("parents static block");
}
private static Print param6 = new Print(6, PrintType.PARENTS);
private Print param1 = new Print(1);
{
System.out.println("parents instance block");
}
public Parents() {
System.out.println("parents construction method ");
}
private Print param2 = new Print(2);
}
3、Son.java
package com.yuyubing.lambda;
import com.yuyubing.lambda.Print.PrintType;
public class Son extends Parents {
private Print param1 = new Print(3);
private static Print param7 = new Print(7, PrintType.SON);
static {
System.out.println("son static block");
}
private static Print param8 = new Print(8, PrintType.SON);
{
System.out.println("son instance block");
}
public Son() {
System.out.println("son construction method ");
}
private Print param2 = new Print(4);
}
4、Hello.java
package com.yuyubing.lambda;
public class Hello {
public static void main(String[] args) {
Son son1 = new Son();
Son son2 = new Son();
}
}
运行结果如下:
parent static print: 5
parents static block
parent static print: 6
son static print: 7
son static block
son static print: 8
instance print: 1
parents instance block
instance print: 2
parents construction method
instance print: 3
son instance block
instance print: 4
son construction method
instance print: 1
parents instance block
instance print: 2
parents construction method
instance print: 3
son instance block
instance print: 4
son construction method