我们知道我们不必向Java构造函数添加任何返回类型。
class Sample{
.....
Sample(){
........
}
}
在Objective C中,如果我们创建一个构造函数,它会返回一个指向其类的指针。但我认为这不是强制性的。
AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass
类似地,构造函数是否转换为返回对其自己的类的引用的方法??
像这样:
class Sample{
.....
Sample Sample(){
........
return this;
}
}
编译器是否向构造函数添加了对同一类的引用的返回类型? 构造函数发生了什么? 有没有参考研究这个?
实际上我希望答案是字节代码级别或JVM级别甚至更低。
答案 0 :(得分:17)
许多人已经回答了如何在Java中定义构造函数。
在JVM级别,静态初始化器和构造器是返回void的方法。静态初始化程序是静态方法,但构造函数使用this
并且不需要返回任何内容。这是因为调用者负责创建对象(而不是构造函数)
如果您尝试仅在字节代码中创建对象而不调用构造函数,则会得到VerifyError。但是在oracle JVM上,您可以使用Unsafe.allocateInstance()创建一个对象,而无需调用构造函数,
静态初始化程序称为<cinit>
,它不带参数,构造函数名为<init>
。两者都有一个void返回类型。
在大多数情况下,这对Java开发人员是隐藏的(除非他们生成字节代码)但是你唯一一次在堆栈跟踪中看到这些“方法”(尽管你看不到返回类型)
答案 1 :(得分:3)
虽然构造函数与方法类似,但它们不是方法。它们没有返回类型,没有继承,也不能被子类隐藏或覆盖。
构造函数由类实例创建表达式(基本上是new
的使用),通过其他构造函数的显式调用(使用this(...)
或super(...)
语法)调用,并由字符串连接运算符。没有其他方法可以调用构造函数(特别是,它们不能像其他方法一样调用)。
答案 2 :(得分:3)
构造函数是否转换为返回对其自己的类的引用的方法??
否但是,如果指定这样做的话。
编译器是否将返回类型引用到同一个类的构造函数??
否它没有
构造函数发生了什么?
这是在创建对象时运行的方法。通常,通过使用“new”关键字。它可能会执行一些初步任务,或者在施工期间返回一些或分配一些值。
任何参考研究这个。??
答案 3 :(得分:2)
构造函数与方法类似,只是它们使用类的名称并且没有返回类型。使用构造函数的整个目的是创建一个对象(一个类的实例)并在内存(堆)中分配它(通过new
关键字),并初始化任何字段(如果可用)。
答案 4 :(得分:1)
通过特殊的java关键字new
调用构造函数,该关键字创建(并初始化)指定具体类型的对象。
我想你可以说new
和所选构造函数的组合“返回”一个对象,在java中它当然是一个指针下的指针
答案 5 :(得分:0)
构造函数返回被调用的类的类引用。例如.-
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 = new A(4)
)。
答案 6 :(得分:0)
构造函数的返回类型是对应的类类型。
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;
}
}
答案 7 :(得分:-1)
构造函数仅用于初始化类成员和