采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您上课说构造方法是回调方法,真正的this是这个特殊方法调用的,我查阅虚拟机规范上面这样写。
我对这句话的理解是,其实就是执行一个静态块,给静态变量赋初值,但是静态块方法不是在类初始化的时候只执行一次吗。如果是它创建了this,一个类可以构造n个象持有n个不同的this那么这个方法也会被调用n次吗?感觉有点不对头,恳请老师赐教
举个例子来说:当我们在 new A() 的时候, JVM就知道我们要创建一个A对象的实例, 那么JVM怎么去创建了,JVM就是去调用这个<clinit>方法,这个都是它内部写好的实现,去完成真正的 对象实例的创建工作,比如:分配内存啊、初始化属性啊 等工作,也就是说,<clinit>方法执行完了,其实实例对象就已经创建好了。
然后呢,这个时候JVM才会来调用 我们创建这个所谓的构造方法,也就是 A(),本质上这个方法,对于JVM而言,就是一个回调方法,也就是给程序员一个机会,在创建类实例的时候,想做点啥功能的话,就写到这里,如果没有,你不写任何东西,也没有关系,因为对象实例已经创建好了的。
静态块又是另外一个逻辑了,静态块是类装载的时候就运行的,它跟实例对象没有关系,你不要搞混了
收到,谢谢老师答疑解惑,我后面去看了一些资料,老师您看这篇文章写得对不对呢https://blog.csdn.net/u013309870/article/details/72975536
应该是<init>方法初始化实例对象吧?我也觉得老师课程里说的不对,这篇回答也不对,我的理解是<clinit>方法应该是静态代码块所构成的方法,与对象实例化无关。
"静态块是类装载的时候就运行的" 对吗?不对吧,静态代码块是在类初始化的时候执行的,而类装载在类初始化之前,两步骤不一定一起执行。
登录后可查看更多问答,登录/注册
无论是要准备面试还是内功提升,只要你做Java,就需要学习JVM
940 2
1.3k 2
878 1
1.1k 7
1.0k 5