主要测试父类与子类中静态成员和静态代码块与构造函数的启动顺序。编写一个基类:Car,再编写一个子类,AudiCar,在方法中添加一些调试信息,代码如下.
1.Car类的代码如下:
package com.test.classLoader.order;
/**
* 测试基类
*
* @author rey
*
*/
public class Car {
static{
System.out.println("[Car]中:静态方法块!");
}
/**
* 构造函数
*/
public Car() {
super();
System.out.println("[Car]中:构造函数!");
}
protected String m_sCarName = null;
/**
* 汽车启动类
*/
public void start() {
System.out.println("[Car]中:start方法!");
}
/**
* 停止
*/
public void stop(){
System.out.println("[Car]中:stop方法!");
}
public static void doStart(){
System.out.println("[Car]中静态方法:doStart方法!");
}
}
2.Audi类的代码如下:
/**
*
*/
package com.test.classLoader.order;
/**
* @author rey
*
*/
public class AudiCar extends Car {
static{
System.out.println("[AudiCar]中:静态方法块!");
}
/**
* 构造函数
*/
public AudiCar() {
super();
System.out.println("[AudiCar]中:构造函数!");
}
/**
* 汽车启动类
*/
public void start() {
System.out.println("[AudiCar]中:start方法!");
}
public static void doStop(){
System.out.println("[AudiCar]中静态方法:doStop方法!");
}
}
3.测试Car与AudiCar类的启动顺序,TestCarMain代码如下:
/**
*
*/
package com.test.classLoader.order;
/**
* @author rey
*
*/
public class TestCarMain {
/**
* @param args
*/
public static void main(String[] args) {
AudiCar aAudiCar = new AudiCar();
aAudiCar.start();
}
}
打印结果:
[Car]中:静态方法块!
[AudiCar]中:静态方法块!
[Car]中:构造函数!
[AudiCar]中:构造函数!
[AudiCar]中:start方法!
得出结论:
1.执行父类中的静态成员和方法块
2.执行子类中大的静态成员和方法块
3.执行父类构造方法
4.执行子类构造方法
5.执行父类中其他成员和方法
6.执行子类中的其他成员和方法,如果new的是子类对象,则直接执行子类的方法,不会再执行父类中的同名同参数的方法。