Loading

Java 对象初始化生命周期

class Man {

    String name;
    int age = 20;

    public static int sex = 1;

    Man(String name, int age) {
        //super(); //隐式父对象构造方法
        this.name = name;
        this.age = age;
    }

    void speak() {
        System.out.println("hello my name is " + this.name + " " + this.age);
    }

    public static void say() {
        System.out.println("hello!");
    }
}


class Process{
    public static void main(String[] args){
        Man p = new Man("Tom",24);
        p.speak();
    }
}

 

生命流程

0. main() 主函数入栈
1. Man p = new Man("Tom",24); 入栈
2. 虚拟机加载Man.class文件
3. 方法区载入 Man类构造函数、成员函数、成员变量,并初始化成员变量 name=null,age=0,然后显式赋值 name=null,age=20
4. 静态方法区载入 Main的静态成员函数,静态成员变量,并初始化静态成员变量sex=0,然后显式赋值 sex=1;
5. 通过new 在堆中开辟空间。
6. Man(String name,int age) 构造函数入栈 获取参数("Tom",24)

//当前成员变量状态
name=null,age=20,sex=1;

7. 执行构造函数内容---> this.name = "Tom",this.age = 24; 成员对象赋值完成

//当前成员变量状态
name="Tom",age=24,sex=1;

8. 局部变量 p指针 = 对象地址
9. Man p = new Man("Tom",24); 弹栈
10. p.speak(); 入栈
11. 执行p.speak() 方法
12. 弹栈
13. main() 弹栈
14. 运行结束

posted @ 2018-10-08 15:40  ZJH_BLOGS  阅读(291)  评论(0编辑  收藏  举报