java中构造函数的返回类型是什么?
正如我们所知,我们不必向Java构造函数添加任何返回类型java中构造函数的返回类型是什么?,java,constructor,jvm,bytecode,Java,Constructor,Jvm,Bytecode,正如我们所知,我们不必向Java构造函数添加任何返回类型 class Sample{ ..... Sample(){ ........ } } 在目标C中,如果我们创建一个构造函数,它将返回一个指向其类的指针。但我认为这不是强制性的 AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass 类似地,构造函数是否转换为返回对自
class Sample{
.....
Sample(){
........
}
}
在目标C中,如果我们创建一个构造函数,它将返回一个指向其类的指针。但我认为这不是强制性的
AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass
类似地,构造函数是否转换为返回对自己类的引用的方法
像这样:
class Sample{
.....
Sample Sample(){
........
return this;
}
}
编译器是否向构造函数添加对同一类的引用的返回类型?
构造函数发生了什么?
有没有关于这方面的参考资料
编辑:
实际上,我希望答案是字节码级别或JVM级别,甚至更低。构造函数与方法类似,只是它们使用类的名称,并且没有返回类型。使用构造函数的全部目的是创建一个对象(类的一个实例)并在内存(堆)中分配它(通过
new
关键字),还可以初始化任何字段(如果可用)。构造函数是通过特殊的java关键字new
调用的,它创建(并初始化)指定具体类型的对象
我想你可以说
new
和所选构造函数的组合“返回”了一个对象,在java中,它当然是一个隐藏的指针虽然构造函数类似于方法,但它们不是方法。它们没有返回类型,不被继承,并且不能被子类隐藏或重写
构造函数由类实例创建表达式(基本上是使用new
)调用,由其他构造函数显式调用(使用this(…)
或super(…)
语法)调用,并由字符串连接操作符调用。没有其他方法可以调用构造函数(特别是,它们不能像其他方法一样被调用)
有关更多信息,请参阅
构造函数是否转换为返回对自己类的引用的方法
否但如果指定这样做,则为是
编译器是否向构造函数添加对同一类的引用的返回类型
否它没有
构造函数发生了什么事
它是在创建对象时运行的方法。通常,通过使用“new”关键字。它可能会执行一些初步任务,或者在构建过程中返回一些内容或分配一些值
有没有关于这方面的参考资料
这个
,不需要返回任何东西。这是因为调用方负责创建对象(而不是构造函数)
如果您尝试只在字节码中创建对象而不调用构造函数,则会出现VerifyError。但是,在oracle JVM上,您可以使用Unsafe.allocateInstance()创建对象,而无需调用构造函数
静态初始化器称为
,不带任何参数,构造函数称为
。两者都有一个void返回类型
在大多数情况下,Java开发人员不知道这一点(除非他们正在生成字节码),但是只有当您在堆栈跟踪中看到这些“方法”时(尽管您看不到返回类型)构造函数才会返回调用它的类的类引用-
class A {
int x;
A(int a) {
x = a;
}
}
class B {
public static void main(String asd[]) {
A a = new A(4);
System.out.println(a);
}
}
在调用构造函数
A(…)
后,此构造函数将向调用者返回类A
类型的引用(即A A=newa(4)
)。构造函数的返回类型是对应的类类型
package com.ie.test;
import java.lang.reflect.*;
public class a {
public a() {
super();
System.out.println("*** no-arg constructor ***");
}
public static void main(String[] args) {
Constructor[] constructors = a.class.getConstructors();
for (Constructor constructor:constructors) {
int i = constructor.getModifiers();
AnnotatedType annotatedType = constructor.getAnnotatedReturnType();
System.out.println("***********Returntype *******"+annotatedType.getType());
System.out.println("*******constructor *****"+Modifier.toString(i));
}
Method[] methods = a.class.getDeclaredMethods();
for (Method method:methods) {
int i = method.getModifiers();
// Class c = method.getReturnType();
AnnotatedType annotatedType = method.getAnnotatedReturnType();
System.out.println("***********Returntype *******"+annotatedType.getType());
// System.out.println(c);
System.out.println("*******methods*******"+Modifier.toString(i));
}
}
public int m1() {
System.out.println("***************");
return 0;
}
}
我相信构造函数是特殊的,处理方法与普通方法调用不同。尽管“返回类型”是包含类型本身,但出于所有目的:尽管在代码级别从未显式返回任何内容。请给我一个参考以澄清我的错误doubt@sonuthomas是新的,,但是如果没有构造函数,就不能调用new。Ted Hopp给了我这个
构造函数是由类实例创建表达式(基本上是使用new)调用的,是由其他构造函数显式调用的(使用这个(…)或super(…)语法),通过字符串连接运算符。
@sonuthomas您仍然需要在new
关键字之后使用构造函数,当然您可以在该构造函数中使用this()
或super()
。@praetoriandroid您说得对!但是,我更新了我的答案。我喜欢这样。这种类型的答案是我想要的…在JVM级别…请给我一个参考,让我学习more@peter“cinit”中的“c”代表什么?@Geek是“类初始值设定项”的缩写。在源代码级别,您所说的足够正确,但是公认的答案(Peter Lawrey的)根据提问者的要求,包括底层VM模型的详细信息。