构造器被哪位高手调用
构造器被谁调用?
如题,以前看资料了解过对象创建过程,说什么先调用静态变量或静态代码块,非静态变量和代码块,然后调用构造函数。但是在Thinking in Java中说构造器是编译器调用的,那么后面运行时分配内存,赋初值,怎么又会调用构造器,表示不理解。谁能讲下在new一个对象时编译器做了什么。
------解决思路----------------------
你的理解有点那么意思,但是真正的过程可不是这么简单,单说构造器可能不能完全理解,这个要从类加载到对象初始化细说,由于都是概念性东西,楼主可以去搜一下“类加载步骤”入手。
------解决思路----------------------
谈谈个人的理解。我觉得编译器干的事就是语法检查,然后把java文件编译成jvm可执行的字节码文件。然后当程序被运行时,步骤是这样的,字节码(字节码也是按一定规则拆分存放的,如常量池,访问标识,接口,方法域等)会被加载到内存(像类的全限定名,类型,常量池等会被存到方法区),然后执行程序时jvm会先启动main线程,接着就是一行行执行程序,当执行到new时,会在队中开辟一个对象空间,默认初始值为空或者0等(要看数据类型,如int 就是初始化为0),然后执行构造函数,构造函数会将参数传到对象的堆空间,给里面的实例域赋初值。
------解决思路----------------------
这不是 自己写的构造, 是编译器添加的构造, 初始化变量默认值如
------解决思路----------------------
new关键字创建对象:

1)为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值
2)如果实例变量在声明时被显示初始化,那就把初始化值赋给实例变量
3)调用构造方法,显示初始值
4)返回对象的引用(把指针给对象名)
------解决思路----------------------
<深入Java虚拟机>去看类加载机制就明白了
如题,以前看资料了解过对象创建过程,说什么先调用静态变量或静态代码块,非静态变量和代码块,然后调用构造函数。但是在Thinking in Java中说构造器是编译器调用的,那么后面运行时分配内存,赋初值,怎么又会调用构造器,表示不理解。谁能讲下在new一个对象时编译器做了什么。
------解决思路----------------------
你的理解有点那么意思,但是真正的过程可不是这么简单,单说构造器可能不能完全理解,这个要从类加载到对象初始化细说,由于都是概念性东西,楼主可以去搜一下“类加载步骤”入手。
------解决思路----------------------
谈谈个人的理解。我觉得编译器干的事就是语法检查,然后把java文件编译成jvm可执行的字节码文件。然后当程序被运行时,步骤是这样的,字节码(字节码也是按一定规则拆分存放的,如常量池,访问标识,接口,方法域等)会被加载到内存(像类的全限定名,类型,常量池等会被存到方法区),然后执行程序时jvm会先启动main线程,接着就是一行行执行程序,当执行到new时,会在队中开辟一个对象空间,默认初始值为空或者0等(要看数据类型,如int 就是初始化为0),然后执行构造函数,构造函数会将参数传到对象的堆空间,给里面的实例域赋初值。
------解决思路----------------------
这不是 自己写的构造, 是编译器添加的构造, 初始化变量默认值如
int i=6; 先int i=0 在 i=6
------解决思路----------------------
new关键字创建对象:
1)为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值
2)如果实例变量在声明时被显示初始化,那就把初始化值赋给实例变量
3)调用构造方法,显示初始值
4)返回对象的引用(把指针给对象名)
------解决思路----------------------
<深入Java虚拟机>去看类加载机制就明白了