Looking for java Keywords? Try Ask4Keywords

Java Language Конструктор объектов


пример

Все конструкторы в Java должны сделать вызов конструктору Object . Это делается с помощью вызова super() . Это должна быть первая строка в конструкторе. Причиной этого является то, что объект может быть фактически создан в куче до выполнения любой дополнительной инициализации.

Если вы не укажете вызов super() в конструкторе, компилятор поместит его для вас.

Таким образом, все три из этих примеров функционально идентичны

с явным вызовом конструктора super()

public class MyClass {

    public MyClass() {
        super();
    }
}

с неявным вызовом конструктора super()

public class MyClass {

    public MyClass() {
        // empty
    }
}

с неявным конструктором

public class MyClass {

}

Как насчет Constructor-Chaining?

В качестве первой инструкции конструктора можно вызвать другие конструкторы. Поскольку и явный вызов супер-конструктора, и вызов другому конструктору должны быть как первыми инструкциями, так и взаимоисключающими.

public class MyClass {

    public MyClass(int size) {

        doSomethingWith(size);

    }

    public MyClass(Collection<?> initialValues) {

        this(initialValues.size());
        addInitialValues(initialValues);
    }
}

Вызов нового MyClass(Arrays.asList("a", "b", "c")) вызовет второй конструктор с аргументом List, который, в свою очередь, делегирует первому конструктору (который будет делегировать неявно super() ), а затем вызовите addInitialValues(int size) со вторым размером списка. Это используется для уменьшения дублирования кода, когда несколько конструкторов должны выполнять одну и ту же работу.

Как вызвать конкретный конструктор?

В приведенном выше примере можно либо вызвать new MyClass("argument") либо new MyClass("argument", 0) . Другими словами, подобно перегрузке метода , вы просто вызываете конструктор с параметрами, которые необходимы для вашего выбранного конструктора.

Что произойдет в конструкторе класса Object?

В подклассе, который имеет пустой конструктор по умолчанию (минус вызов super() ), ничего не может произойти.

Пустой конструктор по умолчанию может быть явно определен, но если он не будет компилятором, он будет установлен для вас до тех пор, пока не будут определены другие конструкторы.

Как объект создается из конструктора в Object?

Фактическое создание объектов зависит от JVM. Каждый конструктор Java появляется как специальный метод с именем <init> который отвечает за инициализацию экземпляра. Этот метод <init> предоставляется компилятором, и поскольку <init> не является допустимым идентификатором в Java, он не может использоваться непосредственно на языке.

Как JVM вызывает этот метод <init> ?

JVM будет вызывать метод <init> используя invokespecial инструкцию invokespecial и может быть вызван только в неинициализированных экземплярах класса.

Для получения дополнительной информации см. Спецификацию JVM и спецификацию Java Language: