JAVA编译和运行的过程​

详情请看:

JAVA编译和运行的过程


实例化对象的过程:


 /**在创建没有父类的类的对象时:(对象的实例化过程)
 *
 * 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是
 * (静态变量、静态初始化块)>>(变量、初始化块)>>构造方法(构造器)。
 * 我们也可以通过下面的测试代码来验证这一点:
 * @author admin
 *
 */
public class InitialOrderTest {
    
        //静态变量
    public  static String staticField="静态变量";
    
    //静态初始化快
    static {
        System.out.println(staticField);
        System.out.println("静态初始化块");
    }
    
    //变量
    public String field="变量";
    
    //初始化快
    {
        System.out.println(field);
        System.out.println("初始化块");
    }
    
    //构造方法
    public  InitialOrderTest(){
        System.out.println("构造方法");
    }
    
    public static void main(String[] args) {
        new InitialOrderTest();
        
        /*
         * 输出的结果(即执行的顺序也就是实例化过程):
         * 静态变量 >> 静态初始化块 >> 变量 >> 初始化块 >> 构造方法(构造器)  
           */                
    }
}

/**
 * 有继承的情况下对象实例化过程
 *
 * 1. 父类--静态变量
 * 2. 父类--静态初始化块
 * 3. 子类--静态变量
 * 4. 子类--静态初始化块
 * 5. 父类--变量
 * 6. 父类--初始化块
 * 7. 父类--构造器
 * 8. 子类--变量
 * 9. 子类--初始化块
 * 10.子类--构造器
 *
 *  并不是父类完全初始化完毕后才进行子类初始化的,
 *  实际上子类的静态变量和静态初始化块的初始化是在
 *  父类的变量、初始化块和构造器初始化之前就完成了。
 */
class Parent {
    //静态变量
    public static String p_StaticField="父类--静态变量";
    
    //变量
    public String p_Field="父类--变量";
    
    //静态初始化快
    static {
        System.out.println(p_StaticField);
        System.out.println("父类--静态初始化块");
    }
    
    //初始化块    
    {
        System.out.println(p_Field);
        System.out.println("父类--初始化块");
    }
    
    //构造器
    public Parent (){
        System.out.println("父类--构造器");
    }
}

public class Child extends Parent{
    //静态变量
    public static String s_StaticField="子类--静态变量";
    
    //变量
    public String s_Field="子类--变量";
    
    //静态初始化快
    static {
        System.out.println(s_StaticField);
        System.out.println("子类--静态初始化块");
    }
    
    //初始化块
    {
        System.out.println(s_Field);
        System.out.println("子类--初始化块");
    }
    
    //构造器
    public Child(){
        System.out.println("子类--构造器");
    }
    
    //程序入口
    public static void main(String[] args) {
        new Child();
    }
}

你可能感兴趣的:(JAVA编译和运行的过程​)