[quote=引用 1 楼 u013283727 的回复:] 自己先顶一个。然后说下我的理解: 所有的变量初始化最终都会在构造器内进行,而且是按上面说的顺序进行,构造器里面的赋值代码最后执行,但是仅仅是赋值而已,为了让运行时分配内存变得有条理,通常我们打印的输出只能说明他们的先后顺序,但是他们的初始化却早已在编译期埋下伏笔。不过运行时才真正调用了构造器啊,前面(编译期)只能说是个排版吧。
自己先顶一个。然后说下我的理解: 所有的变量初始化最终都会在构造器内进行,而且是按上面说的顺序进行,构造器里面的赋值代码最后执行,但是仅仅是赋值而已,为了让运行时分配内存变得有条理,通常我们打印的输出只能说明他们的先后顺序,但是他们的初始化却早已在编译期埋下伏笔。不过运行时才真正调用了构造器啊,前面(编译期)只能说是个排版吧。
int i=6; 先int i=0 在 i=6
谈谈个人的理解。我觉得编译器干的事就是语法检查,然后把java文件编译成jvm可执行的字节码文件。然后当程序被运行时,步骤是这样的,字节码(字节码也是按一定规则拆分存放的,如常量池,访问标识,接口,方法域等)会被加载到内存(像类的全限定名,类型,常量池等会被存到方法区),然后执行程序时jvm会先启动main线程,接着就是一行行执行程序,当执行到new时,会在队中开辟一个对象空间,默认初始值为空或者0等(要看数据类型,如int 就是初始化为0),然后执行构造函数,构造函数会将参数传到对象的堆空间,给里面的实例域赋初值。
62,614
社区成员
307,326
社区内容
加载中
试试用AI创作助手写篇文章吧