Что такое возвращаемый тип конструктора в Java?
как мы знаем, нам не нужно добавлять какой-либо возвращаемый тип в конструктор 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;
}
}
добавляет ли компилятор возвращаемый тип ссылку на тот же класс в конструктор? Что происходит с конструктором? Есть ссылки на изучение этого?
EDIT:
на самом деле я хочу, чтобы ответы были на уровне байтового кода или уровня JVM или даже ниже.
8 ответов
многие ответили, как конструкторы, определенные в Java.
на уровне JVM статические инициализаторы и конструкторы являются методами, которые возвращают void. Статические инициализаторы-это статические методы, однако конструкторы используют this
и не нужно ничего возвращать. Это связано с тем, что вызывающий объект отвечает за создание объекта (а не конструктора)
Если вы пытаетесь создать объект только в байтовом коде без вызова конструктора, вы получаете VerifyError. Однако на oracle JVM вы можете использовать Unsafe.allocateInstance () для создания объекта без вызова конструктора,
статический инициализатор называется <cinit>
, который не принимает аргументов и конструктор называется <init>
. Оба имеют тип void.
по большей части это скрыто от разработчика Java (если они не генерируют байтовый код), однако единственный раз, когда вы видите эти "методы" в трассировках стека (хотя вы не можете видеть тип возврата)
хотя конструкторы похожи на методы, они не являются методами. Они не имеют возвращаемого типа, не наследуются и не могут быть скрыты или переопределены подклассами.
конструкторы вызываются выражениями создания экземпляра класса (в основном, использование new
), явным вызовом из других конструкторов (используя this(...)
или super(...)
синтаксис) и оператором конкатенации строк. Нет другого способа вызвать конструктор (в частности, их нельзя вызвать как и другие методы).
посмотреть раздел 8.8 спецификации языка Java для получения дополнительной информации.
конструктор преобразуется в метод, который возвращает ссылку на собственный класс??
нет Но да, если это указано для этого.
добавляет ли компилятор возвращаемый тип ссылку на тот же класс в конструктор ??
нет это не
что происходит с конструктором??
Это метод, который выполняется при создании объекта. Как правило, с помощью ключевого слова "new". Он может выполнить некоторую предварительную задачу, или вернуть что-то, или присвоить некоторые значения во время строительства.
любая ссылка для изучения этого.??
конструкторы аналогичны способам, за исключением того, что они используют имя класса, и не имеют возвращаемого типа. Вся цель использования конструкторов-создать объект (экземпляр класса) и выделить его (через new
ключевое слово) в памяти (куча), а также инициализировать любые поля, если они доступны.
конструкторы вызываются с помощью специального ключевого слова java new
, что создает (и инициализирует) объект указанного конкретного типа.
Я полагаю, вы могли бы сказать, комбинация new
и выбранный конструктор "возвращает" объект, который в 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 = new A(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;
}
}
конструктор используется только для инициализации члена класса и
- имя конструктора и имя класса одинаковы
- конструктор не может иметь тип возврата
- конструктор всегда вызывается при создании объекта
- конструктор всегда общественные