[英]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.