代码块分类
基本上代码块分为三种:Static静态代码块、构造代码块、普通代码块
代码块执行顺序: 静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器
java类及实例初始化顺序
1、静态变量、静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只在类加载时,初始化一次)
2、非静态变量、非静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只要对象实例化一次,就初始化一次)
3、构造方法在非静态变量、非静态代码块之后执行。
4、子类静态变量、静态代码块在父类的静态变量、静态代码块之后执行。
5、子类非静态变量、非静态代码块在父类构造方法之后执行。
5、子类构造方法在父类构造方法之后执行。
6、静态方法不会被子类重写。
父类
package com.sk.load;
/**
* @Author sk
*/
public class Father {
private int i = test();
private static int j = method();
static {
System.out.print("1 ");
}
{
System.out.print("2 ");
}
public Father() {
System.out.print("3 ");
}
public int test() {
System.out.print("4 ");
return 1;
}
public static int method() {
System.out.print("5 ");
return 1;
}
}
子类
package com.sk.load;
/**
* @Author sk
*/
public class Son extends Father {
private int i = test();
private static int j = method();
static {
System.out.print("7 ");
}
{
System.out.print("8 ");
}
public int test() {
System.out.print("9 ");
return 2;
}
public static int method() {
System.out.print("10 ");
return 2;
}
public static void main(String[] args) {
Son son1 = new Son();
System.out.println();
Son son2 = new Son();
}
}
结果:
5 1 10 7 9 2 3 9 8
9 2 3 9 8