首页 > 其他 > 详细

7.初始化与清理(类的生命周期和对象的创建过程)

时间:2019-03-23 13:14:01      阅读:163      评论:0      收藏:0      [点我收藏+]

类的生命周期

  Student s=new Student();

  在上面短短的一句话中,包括了以下步骤:

  加载,连接(验证,准备,解析)初始化,对象生命(对象实例化,垃圾收集,对象终结)卸载类型

  • 加载 *.class这个类
  • 连接
  1. 验证:看看加载的类是否正确,数据会不会损坏虚拟机
  2. 准备:为staic静态变量分配内存,初始化为默认值
  3. 解析:将符号引用转为直接引用
  • 类初始化:给静态信息赋值
  1. 执行<cl init>方法:类初始化
  2. 什么时候执行呢:实例化,调用main()函数所在类,调用该类的静态方法
  3. 对于静态代码块,类初始化的时候执行
  4. 类初始化完了之后,成员初始化:sex,age这些成员变量和成员方法
  5. 构造块,可用多次,用来赋值,执行顺序是:静态代码块>构造块>构造方法
static{
age=9;//,这里是静态代码块,age无法访问但可赋值
}
{
age=9;
}//这里是构造块,在构造器之前执行

 

  • 对象创建的过程
  1. 加载类
  2. 在堆中分配内存
  3. 给属性赋值
  4. 初始化属性
  5. 构造块
  6. 构造器new
  7. 与栈中的指定变量相连,s指向new出来的对象
  • 总结:
  • 先静态后非静态
  • 先声明后赋值
  • 先属性后方法
  • 先父类后子类(后面)

例题

public class Test1 {
    int c;
    static int a=10;//步骤1
    static {
        //System.out.println("hello"+a+b);//2报错,b只能赋值,不能访问
        a++;    //2 a=11
    }
    static int b=9;//3
    {
        b++;
        System.out.println(++b);//7
        System.out.println(d+e);//8,值:11
    }
    static int d=11;//4
    int e=11;
    public Test1(){
        System.out.println(c+a);//9
    }
}
    //主函数
    main(){
        System.out.println(Test1.a);//5
        Test1 t1=new Test1();//6
    }

 

7.初始化与清理(类的生命周期和对象的创建过程)

原文:https://www.cnblogs.com/anzhilanxiao/p/10583335.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!