java之静态变量,静态代码块及构造方法的执行顺序
1.我们来运行如下代码:
package day11;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
public class try2 {
public static void main(String[] args) {
new Child();
}
}
//此类只实现一个打印的作用
class Print{
public Print(String s1){
System.out.println(s1);
}
}
//父类
class Parent{
//父类静态变量
static Print p1 = new Print("父类静态变量");
Print p2 = new Print("父类变量");
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public Parent(){
System.out.println("父类构造方法");
}
}
//子类
class Child extends Parent{
static Print p1 = new Print("子类静态变量");
Print p2 = new Print("子类变量");
static{
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public Child(){
System.out.println("子类构造方法");
}
}
2.结果如下:
父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类变量
父类代码块
父类构造方法
子类变量
子类代码块
子类构造方法
最后给出执行步骤:
1、父类静态变量和静态代码块(先声明的先执行);
2、子类静态变量和静态代码块(先声明的先执行);
3、父类的变量和代码块(先声明的先执行);
4、父类的构造函数;
5、子类的变量和代码块(先声明的先执行);
6、子类的构造函数。