Java. Эффективное программирование, 2-е издание. Джошуа блох java эффективное программирование pdf


Блох Джошуа — «Java. Эффективное программирование» PDF

Технология, известная как перечислимый шаблон int, обладает многими недостатками. Она не обеспечивает безопасность типов и не очень удобна. Компилятор не будет жаловаться, если вы передадите яблоко методу, который ожидает апельсин, сравните яблоки с апельсинами оператором == или хуже:

// Вкусный цитрусовый приправлен яблочным соусом!

int i = (APPLE.FUJI – ORANGE_TEMPLE) / APPLE.PIPPIN;

Обратите внимание, что название каждой константы яблока содержит префикс APPLE__ и что название каждой константы апельсина содержит 0RANGE_. Это потому, что Java не предоставляет пространства имен для перечислимых групп int. Префиксы препятствуют совпадению имен, если две перечислимые группы int будут иметь константы с одинаковыми названиями.

Программы, использующие перечислимый шаблон int, довольно «хрупки». Поскольку перечислимые шаблоны int являются константами на время компиляции, они компилируются в клиенты, которые их используют. Если int связанный с перечислимой константой изменяется, то его клиенты должны быть заново скомпилированы. Если этого не сделать, то запускаться они будут, но их поведение будет непредсказуемо.

Нет легкого способа перевести перечислимые константы в печатаемые строки. Если вы напечатаете такую константу или отобразите ее в отладчике, все, что вы увидите, — это число, что не очень поможет. Нет надежного способа выполнить итерацию перечислимых констант в группе или даже получить размер перечислимой группы int.

Вы можете столкнуться с вариантом шаблона, в котором константы String используются вместо констант int. Этот вариант, известный как перечислимый шаблон String, желательно еще меньше использовать.

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

К счастью, в версии 1.5 язык дает нам альтернативу, которая помогает избежать недостатков перечислимых шаблонов int и string и предлагает ряд дополнительных преимуществ. Это перечислимые типы [JLS, 8.9]. Вот как они выглядят в простейшей форме:

public enum Apple { FUJI, PIPPIN, GRANNY_SMITH }

public enum Orange { NAVEL, TEMPLE, BLOOD }

При поверхностном взгляде может показаться, что перечислимые типы похожи на свои аналоги в других языках, таких как С, C++ , и C# , но это сходство обманчиво. Перечислимые типы Java — это полноценные классы, обладающие большими возможностями, чем их аналоги в других языках, где перечислимые типы являются по сути значениями int.

Основная идея перечислимых типов в Java проста: они являются классами, которые экспортируют один экземпляр каждой перечислимой константы, используя открытое статическое завершенное поле. Перечислимые типы являются абсолютно завершенными благодаря тому, что у них нет конструкторов. Клиенты не могут ни создавать экземпляры перечислимых типов, ни расширять их, не создаются никакие другие экземпляры, кроме декларированных перечислимых констант. Другими словами, перечислимые типы подвергаются контролю создания экземпляров. Они являются обобщением синглтона (статья 3), являясь по сути одним перечислимым элементом. Для читателей, знакомых с первой редакцией этой книги, перечислимые типы предоставляют лингвистическую поддержку безопасных перечислимых шаблонов [BlochOl, статья 21].

Перечислимые типы обеспечивают безопасность типов при компиляции. Если вы объявили, что параметр должен относиться к типу Apple, то у вас есть гарантия, что любая ненулевая ссылка на объект, переданная параметру, является одним из трех разрешенных значений Apple. Попытка передать значение неверного типа приведет к ошибке при компиляции, так же как и попытки присвоить выражение одного перечислимого типа переменной другого или использовать оператор == для сравнения значений различных перечислимых типов.

Перечислимые типы с одинаковыми наименованиями констант сосуществуют «мирно» потому, что у каждого типа имеется свое пространство имен. Вы можете добавлять или менять порядок констант в перечислимом типе без необходимости повторно компилировать клиентов, потому что поля, экспортирующие константы, предоставляют защитный слой между перечислимым типом и его клиентами: значения констант не компилируются в клиентов, как в случае с перечислимым шаблоном int. Наконец, вы можете перевести перечислимые типы в печатаемые строки вызовом метода toString.

В дополнение к тому, что перечислимые типы позволяют нам избавиться от недостатков перечислимых шаблонов int, они позволяют нам добавлять произвольные методы и поля, а также реализовывать произвольные интерфейсы. Они предлагают высококачественные реализации всех методов Object (глава 11), а их сериализованная форма сделана так, чтобы перенести большую часть изменений в перечислимых типах.

Так зачем нам добавлять методы или поля к перечислимым типам? Например, вы можете захотеть ассоциировать данные с их константами. Наши типы Apple или Orange, например, могут извлечь выгоду из метода, который вернет цвет фрукта или его изображение. Вы можете присвоить аргументы перечислимому типу с помощью любого подходящего метода. Перечислимый тип может начать жизнь, как простая коллекция перечислимых констант и развивается со временем в полноценную абстракцию.

scanlibs.com

Java "из первых рук" - Bloch J. / Блох Дж.

Перейти: Выберите форум------------------НОВОСТИ, ПРАВИЛА и FAQ   Новости и объявления сайта      Новости сайта      Новости сети      Мировые новости   Правила, Основные инструкции и FAQКИНО, ВИДЕО и ТВ   Зарубежное кино      Новинки кино      Фильмы 2016-2017      Боевики      Триллеры      Приключения      Фантастика, Фэнтези      Детское, Семейное кино      Комедии      Драмы, Мелодрамы      Ужасы      Детективы      Криминал      Военные      Вестерн      Исторические      Документальные      Индийское кино      Дилогии      Трилогии      Квадралогии      Пенталогии      Антологии      Трейлеры и доп.материалы   Отечественное кино      Новинки кино      Боевики      Триллеры      Приключения      Фантастика, Фэнтези      Сказки      Детское, Семейное кино      Комедии      Драмы, Мелодрамы      Ужасы      Детективы      Криминал      Военные      Катастрофы      TB-Шоу      Юмор|Приколы      Документальные      Трейлеры и доп.материалы      Кино СССР   Видео HD      Blu-ray      BD-Remux      720p | 1080p      HD-Video в 3D      Наше кино (HD Video)   Мультфильмы      Зарубежные мультфильмы      Зарубежные мультфильмы (HD Video)      Зарубежные мультфильмы (DVD Video)      Отечественные мультфильмы      Отечественные мультфильмы (HD Video)      Отечественные мультфильмы (DVD Video)      3D Мультфильмы   Сериалы      Новинки      Отечественные сериалы      Зарубежные сериалы   Видео DVD      DVD-5      DVD-9   Телевидение      Discovery      Научно-популярные      Путешествия и туризм      Тайны и загадки      Техника и вооружение      Катастрофы   Анимэ   Фитнес - Разум и ТелоМУЗЫКА и КЛИПЫ   Музыка МР3      Отечественная музыка      Отечественная музыка (сборники)      Club,| Trance,| House,| Drum & Bass         Trance         Drum & Bass         House         Easy listening      Шансон|Авторская песня      Зарубежная музыка      Зарубежная музыка (сборники)      Rap, Hip-hop, R'n'B      Рок, Панк, Метал, Альтернатива      Classic Rock & Hard Rock      Progressive & Art-Rock      AOR (Melodic Hard Rock, Arena rock)      Heavy, Power, Progressive (Metal)      Русский Рок      Джаз, Блюз, Соул      Дискографии (Отечественные)      Дискографии (Зарубежные)      50/50 (сборники)      Советская эстрада      Instrumental/New Age/Meditative/Relax      Классика   Lossless      Отечественная музыка      Отечественная музыка (сборники)      Club,| Trance,| House,| Drum & Bass      Шансон|Авторская песня      Зарубежная музыка      Rap, Hip-hop, R'n'B      Рок, Панк, Метал, Альтернатива      Classic Rock & Hard Rock      Progressive & Art-Rock      Heavy, Power, Progressive (Metal)      Alternative & Nu-metal      Джаз, Блюз, Соул      Blues (Texas, Chicago, Modern and Others)      Jazz Fusion      Русский рок      Дискографии (Отечественные)      Дискографии (Зарубежные)      Классика      Instrumental/New Age/Meditative/Relax   HD Audio и Многоканальная Музыка      DTS CD / SACD-R      DVD-Audio      Vinyl-Rip и Hand-Made      Hi-Res stereo (рок)      Hi-Res stereo (Джаз и Блюз)      Hi-Res stereo (Поп)      Hi-Res stereo (Электронная музыка)      Зарубежный рок (оцифровки)      Зарубежная поп-музыка (оцифровки)      Электронная музыка (оцифровки)      Классика и классика в современной обработке (многоканальная музыка)      Классика (HD Audio)   Клипы      Клипы      Клипы (HD-Video)      Караоке (видео)      Концерты      Концерты (DVD-Video)      Концерты (HD-Video)   Тестовые диски для настройки аудио/видео аппаратурыИГРЫ   PC игры      Горячие Новинки      Гонки      Action      Стратегии      RPG      Аркады      Авиасимуляторы и Автосимуляторы      Детские      Другие симуляторы      Приключения и квесты|я ищу      Логические      Мини-игры      Сборники игр      Старые игры      Моды, Руссификаторы, Таблетки, Дополнения   Консольные игры      XBOX 360      PS|PS2|PS3      PSP      Программы | ПрошивкиПРОГРАММЫ   Windows      Сборки Windows 10      OC Windows 8      OC Windows 7      OC Windows XP      Системные программы      Офисные системы      Аудио- и видео-CD- проигрыватели      Антивирусы, Файерволы      Редакторы видео и аудио      Программы для интернета и сетей      Драйвера      WPI      САПР      Разные пользовательские программы   LinuxЛИТЕРАТУРА   Книги      Собрания сочинений      Многоавторские сборники      Детективы и Боевики      Фантастика, фэнтези      Приключения      Женский роман      Триллеры. Мистика. Ужасы      Сатира, юмор      Исторические книги      Классика, современная проза и поэзия      Детская литература      Русская литература      Зарубежная литература (XX и XXI век)   Аудиокниги      Фантастика, фэнтези      Детектив и Боевики      Приключения      Современная проза и поэзия      Российская фантастика, фэнтези, мистика, ужасы, фанфики      Зарубежная фантастика, фэнтези, мистика, ужасы      Детские литература      Классика      Историческая      Сатира, юмор      Другие   Журналы и Документация      Мужские журналы      Женские журналы      На досуге      Научно-популярные журналы      Автомобильные журналы      Детские журналы      Компьютерная литература      Кулинария      Вязание, вышивка, кройка, шитьё      Домоводство      Техническая литература      Научно-популярная лит-ра      Энциклопедии и словари      Нетрадиционная медицина      Многопредметные коллекции (подборки)   Мультимедийные и интерактивные издания      Интерактивные обучающие и развивающие материалы      Обучающие издания для детей      Кулинария. Цветоводство. Домоводство      Видеокурсы      Фотография, Видео      Игра на гитаре      Строительство, ремонт и дизайн   Литература и прочие Обучающие материалы      Настольные игры и Поделки      Развивающее Видео для детей      Эзотерика, гадания, магия, фен-шуй      Популярная психология      Рисунок, графический дизайн      Мода. Стиль. Этикет      Компьютерные сети и безопасность      Работа с видео      Астрология      Физкультура, фитнес, бодибилдинг      Веб-дизайн и программирование   Ремонт и эксплуатация транспортных средств      Программы по диагностике и ремонту      Книги по ремонту/обслуживанию/эксплуатации ТС      Виртуальная автошкола      Документальные/познавательные фильмы      Top Gear/Топ Гир   Обучение иностранным языкам      Английский язык (для взрослых)      Немецкий язык      Французский язык      Испанский язык      Итальянский язык      Финский язык      Японский язык      Китайский язык      Арабский язык      Русский язык как иностранныйМОБИЛЬНЫЕ УСТРОЙСТВА   Mobile/PDA      Android      ГИС, системы навигации и карты      Программы для PC   Mobile Игры, Фильмы, Музыка и прочее      Android игры      Видео для смартфонов и КПК      Фильмы для iPod, iPhone, iPad      Аудиокниги (AAC, ALAC)      Музыка (АСС)АРХИВ   Мусор 

rutorka.net

Сайт временно недоступен

В данный момент на сервере проводятся регламентные работы.

Они будут завершены в течение нескольких минут.

Приносим извинения за неудобства.

С уважением, администрация сайта.

www.twirpx.com


Смотрите также