Java基础--对象

Q1:用什么操做对象?jvm

A1:句柄,即Handle,再换个说法,引用,甚至指针。spa

 

Q2:对象保存在哪里?线程

A2:通常对象存的地方无非在这几个区域中:寄存器,堆栈,栈,静态存储区,ROM,非RAM存储(好比字节流);在Java中,主要存储在堆和栈,具体能够分为方法逃逸(存在堆),线程逃逸(存在堆),和无逃逸(存储在栈)三种方式。指针

 

Q3:对象的初始化?对象

A3:对象能够分为是static和非static两种,两种对象的初始化顺序是不同的。class

就宏观上来讲,假设两种对象都存在:变量

总的顺序是先static后非static先基类后本类引用

具体是先基类的static字段初始化,而后本类中的static字段初始化,再到基类的非静态,再到本类中的非静态,以后执行基类中的构造器,再到本类构造器执行。方法

就微观来讲,在深刻理解jvm里也有讲过,Java解释器先查找类的路径,定位class文件,加载class对象,建立class对象,而后初始化静态对象,当使用new关键词时,先在堆上分配空间,以后空间所有清零,即null,再开始非静态对象的初始化,再执行构造器。static

 

Q4:static对象建立的特色?

静态变量定义时,若是是基本类型,如char,int等,先根据标准对其赋值初始值,若是是指向一个对象的句柄,则除非new一个对象链接起来,不然是null。

若是定义时同时初始化,那么跟非静态相似,但不一样的是static只有一个存储区域,而且只初始化一次,这个过程发生在Class对象首次载入的时候。

相关文章
相关标签/搜索