Особенности поддержки ООП в Java.

28 июля, 2011

В Java используются только динамические объекты, статических объектов нет. Это означает, что, добавляя переменную объектного типа, создаётся указатель, а не сам объект. Объект м.б. создан только на этапе выполнения специальной операцией new. Память под сам указатель выделяется статически компилятором, а память под объект выделяется динамически средой выполнения.

В Java используется автоматическое управление памятью. Это означает, что среда выполнения контролирует память, распределяемую под динамические объекты на основе счётчика ссылок. При создании или копировании объектов счётчики ссылок изменяются автоматически. Как только программа теряет ссылку на объект, система выполняет декремент счётчика. При достижении счётчика значения 0 память, занимаемая объектом, помечается как доступная для освобождения «сборщиком мусора». В этом состоянии память ещё не м.б. использована как свободная и выделена для другого объекта. Фактическое освобождение памяти происходит, когда помеченные области соберутся «сборщиком мусора». «Сборщик мусора» — это специальная служба JVM, которая выполняется в виде отдельного потока в рамках экземпляра виртуальной машины.

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

Классы в Java являются основным средством конструирования новых типов данных. Здесь отсутствуют структуры и объединения. Классы в Java используются и как средства структурирования программ. Здесь отсутствует понятие модуля, как физического контейнера классов. Это означает, что минимальной единицей компиляции является класс, а любая программная система на Java есть система классов. Классы состоят из полей и методов.

Ключевое отличие реализации ООП в Java от C++ — это отсутствие множественного наследования и связанных с ним сложностей, как для программиста, так и для разработчика компилятора.

В Java нет невиртуальных методов — это означает, что все публичные методы классов являются виртуальными, т.е. на этапе выполнения для них осуществляется динамическая диспетчеризация вызовов, которая предусматривает, что вызывается метод того класса, с объектом которого программа работает в данный момент, а не метод того класса, который использовался при объявлении переменной объектного типа. Такое поведение является основой полиморфизма: переменные базового типа могут ссылаться на объекты производных типов.

Класс описывается в одном файле. Один файл может содержать описание нескольких классов. В этом случае лишь один из них м.б. публичным. Имя файла должно в точности соответствовать имени публичного класса.

______________________________

Покупайте беговые лыжи лучше летом. Цены дешевле, выбор есть. Зато зимой вам не надо будет судорожно бегать и переплачивать вдвое за какие-нибудь Атеми. Я вот именно так и сделал, заказал Фишер — доставили оперативно. Жду зимы, хотя сейчас собираюсь купаться!