Объекты и ссылки

177
25 марта 2018, 21:01

Здравствуйте, можете подсказать что происходит со ссылками и объектами в этой программе(задача из Head First Java)?

class Bees {
  Honey [] beeHA;
}
class Raccoon {
  Kit k;
  Honey rh;
}
class Kit {
  Honey kh;
}
class Bear {
  Honey hunny;
}
public class Honey {
  public static void main(String [] args) {
    Honey honeyPot = new Honey();
    Honey [] ha = {honeyPot, honeyPot, honeyPot, honeyPot};
    Bees b1 = new Bees();
    b1.beeHA = ha;
    Bear [] ba = new Bear[5];
    for (int x=0; x < 5; x++) {
      ba[x] = new Bear();
      ba[x].hunny = honeyPot;
    }
    Kit k = new Kit();
    k.kh = honeyPot;
    Raccoon r = new Raccoon();
    r.rh = honeyPot;
    r.k = k;
    k = null;
  }
}

Верны ли следующие утверждения?

  1. Класс Racoon имеет 2 поля - 2 ссылочные переменные, находящиеся в хипе(переменные экземпляра) и равные при объявлении null?
  2. Класс Kit имеет поле Honey kh, это также ссылочная переменная, находящаяся в хипе(переменная экземпляра) и равная при объявлении null.
  3. В строке Kit k = new Kit() мы создаём объект и присваиваем его ссылке, находящейся в стеке, т.к. это объявление в методе и переменная Kit k - локальная.
  4. В строке k.kh = honeyPot мы присваиваем ссылке из хипа kh значение локальной(стековой) ссылки honeyPot.

  5. в строке r.k = k присваиваем значение локальной стековой ссылки k(k.kh) ссылке из хипа(полю класса) r.k.

    Последний пункт стоит особняком, именно здесь у меня возникли недопонимания после прочтения ответа из учебника: "Поскольку гк по-прежнему ссылается на объект Kit, переменная r.k.kh (несмотря на то что она явно не объявлена) связана с объектом!". Но ведь ссылка к из хипа ничего не знает о поле kh! Или знает, т.к. это переменная класса Kit? И как это вообще понимать r.k.kh?

READ ALSO
Configuration и xml

Configuration и xml

Помогите, не могу разобратьсяЯ начал изучать Spring (IoC Concept), разобрал как можно конфигурировать бины через xml и отдельно через аннотации, но не пойму...

203
Запустить Java код в Python

Запустить Java код в Python

Можно ли запустить код, который написан на Java, из программы, которая написана на Python? Как, например, asm в c++А точнее, как из плагина на Питоне...

185
Java Eclipse - как сделать редактирование в консоли

Java Eclipse - как сделать редактирование в консоли

То есть пользователь видит Изменить имя: АлексейИ он может редактировать слово Алексей

192
Не запускается javac

Не запускается javac

Ребят, тут такая лажа, javac отказывается компилироватьЧто делать? Пробовал и javac и javac

154