"在堆内存中建立对象的特性先进行默认初始化,再进行显示初始化,那么什么是显示初始化,不太清楚,能解释下么? "楼上的没能正面回答楼主的问题啊,楼主是在问在对象建立的时候系统先进行默认初始化,然后在进行显式初始化。。。。。。。这和构造函数的调用过程有关
这得从对象的建立过程谈起,例如:
class Person{
int age;
boolean isMarried;
static int sex ;
public Person(int age,blooean isMarried,int sex){
this.age = age;
this.isMarried = isMarried;
this.sex = sex;
}
}
当 Person p1= new Person(20,true,1);Java虚拟机会先找到Person类的Person.class字节码文件加载到内存,当类的字节码被加载的时候static静态成员就会被初始化赋值,基本类型的数值型都会被默认初始化为零;接着在内存堆中为Person对象分配足够的存储空间,该存储空间会被清零,对象内的所有成员变量会被默认初始化赋值,基本类的数值型被默认为零,blooean默认为false,(age = 0 ,isMarried = false,sex = 0),接着会执行构造函数(会隐式的回溯调用父类的无参数的构造函数)显式的为对象各个成员赋值(age = 20,isMarried = ture ,sex = 1);
|