Java类的实例化的初始化过程

A a = new A();

new 创建对象过程:
1.类加载
    代码验证
2.给对象在内存(堆)中分配空间(给属性赋值);
3.属性赋默认值;
byte,short.int,long ->0
float  ->0.0f
double ->0.0
boolean  ->false
String ->null
char ->'u0000'
4.给属性赋初始值;(用等号‘=’)
5.调用构造方法(方法和类名相同,没有返回类型)
6.将对象在堆区中的首地址返回给引用a

/*
 * Java类实例化的初始化过程.
 *   执行顺序:
 *   (静态变量->静态初始化块)->main->(实例变量->实例初始化块)->构造器
 */

public class NewInstanceTest1
{
    public static void main(String[] args)
    {
        System.out.println("main");

        System.out.println("---111---");
        new NewInstanceTest1();

        System.out.println("---222---");
        new NewInstanceTest1();
    }


    private static int i = 1;
    public static String sStr = "静态变量";
    public String iStr = "实例变量";


    {
        // 实例初始化块
        System.out.println("进入实例初始化块");
        System.out.println("实例初始化块中调用变量:" + iStr);
        System.out.print("实例初始化块中调用方法:");
        iTalk();
    }


    static
    {
        // 静态初始化块
        System.out.println("进入静态初始化块");
        System.out.println("静态初始化块中调用变量:" + sStr);
        System.out.print("静态初始化块中调用方法:");
        sTalk();
    }

    public static void sTalk()
    {
        // 静态方法
        System.out.println("静态方法" + "/静态变量值" + (++i));
    }

    public void iTalk()
    {
        // 实例方法
        System.out.println("实例方法");
    }

    public NewInstanceTest1()
    {
        // 构造器
        System.out.println("构造器");
    }

}



// 输出结果:
进入静态初始化块
静态初始化块中调用变量:静态变量
静态初始化块中调用方法:静态方法/静态变量值2
main
---111---
进入实例初始化块
实例初始化块中调用变量:实例变量
实例初始化块中调用方法:实例方法
构造器
---222---
进入实例初始化块
实例初始化块中调用变量:实例变量
实例初始化块中调用方法:实例方法
构造器
原文地址:https://www.cnblogs.com/kabi/p/6362841.html