加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java实例化

发布时间:2020-12-14 16:30:13 所属栏目:Java 来源:网络整理
导读:当一个对象在 Java中实例化时,真正进入内存的是什么? 是否包含父构造函数的副本? 为什么隐藏的数据成员在转换时的行为与覆盖方法不同? 我理解通常给出的正确的使用这些东西的抽象解释,但JVM如何真正做到这一点. 解决方法 当一个对象被实例化时,只有非静态
>当一个对象在 Java中实例化时,真正进入内存的是什么?
>是否包含父构造函数的副本?
>为什么隐藏的数据成员在转换时的行为与覆盖方法不同?

我理解通常给出的正确的使用这些东西的抽象解释,但JVM如何真正做到这一点.

解决方法

当一个对象被实例化时,只有非静态数据实际上是“创建”,以及对创建它的对象类型的引用.

没有一种方法被复制.

创建它的类的“引用”实际上是一个指针分派表.存在针对该类可用的每种方法的一个指针.指针总是指向方法的“正确”(通常是对象树中最低/最特定的).

这样,如果你有一个顶级的调用另一个方法,但另一个方法已被覆盖,被覆盖的方法将被调用,因为这是表中的指针指向.由于这种机制,调用覆盖方法比顶级方法不应该花更多的时间.

指针表成员变量是类的“实例”.

可变问题与完全不同的机制“名称空间”有关.变量不是“Subclassed”(它们不进入dispatch表),但是public或protected变量可以被局部变量隐藏.这在编译时都由编译器完成,与运行时对象实例无关.编译器确定您真正想要的对象,并将其引用到代码中.

范围界定规则通常倾向于“最近的”变量.任何远离同一个名字的东西都将被忽略(阴影),有利于更接近的定义.

如果您有兴趣,要更多地了解内存分配:所有“OBJECTS”都分配在“堆”(实际上比真正的堆,但是相同的概念更令人高兴和美丽)变量总是指针 – Java将永远不会复制一个对象,你总是将一个指针复制到该对象.方法参数和局部变量的变量指针分配在堆栈上完成,但即使在堆栈上创建变量(指针),它们仍然从未在堆栈上分配它们指向的对象.

我很想写一个例子,但这已经太长了.如果你希望我用扩展关系输出几个类,并且他们的方法和数据如何影响代码的生成,我可以…只是问.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读