zoukankan      html  css  js  c++  java
  • Java对象实例化的过程

    1.先为对象分配空间,并按属性类型默认初始化
    ps:八种基本数据类型,按照默认方式初始化,其他数据类型默认为null
    2.父类属性的初始化(包括代码块,和属性按照代码顺序进行初始化)
    3.父类构造函数初始化
    4.子类属性的初始化(同父类一样)
    5.子类构造函数的初始化

    class A{
    int a = 8;

    {
    	//初始化块 无名语句块
    	//System.out.println("1");
    	printA();
    }
    int b = 9;
    public A()
    {
    	//System.out.println("2");
    	printA();
    }
    public void printA()
    {
    	System.out.println(a);
    }
    

    }

    class B extends A{
    int a = 6;
    {
    printA();
    }
    public B(){
    printA();
    }
    public void printA(){
    System.out.println(this.a);
    }

    @Override
    protected void finalize() throws Throwable {
    	System.out.println("被收了");
    	super.finalize();
    }
    

    }
    调用new B()输出结果:0066

    首先为对象分配存储空间
    a(A)->并默认赋值为0
    a(B)->并默认赋值为0
    1.根据对象实例化过程,初始化父类属性,int a = 8,将a(A)中的值修改为8
    2.执行A中代码块中的代码,由于子类复写了printA()方法,调用子类的printA(),B类中的a仍为0,所以打印0
    3.调用父类的构造函数,执行printA()方法,同上,执行子类中的printA()方法,打印0
    4.初始化子类的属性,将a(B)中的值修改为6,执行代码块中printA()方法,打印6
    5.初始化子类的构造函数,执行子类的printA()方法,打印6
    6.输出结果为:0066

    补充:当一个对象没有被任何变量引用的时候,或者将一个对象置为null的时候,系统的垃圾回收机制会在下一次垃圾回收的时候销毁该对象,调用对象的finalize()方法
    主动调用System.gc()方法也会主动触发垃圾回收机制销毁对象

  • 相关阅读:
    更新增加一个门店ID字段的值
    测试成功,修改能运行代码--待优化
    奶粉运营,跑数据三个模板。
    子查询返回多条报错误
    分析跑数口径与表内在关系逻辑
    NAVICAT PREMIUM 初识
    长沙生活
    金蝶用户操作
    EXCEL对比重复数据
    处理链长期检查问题
  • 原文地址:https://www.cnblogs.com/coderwjq/p/6549749.html
Copyright © 2011-2022 走看看