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()方法也会主动触发垃圾回收机制销毁对象

原文地址:https://www.cnblogs.com/coderwjq/p/6549749.html