父类 静态成员变量 ——> 父类 static 代码块 ——> 子类 静态成员变量 ——> 本类 static 代码块 ——> 父类 构造块 ——> 父类 默认构造方法 ——> 子类 构造块 ——> 子类(有参)构造方法。
package com.example.demo.basic;
/**
* @author Grace.Pan
* @date 2019/6/17
*/
public class Basic extends BasicBase {
static int i = 9;
String nick;
//{ } 构造块,只要对象创建就会执行一次。一个类允许有多个构造块。
{
System.out.println("本类 构造块1-----");
}
static {
System.out.println("本类 静态成员变量-----" + i);
System.out.println("本类 静态代码块-----");
}
public Basic() {
System.out.println("本类 默认构造方法-----");
}
static void methodA() {
System.out.println("本类 静态方法-----");
}
public Basic(String nick) {
this.nick = nick;
System.out.println("本类 有参构造方法-----");
}
{
System.out.println("本类 构造块2-----");
}
@Override
public void print() {
System.out.println("本类 print方法-----" + nick + "---" + i);
}
}
package com.example.demo.basic;
/**
* @author Grace.Pan
* @date 2019/6/17
*/
public class BasicBase {
static int j = 10;
String name;
//{ } 构造块,只要对象创建就会执行一次。
{
System.out.println("父类 构造块1-----");
}
static {
System.out.println("父类 静态成员变量-----" + j);
System.out.println("父类 静态代码块-----");
}
public BasicBase() {
System.out.println("父类 默认构造方法-----");
}
static void methodA() {
System.out.println("父类 静态方法-----");
}
public BasicBase(String name) {
this.name = name;
System.out.println("父类 有参构造方法-----");
}
{
System.out.println("父类 构造块2-----");
}
public void print() {
System.out.println("父类 print方法-----" + name + "---" + j);
}
}
package com.example.demo.basic;
/**
* @author Grace.Pan
* @date 2019/6/17
*/
public class Test {
public static void main(String[] args) {
System.out.println("-----------****子类加载顺序*****-------------------");
Basic basic = new Basic();
basic.print();
System.out.println("-----------*****父类加载顺序****-------------------");
BasicBase basicBase = new BasicBase();
basicBase.print();
System.out.println("-----------****子类有参构造*****-------------------");
Basic basic1 = new Basic("10");
System.out.println("-----------****父类有参构造*****-------------------");
BasicBase basicBase1 = new BasicBase("10");
System.out.println("-----------****子类构造块*****-------------------");
Basic basic2 = new Basic();
System.out.println("-----------****父类构造块*****-------------------");
BasicBase basicBase2 = new BasicBase();
System.out.println("-----------****静态方法*****-------------------");
Basic.methodA();
BasicBase.methodA();
}
}
-----------****子类加载顺序*****-------------------
父类 静态成员变量-----10
父类 静态代码块-----
本类 静态成员变量-----9
本类 静态代码块-----
父类 构造块1-----
父类 构造块2-----
父类 默认构造方法-----
本类 构造块1-----
本类 构造块2-----
本类 默认构造方法-----
本类 print方法-----null---9
-----------*****父类加载顺序****-------------------
父类 构造块1-----
父类 构造块2-----
父类 默认构造方法-----
父类 print方法-----null---10
-----------****子类有参构造*****-------------------
父类 构造块1-----
父类 构造块2-----
父类 默认构造方法-----
本类 构造块1-----
本类 构造块2-----
本类 有参构造方法-----
-----------****父类有参构造*****-------------------
父类 构造块1-----
父类 构造块2-----
父类 有参构造方法-----
-----------****子类构造块*****-------------------
父类 构造块1-----
父类 构造块2-----
父类 默认构造方法-----
本类 构造块1-----
本类 构造块2-----
本类 默认构造方法-----
-----------****父类构造块*****-------------------
父类 构造块1-----
父类 构造块2-----
父类 默认构造方法-----
------**静态方法**-----//类加载时已初始化静态方法,但不自动执行,仅在调用时执行。
本类 静态方法-----
父类 静态方法-----