Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Проведя та­кой эксперимент, можно убедиться, что в этот раз мы увидим обновлен­ное значение. То есть объектные переменные после приравнивания ос­таются "связанными" друг с другом, изменения одной сказываются на другой.

Таким образом, примитивные переменные являются действитель­ными хранилищами данных. Каждая переменная имеет значение, не за­висящее от остальных. Ссылочные же переменные хранят лишь ссылки на объекты, причем различные переменные могут ссылаться на один и тот же объект, как это было в нашем примере. В этом случае их можно сравнить с наблюдателями, которые с разных позиций смотрят на один и тот же объект и одинаково видят все происходящие с ним изменения. Ес­ли же один наблюдатель сменит объект наблюдения, то он перестает ви­деть и изменения, происходящие с прежним объектом:

Point р1 = new Point(3,5);

Point р2=р1;

р1 = new Point(7,9);

print(p2.x);

В этом примере мы получим 3, то есть после третьей строки пере­менные р1 и р2 ссылаются на различные объекты и поэтому имеют раз­ные значения.

Теперь легко понять смысл литерала null. Такое значение может при­нять переменная любого ссылочного типа. Это означает, что ее ссылка никуда не указывает, объект отсутствует. Соответственно, любая попытка обратиться к объекту через такую переменную (например, вызвать метод или взять значение поля) приведет к ошибке.

Также значение null можно передать в качестве любого объектного аргумента при вызове функций (хотя на практике многие методы счита­ют такое значение некорректным).

Память в Java с точки зрения программиста представляется не нуля­ми и единицами или набором байтов, а как некое виртуальное простран­ство, в котором существуют объекты. И доступ к памяти осуществляется не по физическому адресу или указателю, а лишь через ссылки на объек­ты. Ссылка возвращается при создании объекта и далее может быть сохра­нена в переменной, передана в качестве аргумента и т.д. Как уже говори­лось, допускается наличие нескольких ссылок на один объект. Возможна и противоположная ситуация — когда на какой-то объект не существует ни одной ссылки. Такой объект уже недоступен программе и является "мусо­ром", то есть без толку занимает аппаратные ресурсы. Для их освобожде­ния не требуется никаких усилий. В состав любой виртуальной машины обязательно входит автоматический сборщик мусора garbage collector — фоновый процесс, который как раз и занимается уничтожением ненуж­ных объектов.