Главная » Просмотр файлов » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java (1160779), страница 58

Файл №1160779 К. Арнольд, Д. Гослинг - Язык программирования Java (К. Арнольд, Д. Гослинг - Язык программирования Java) 58 страницаК. Арнольд, Д. Гослинг - Язык программирования Java (1160779) страница 582019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 58)

Если orbitsAround вызывается без параметров, то используется метод, возвращающий текущее значение. ЕслиorbitsAround вызывается с одним аргументом типа Body, то используется метод, задающий значение. Если же вызов не подходит ни под одну изэтих сигнатур, то он является неверным, а программа не будет компилироваться.Вопрос о том, как язык выбирает среди нескольких перегруженных методов тот, что нужен для данного вызова, подробно рассматривается вразделе “Доступ к членам” на стр. .Упражнение 2.12Включите в класс Vehicle два новых метода: один в качестве параметра получает количество градусов, на которое поворачивает машина, адругой — одну из констант Vehicle.TURN_LEFT или Vehicle.TURN_RIGHT.2.9.

Статические членыКласс содержит члены двух видов: поля и методы. Для каждого из них задается атрибут, определяющий возможности наследования и доступа(private, protected, public или package). Кроме того, каждый из членов при желании можно объявить как static.Для статического члена создается всего один экземпляр, общий для всего класса, вместо построения его копий в каждом объекте класса. Вслучае статических переменных (переменных класса), это ровно одна переменная, независимо от того, сколько объектов было создано на основекласса (даже если ни одного).

Образцом может служить поле nextID класса Body в приведенном выше примере.Инициализация статических полей класса происходит до того, как они используются или запускается любой из его методов. В следующемпримере метод unset может быть уверен в том, что перед использованием переменной UNSET ей было присвоено значение Double.NaN:class Value {public static double UNSET = double.NaN;}private double V;public void unset() {V = UNSET;}// ...2.9.1. Блоки статической инициализацииКласс также может содержать блоки статической инициализации, которые присваивают значения статическим полям или выполняют инуюнеобходимую работу. Статический инициализатор оказывается наиболее полезным в тех случаях, когда простой инициализации в объявленииполя недостаточно.

Например, создание статического массива часто должно выполняться одновременно с его инициализацией в операторахпрограммы. Приведем пример инициализации небольшого массива с простыми числами:class Primes {protected static int[] knownPrimes = new int[4];static {}knownPrimes[0] = 2;for(int i = 1; i < knownPrimes.length; i++)knownPrimes[i] = nextPrime();}Статическая инициализация внутри класса выполняется в порядке слева направо и сверху вниз.

Инициализатор, или статический блок, каждой изстатических переменных выполняется перед следующим, начиная от первой строки исходного текста к последней. При этом можногарантировать, что массив knownPrimes будет создан до выполнения статического блока в нашем примере.Что произойдет, если статический инициализатор класса X вызывает метод класса Y, а статический инициализатор Y, в свою очередь, вызываетметод из класса X для задания своих статических величин? Подобные циклические инициализации не могут быть надежно выявлены в процессекомпиляции, поскольку в момент компиляции X класс Y может еще не существовать. Если возникает подобная ситуация, то статическиеинициализаторы X выполняются лишь до вызова метода Y. Когда Y, в свою очередь, обратится к методу X, то последний будет выполняться беззавершения статической инициализации.

Все статические поля X, для которых инициализация не была выполнена, будут иметь значения поумолчанию (false, ‘\u0000’, ноль или null в зависимости от типа).В инициализаторах статических полей не должны вызываться методы, которые, согласно их объявлениям, могут привести к возникновениюпроверяемых исключений. Дело в том, что инициализаторы выполняются при загрузке класса, и программа может быть еще не готова кобработке исключения.Блок статической инициализации может вызывать методы, возбуждающие исключения, но лишь в том случае, если он готов сам перехватить ихвсе.2.9.2.

Статические методыСтатические методы вызываются для целого класса, а не для каждого конкретного объекта, созданного на его основе. Подобные методы такженазываются методами класса. Статический метод может выполнять задачи, общие для всех объектов класса, — например, возвращатьследующий серийный номер (в нашем примере с плеерами) или что-нибудь в этом роде.Статический метод работает лишь со статическими переменными и статическими методами класса. Ссылка this в этом случае не можетиспользоваться, поскольку не определен конкретный объект, для которого вызывается данный метод.За пределами класса статические методы обычно вызываются через имя класса, а не через ссылку на конкретный объект:prime = Primes.nextPrime();knownCnt = Primes.knownPrimes.length;Упражнение 2.13Включите в класс Vehicle статический метод, который возвращает максимальное значение идентификатора, использованное на данный момент.2.10. Сборка мусора и метод finalizeJava выполняет всю сборку программного мусора автоматически и избавляет вас от необходимости явного освобождения объектов.Проще говоря, это означает, что память, занимаемая неиспользуемым объектом, может быть возвращена в систему.

При этом никаких действий свашей стороны не требуется — в сущности, вы ничего и не сможете сделать. Объект является “неиспользуемым”, когда на него отсутствуютссылки в статических данных и в любой из переменных выполняемого в настоящий момент метода, когда не удается найти ссылку на негопосредством отслеживания полей и элементов массивов статических данных и переменных методов, и так далее. Объекты создаютсяоператором new, но соответствующего ему оператора delete не существует. После завершения работы с объектом вы просто перестаетессылаться на него (изменяете его ссылку так, чтобы она указывала на другой объект или null) или возвращаетесь из метода, чтобы его локальныепеременные перестали существовать и не указывали на объект.

Когда ссылок на объект не остается нигде, за исключением другихнеиспользуемых объектов, данный объект может быть уничтожен сборщиком мусора. Мы пользуемся выражением “может быть”, потому чтопамять освобождается лишь в том случае, если ее недостаточно или если сборщик мусора захочет предотвратить ее нехватку.Автоматическая сборка мусора означает, что вам никогда не придется беспокоиться о проблеме “зависших ссылок” (dangling references). В техсистемах, где предусмотрен прямой контроль за удалением, допускается освобождение объектов, на которые ссылаются другие объекты. Втаком случае ссылка становится “зависшей”, то есть она указывает на область памяти, которая в системе считается свободной.

Эта “свободная”память может быть использована для создания нового объекта, и тогда “зависшая ссылка” будет указывать на нечто совершенно отличное оттого, что предполагалось в объекте. В результате содержимое этой памяти может быть использовано совершенно непредсказуемым образом, ивозникает полный хаос.

Java решает проблему “зависших ссылок” за вас, поскольку объект, на который имеется ссылка, никогда не будетуничтожен сборщиком мусора.Сборка мусора происходит без вашего вмешательства, однако она все же требует определенного внимания.

Создание и уничтожениемногочисленных объектов может помешать работе тех приложений, для которых время выполнения оказывается критичным. Программыследует проектировать так, чтобы количество создаваемых в них объектов было разумным.Сборка мусора еще не является гарантией того, что для любого вновь создаваемого объекта всегда найдется память. Вы можете бесконечносоздавать объекты, помещать их в список и делать это до тех пор, пока не кончится память, и при этом не будет ни единого неиспользуемогообъекта, который можно было бы уничтожить. Например, подобная “утечка памяти” может быть обусловлена тем, что вы продолжаетеподдерживать ссылки на ненужные объекты.

Сборка мусора решает многие, но не все проблемы с выделением памяти.2.10.1. Метод finalizeОбычно вы и не замечаете, как происходит уничтожение “осиротевших” объектов. Тем не менее класс может реализовать метод с именем finalize,который выполняется перед уничтожением объекта или при завершении работы виртуальной машины. Метод finalize дает возможностьиспользовать удаление объекта для освобождения других, не связанных с Java ресурсов.

Он объявляется следующим образом:protected void finalize() throws Throwable {super.finalize();// ...}Роль метода finalize становится особенно существенной при работе с внешними по отношению к Java ресурсами, которые слишком важны, чтобыможно было дожидаться этапа сборки мусора. Например, открытые файлы (число которых обычно ограничено) не могут дожидатьсязавершающей фазы finalize — нет никакой гарантии, что объект, содержащий открытый файл, будет уничтожен сборщиком мусора до того, какизрасходуются все ресурсы по открытию файлов.Поэтому в объекты, распоряжающиеся внешними ресурсами, следует включать метод finalize, освобождающий ресурсы и предотвращающий ихутечку. Кроме того, вам придется предоставить программистам возможность явного освобождения этих ресурсов.

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

Характеристики

Тип файла
PDF-файл
Размер
1,1 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее