Java构造器
来源:互联网 发布:网络相亲平台 编辑:程序博客网 时间:2024/06/06 00:45
有啥相关问题请先看看这篇讲解。
Java语言层面的话,new Foo()表达式要做两件事情:分配空间,调用构造器。对应到JVM的字节码层面是:
new Foo // 1. 分配空间给新对象
dup
invokespecial Foo::Foo()V // 2. 调用构造器
这样就比较好解释了:new字节码负责分配空间,并且它会触发Foo类的加载与初始化——程序执行到这里如果Foo类尚未被加载与初始化,那么它就必须现在完成初始化之后再回来继续执行new的动作。
invokespecial负责调用构造器,前面的dup是用于传递this参数的。它不负责触发Foo类的加载与初始化——前面的new字节码已经解决了这个问题。
上面的描述都跟getClass()没有任何关系——Object.getClass()是要先有了对象实例才有意义的实例方法,执行new的时候对象还不存在呢。
更有关系的是ClassLoader.loadClass()方法。JVM在使用用户自定义类加载器加载类的时候会调用这个loadClass()方法。
Foo.class所得到的Class对象是在JVM加载Foo类时一并创建的。
作者:RednaxelaFX
链接:https://www.zhihu.com/question/35860619/answer/64802279
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
0 0
- [java]java构造器
- 关于Java构造器
- java静态构造器
- Java 构造器
- java构造器
- java构造器
- java缺省构造器
- java构造器小结
- java构造器
- Java中的构造器
- JAVA构造器
- java构造器
- java构造器
- Java 构造器
- java构造器小结
- java构造器小结
- Java 构造器
- Java 构造器初始化
- HQL语言基本语法
- latex,emacs学习记录1
- SPI工作原理分析
- springMVC增强
- 从零开始的Android新项目2 - Gradle篇
- Java构造器
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- JDBC编程之数据库基本操作
- [LeetCode]289. Game of Life
- IOS开发中NSRunloop跟NSTimer的问题
- 12C-OCP升级1z-060-006
- C++全局常量与变量的定义方法
- jsp+servlet
- delphi httpserver 使用方法