Попробуйте объяснить ссылки цифрами , так как чистый текст иногда не доходит до большинства людей. Многие ресурсы и книги по этой теме пытаются объяснить с помощью цифр, поскольку трудно соотнести распределение только с помощью устного общения (для большинства людей это в основном вопрос концентрации внимания).
По крайней мере, попытайтесь указать, как объекты связаны друг с другом, простой пример будет простой ссылкой.
Дано:
class A {
B b = new B();
}
class B {
int mine = 1;
}
При создании экземпляра класса A
как объекта a
из некоторого контекста на следующем рисунке показано, как все это будет выглядеть в куче. Цель иллюстрации - показать, как различные объекты связаны друг с другом, и создать ментальную модель работы кучи.
+-A-----+
a: *---->| |
| | +-B--------+
| b: *--+-->| |
| | | mine: 1 |
+-------+ | |
+----------+
Также попытайтесь объяснить разницу между кучей и выделением стека. Вызов метода с параметрами. Простой пример будет примерно таким:
Учитывая следующий метод:
public void doSomething(B b) {
int doMine = b.mine + 1;
}
Когда вы вызываете doSomething
и позволяете ему это делать, в конце стек doSomething
будет выглядеть примерно так, как показано ниже. Точка, показывающая, что объекты не находятся непосредственно в стеке, а просто ссылаются на объект в куче, и объекты передаются через ссылки.
whoever called doSomething *
|
v
+-doSomething-+ +-B--------+
| b: *--------+-->| |
|-------------| | mine: 1 |
| doMine: 2 | +----------+
+-------------+
Другим иллюстративным примером была бы иллюстрация массива, который является объектом, и многомерный массив содержит массив массивов.