繁体   English   中英

Java构造函数在调用时是否返回对象或对象的ID?

[英]Does the Java constructor return an object or an object's ID when called?

我想知道Java中的构造函数是否返回了某些东西。 我知道没有像“ 5”或“ Hello World”这样的返回值。 但是,如果我们为它分配一个变量:

People person = new People();

那么从逻辑上讲,返回对象或ID是不合理的吗? 对象存储在内存中的引用是否已分配给人员?

我现在正在考虑这个问题,因为我正在学习python,并且想将__new__方法连接到构造函数,然后将__init__连接到构造函数的主体(即初始值)。 我的教授不断告诉我__new__不存在,所以我希望得到答案以使事情更清楚。

在Java中,只有原语和对象引用作为字段,参数和局部变量的类型。 引用有点像ID,不同之处在于引用可以随时更改,而无需知道何时发生。

引用更接近于指针或对象索引的概念。 即。 它指的是内存位置。

new绝对是Java中的关键字,因此说它不存在并不是很有意义。 您可以说它在字节码中没有一对一的映射关系,只是字节码本身是在虚拟机上运行的,而实际运行的机器可能还是有很大不同。 也就是说,将字节码视为“真正”发生的方式没有多大意义。

构造函数不是“普通”方法。 并且您必须将new运算符与构造函数一起使用,然后您将引用该对象,因此这是指向内存中位置的指针(id)。

这是一些解释

构造函数声明类似于方法声明,只是它们使用类的名称并且没有返回类型

构造函数的返回类型是Class本身。
您不能认为它们是空的,但是可以保证在堆上分配内存并初始化成员字段,最后返回我们用作参考变量的新分配对象的地址。

简答:不

更多答案:“返回”某物的是new运算符。

在创建类的新实例时(通过new运算符),您必须向JVM提供两条信息:要实例化的类的名称以及构造新对象所需的任何参数(构造函数参数) 。

为此,java需要以下语法:

Type1 variableName = new Type2(parameter list);

在您的示例中: People person = new People(); People是引用命名的person的类型,并且是实例化的对象(即新的People)的类型。 构造函数不需要参数(无参数构造函数或默认构造函数),因此参数列表为“()”。

根据我的说法,当构造函数与'new'关键字一起使用时,它将为该对象分配内存空间。

例如:在您的代码中People person = new People();

它会自动在内存中分配新创建的对象“ person”所需的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM