Найти в Дзене
yagdmitrij

И снова ob... объектах

Объекты в java занимают очень важную нишу. Вникнув в работу объектов, изучив все их тонкости – это огромный шаг в изучении языка программирования. В рамках одной статьи полностью охватить данный материал проблематично, поэтому решил посвятить object-ам еще одну статейку.

Что у нас будет в статье.

1. Объекты и примитивные типы

2. static для объектов

3. Как ведут себя объекты

4. Объекты и Злостный Мусорщик

Еще раз повторюсь, в java все построено на объектах или почти все...Вот к этому «почти» и относятся примитивные типы, которые представлены не как объекты, такие как int, boolean, char, double и др. Все это сделано для того, чтобы повысить производительность вычислений для таких простых операций, ведь для представления объектов требуется значительные системные ресурсы. Однако и для примитивных типов есть возможность создания объектов. Ну, например, для int есть Int, для doubleDouble. Хм, сейчас подумал о String, а ведь для него нет примитивного типа. Возможно это связано с тем, что строка (String) занимает все-таки приличные объемы. Можно переводить примитивные типы в объекты и наоборот, для этого существует такое понятие как автоупаковка и автораспаковка (оставляйте комменты, если хотите, чтобы в следующих статьях мы рассмотрели автоупаковка и автораспаковка).

При изучении объектов в java, я всегда пытался противопоставить им что-то из реальной жизни, чтобы в полной мере осмыслить их работу. В одной литературе мне очень понравилось сравнение объекта с телевизором, а его ссылки – с пультом от телевизора. Как мы знаем, что примитивными типами мы оперируем непосредственно ими самими, а с объектами – их ссылками. Так вот, справедливо что, если мы перейдем в другую часть комнаты, мы возьмем с собою только пульт, а не сам телевизор, чтобы управлять его работой: переключение программ, увеличение громкости и яркости. Мне кажется, что сравнение очень удачное, чем объекты -«строители».

-2

static для объектов. Нам очень часто в программах попадается загадочное слово static, которое имеет разное назначение для полей класса, самого класса и методов. Вначале разберем для полей класса. Объявление переменной как int a говорит о том, что у каждого созданного объекта будет своя переменная «а». Тогда как объявление переменной static int a будет говорить нам о том, что переменная принадлежит классу, и вновь созданные объекты от этого класса будут использовать только эту переменную в ЕДИНСТВЕННОМ экземпляре. Рассмотрим это в программе:

static объекты
static объекты

Когда static встречается в названии метода, это будет означать, что данный метод может вызываться без построения объекта. Справедливо для метода main, который вызывается первым в программе и до построения всех объектов. Здесь следует отметить то, что вызывать статический метод и переменную можно как через объект, так и через класс (класс.название_метода, класс.название_переменной). Но все же делать лучше это по второму способу. Смотрим:

static методы
static методы

А если ключевое слово «static» встречается перед классом, например, public static ClasStatic. Это говорит нам о том, что построить объект данного класса - невозможно.

Теперь, на мой взгляд, самое интересное: как себя ведут объекты. Давайте сравним два примитивных типа и два объекта. Если с первыми все понятно – они равны, то сравнение двух объектов с одинаковым значением выдаст нам « false». Как так? Дело в том, что мы сравниваем разные ссылки, хотя они ведут к двум объектам одного типа. И только поэтому, несмотря на значения, в частности с Integer, эти объекты не равны между собою. Но стоит нам присвоить ссылку m1 ссылке m, и результат опять нас удивит. Смотрим:

сравнение объектов
сравнение объектов

Следующий момент - это присваивание примитивных типов и ссылок на объекты. С примитивными типами также все понятно, значение из одной переменной копируется в другую:

int a= 8;

int b=7;

a=b; //здесь само число «7» копируется в переменную «a» и будет a=7

Если мы дальше изменим переменную «a»:

a=2;

то переменная «b» не измениться, она останется:

b=7;

Все логично и понятно. Но как только мы начнем манипулировать объектными ссылками, ситуация меняется в корне. Не забываем, что мы присваиваем не сами объекты, а их ссылки (это важно!) Лучше все это смотреть в коде:

-6

Объекты и Злостный Мусорщик. Для нас уже не секрет, что объекты требуют значительных ресурсов и то, что объекты создаются динамически, т. е. во время выполнения программы. А это значит, что за их созданием и уничтожением нужно постоянно следить. Вернемся к последней иллюстрации, где мы присваивали ссылки, что в итоге привело к ее потере на некоторый объект, вследствие чего такой объект стал не «при делах». Теперь представьте сколько таких объектов «не при делах» могут находиться в программе, а это дополнительная память. В некоторых языках программирования за созданием и уничтожением объектов нужно постоянно следить. В java это решается комфортно для программиста, которому не нужно думать о жизнедеятельности объектов. Все объекты, утратившие ссылки будут ликвидированы сборщиком мусора или, как я его называю, Злостным Мусорщиком. Так что нам заморачиваться по этому поводу в java не стоит, и даже в том, как работает сборщик мусора. Но теперь мы точно понимаем, что означает фраза «//Ss2 потеряна и объект ждет Злостного Мусорщика».

Злостный Мусорщик
Злостный Мусорщик

Ставьте лайки, подписывайтесь на канал и вас ждет масса увлекательных статей по java.

по теме:

Объекты, субъекты и конструкторы

Моя телега, где буду выкладывать полезные штучки по java, а также анонс моих статей.