Что именно происходит при создании объекта? (Java) - PullRequest
0 голосов
/ 15 января 2020

Я учился у Head First Java и сейчас я нахожусь в главе конструкторов. Они объяснили, что объект создается путем вызова конструктора после ключевого слова new.

Мой вопрос: что именно происходит при создании нового объекта?

Давайте в качестве примера кода возьмем следующее:

public class Const {

    // instance variables
    int number;
    String name;


    // Constructors
    public Const() {
        //implicit super
        System.out.println("no-arg constructor");
    }
    public Const(int i, String s) {
        //implicit super()
        number = i;
        name = s;
        System.out.println("two-arg constructor");
    }


    // test method
    public void doSomething() {
        System.out.println("I'm a test");
    }


    // Main
    public static void main(String[] args) {

        Const c1 = new Const();
        Const c2 = new Const(5, "Jerry");
    }
}

Теперь вот что, я считаю, происходит под капотом при создании c1:

  1. public Const() называется
  2. super() называется
  3. часть Const Object построена.
  4. public Const() вернулась на вершину стека .
  5. Теперь вот моя беда. Когда и как именно создаются переменные экземпляра и методы для объекта (какой неявный код добавляется)?

1 Ответ

1 голос
/ 15 января 2020

Что именно происходит при создании объекта? (Java)

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

Таким образом, единственное отличие здесь:

Const c1 = new Const();

Здесь число будет инициализировано значением int по умолчанию, равным 0 , а имя будет инициализировано null , которое является значением по умолчанию для String

Const c2 = new Const(5, "Jerry");

Вместо этого здесь будет 5 и соответственно Джерри

При использовании new Const () конструктор будет будет вызван, и класс будет загружен в основную память.

public Const() {
        //implicit super 
        super()
    }

Ключевое слово super в java - это ссылочная переменная, которая используется для ссылки на объекты родительского класса, который по умолчанию является классом Object. Ключевое слово «super» вошло в картину с понятием Наследования.

Так что теперь у него есть доступ ко всем членам класса Object, т.е. toString, равняется:

, поскольку вы можете получить доступ

c1.toString() or c1.equals(obj)

Когда и как именно создаются переменные экземпляра и методы для объекта (какой неявный код добавляется)?

Думаю, теперь вы поняли, как создаются переменные экземпляра и значения по умолчанию присваиваются им в зависимости от типа.

Если все еще неясно, попробуйте понять внутреннюю арку, которая может помочь:

JVM Arch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...