在单一类中:
执行顺序为:(静态变量、静态代码块)(同声明的先后顺序有关)-->(非静态变量、非静态代码块)(同声明的先后顺序有关)--> 构造方法
在有继承关系的子父类中
执行顺序为:(父类静态变量、父类静态代码块)(同声明的先后顺序有关)-->(子类静态变量、子类静态代码块)(同声明的先后顺序有关)-->(父类非静态变量、父类非静态代码块)(同声明的先后顺序有关)-->(父类构造方法)-->(子类非静态变量、子类非静态代码块)(同声明的先后顺序有关)-->(子类构造方法)
代码部分
package com.atguigu.java;
//静态变量和静态代码块、成员变量和普通代码块、构造器加载顺序总结
public class StaticDemo {
public static String s = "父类静态变量";
static {
System.out.println(s);
String ss = "父类静态代码块";
System.out.println(ss);
}
public StaticDemo(){
System.out.println("父类构造器");
}
public String sss = "父类非静态变量";
{
System.out.println(sss);
String ssss = "父类普通代码块";
System.out.println(ssss);
}
}
class StaticDemo1 extends StaticDemo{
public static String m = "子类静态变量";
static{
System.out.println(m);
String mm = "子类静态代码块";
System.out.println(mm);
}
public StaticDemo1(){
System.out.println("子类构造器");
}
public String mmm = "子类非静态变量";
{
System.out.println(mmm);
String mmmm = "子类普通代码块";
System.out.println(mmmm);
}
}测试部分
package com.atguigu.java;
public class StaticTest1 {
public static void main(String[] args){
StaticDemo1 sd = new StaticDemo1();
}
}结果
父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类非静态变量
父类普通代码块
父类构造器
子类非静态变量
子类普通代码块
子类构造器对上面的代码块和变量顺序稍作修改,就会发现结果会变得不同。
版权声明:本文为csdn_chacha原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。