Что такое возвращаемый тип конструктора в 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;
    }
}

конструктор используется только для инициализации члена класса и

  • имя конструктора и имя класса одинаковы
  • конструктор не может иметь тип возврата
  • конструктор всегда вызывается при создании объекта
  • конструктор всегда общественные