Java - Эффективное программирование 🔍
Джошуа Блох; [перевод с английского и редакция И. В. Красикова]
ООО "Диалектика", Лучшие методики программирования, 3-е изд., Москва, Санкт-Петербург, Russia, 2019
俄语 [ru] · PDF · 7.8MB · 2019 · 📘 非小说类图书 · 🚀/lgli/lgrs/nexusstc/zlib · Save
描述
Говоря о третьем издании книги Эффективное программирование на Java, третье издание, достаточно упомянуть его автора — Джошуа Блоха — и это будет наилучшей ее рекомендацией.
Книга представляет собой овеществленный опыт ее автора как программиста на Java. Новые возможности этого языка программирования, появившиеся в версиях, вышедших со времен предыдущего издания книги, по сути знаменуют появление совершенно новых концепций, так что для их эффективного использования недостаточно просто узнать об их существовании, и программировать на современном Java с использованием старых парадигм.
К программированию в полной мере относится фраза Евклида о том, что в геометрии нет царских путей. Но пройти путь изучения и освоения языка программирования вам может помочь проводник, показывающий наиболее интересные места и предупреждающий о ямах и ухабах. Таким проводником может послужить книга Джошуа Блоха. С ней вы не заблудитесь и не забредете в дебри, из которых будете долго и трудно выбираться с помощью отладчика.
При этом книга не просто научит вас использовать новые возможности языка — она научит использовать их эффективно. Но и это не все — книга не просто учит эффективному применению Java, но еще и рассказывает, почему ту или иную задачу следует решать именно так.
Эта книга заставляет вас не просто заучить правила — она заставляет думать.
И хотя эта книга в первую очередь предназначена для энтузиастов и профессионалов, она достойна места на полке любого программиста — как профессионала, так и зеленого новичка.
Язык программирования Java существенно изменился со времени предыдущего издания книги, опубликованного вскоре после выпуска Java 6. Этот классический труд тщательно обновлен, чтобы читатели могли в полной мере воспользоваться возможностями последних версий языка и его библиотек функций. В современном Java поддерживается несколько парадигм программирования. Поэтому программисты часто испытывают потребность в конкретных рекомендациях, которые и описаны в данной книге.
Как и в предыдущих изданиях, каждая глава книги состоит из ряда разделов, в каждом из которых описаны конкретные советы, приведены тонкости платформы Java и содержатся обновленные примеры кода. Для каждой темы приводится всеобъемлющее описание и пояснения, как следует поступить в данном случае, как не следует, и почему.
Третье издание охватывает особенности языка программирования и библиотек, появившихся в Java 7, 8 и 9, в том числе конструкции функционального программирования, добавленные к своим объектно-ориентированным корням. В книгу включены также многие новые советы, а также глава, посвященная лямбда-выражениям и потокам.
Основные темы книги:
• Функциональные интерфейсы, лямбда-выражения, ссылки на методы и потоки
• Методы по умолчанию и статические методы в интерфейсах
• Вывод типа, включая оператор ромб () для обобщенных типов
• Аннотация @SafeVarargs
• Конструкция try-с-ресурсами
• Новые возможности библиотек, такие как интерфейс Optional, java.time и удобные фабричные методы для коллекций
Книга представляет собой овеществленный опыт ее автора как программиста на Java. Новые возможности этого языка программирования, появившиеся в версиях, вышедших со времен предыдущего издания книги, по сути знаменуют появление совершенно новых концепций, так что для их эффективного использования недостаточно просто узнать об их существовании, и программировать на современном Java с использованием старых парадигм.
К программированию в полной мере относится фраза Евклида о том, что в геометрии нет царских путей. Но пройти путь изучения и освоения языка программирования вам может помочь проводник, показывающий наиболее интересные места и предупреждающий о ямах и ухабах. Таким проводником может послужить книга Джошуа Блоха. С ней вы не заблудитесь и не забредете в дебри, из которых будете долго и трудно выбираться с помощью отладчика.
При этом книга не просто научит вас использовать новые возможности языка — она научит использовать их эффективно. Но и это не все — книга не просто учит эффективному применению Java, но еще и рассказывает, почему ту или иную задачу следует решать именно так.
Эта книга заставляет вас не просто заучить правила — она заставляет думать.
И хотя эта книга в первую очередь предназначена для энтузиастов и профессионалов, она достойна места на полке любого программиста — как профессионала, так и зеленого новичка.
Язык программирования Java существенно изменился со времени предыдущего издания книги, опубликованного вскоре после выпуска Java 6. Этот классический труд тщательно обновлен, чтобы читатели могли в полной мере воспользоваться возможностями последних версий языка и его библиотек функций. В современном Java поддерживается несколько парадигм программирования. Поэтому программисты часто испытывают потребность в конкретных рекомендациях, которые и описаны в данной книге.
Как и в предыдущих изданиях, каждая глава книги состоит из ряда разделов, в каждом из которых описаны конкретные советы, приведены тонкости платформы Java и содержатся обновленные примеры кода. Для каждой темы приводится всеобъемлющее описание и пояснения, как следует поступить в данном случае, как не следует, и почему.
Третье издание охватывает особенности языка программирования и библиотек, появившихся в Java 7, 8 и 9, в том числе конструкции функционального программирования, добавленные к своим объектно-ориентированным корням. В книгу включены также многие новые советы, а также глава, посвященная лямбда-выражениям и потокам.
Основные темы книги:
• Функциональные интерфейсы, лямбда-выражения, ссылки на методы и потоки
• Методы по умолчанию и статические методы в интерфейсах
• Вывод типа, включая оператор ромб () для обобщенных типов
• Аннотация @SafeVarargs
• Конструкция try-с-ресурсами
• Новые возможности библиотек, такие как интерфейс Optional, java.time и удобные фабричные методы для коллекций
备用文件名
lgli/Java.Эффективное программирование.3-е изд.Блох.2019.pdf
备用文件名
lgrsnf/Java.Эффективное программирование.3-е изд.Блох.2019.pdf
备用文件名
zlib/Computers/Programming/Джошуа Блох/Java - Эффективное программирование_5873029.pdf
备选标题
Java. Effektivnoe programmirovanie
备选作者
Блох, Джошуа
备选作者
Author
备用出版商
Диалектика; Диалектика
备用出版商
б. и.; Диалектика
备用出版商
Dialektika
备用出版商
Vilyams
备用版本
3-е изд., Москва, Санкт-Петербург, Russia, 2022
备用版本
Russia, Russian Federation
备用版本
2018
元数据中的注释
lg2764366
元数据中的注释
{"edition":"3-е изд.","isbns":["5604139440","9785604139448"],"last_page":464,"publisher":"ООО \"Диалектика\""}
元数据中的注释
Предм. указ.: с. 453-457
Фактическая дата выхода в свет - 2018
Библиогр.: с. 449-452
Пер.: Bloch, Joshua (1961- ) Effective Java Boston etc. : Addison-Wesley, cop. 2018
Фактическая дата выхода в свет - 2018
Библиогр.: с. 449-452
Пер.: Bloch, Joshua (1961- ) Effective Java Boston etc. : Addison-Wesley, cop. 2018
元数据中的注释
РГБ
元数据中的注释
Russian State Library [rgb] MARC:
=001 009842898
=005 20200828121053.0
=008 181224s2019\\\\ru\||||\\\\\\\0||\|\rus|d
=017 \\ $a КН-П-20-047908 $b RuMoRKP
=017 \\ $a КН-П-18-097759 $b RuMoRKP
=020 \\ $a 978-5-6041394-4-8 $c 500 экз.
=040 \\ $a RuMoRGB $b rus $e rcr
=041 1\ $a rus $h eng
=044 \\ $a ru
=084 \\ $a З973.2-018.19Java,0 $2 rubbk
=100 1\ $a Блох, Джошуа $d 1961-
=245 00 $a Java. Эффективное программирование $h [Текст] $c Джошуа Блох ; [перевод с английского и редакция И. В. Красикова]
=250 \\ $a 3-е изд.
=260 \\ $a Москва $b [б. и.] ; $a Санкт-Петербург $b Диалектика $c 2019
=300 \\ $a 457 с. $c 24 см
=336 \\ $a текст (text) $b txt $2 rdacontent
=337 \\ $a неопосредованный (unmediated) $b n $2 rdamedia
=338 \\ $a том (volume) $b nc $2 rdacarrier
=490 0\ $a Лучшие методики программирования
=500 \\ $a Предм. указ.: с. 453-457
=500 \\ $a Фактическая дата выхода в свет - 2018
=504 \\ $a Библиогр.: с. 449-452
=534 \\ $p Пер.: $a Bloch, Joshua (1961- ) $t Effective Java $c Boston etc. : Addison-Wesley, cop. 2018
=650 \7 $a Вычислительная техника -- Вычислительные машины электронные цифровые -- Программирование -- Языки программирования -- Java $2 rubbk
=852 \\ $a РГБ $b FB $j 2 18-76/166 $x 90
=852 7\ $a РГБ $b CZ2 $h З973.2-018/Б70 $x 83
=852 \\ $a РГБ $b FB $j 2 20-39/28 $x 90
=852 \\ $a РГБ $b ORF $x 82
=852 \\ $a РГБ $b ORF $x 82
=001 009842898
=005 20200828121053.0
=008 181224s2019\\\\ru\||||\\\\\\\0||\|\rus|d
=017 \\ $a КН-П-20-047908 $b RuMoRKP
=017 \\ $a КН-П-18-097759 $b RuMoRKP
=020 \\ $a 978-5-6041394-4-8 $c 500 экз.
=040 \\ $a RuMoRGB $b rus $e rcr
=041 1\ $a rus $h eng
=044 \\ $a ru
=084 \\ $a З973.2-018.19Java,0 $2 rubbk
=100 1\ $a Блох, Джошуа $d 1961-
=245 00 $a Java. Эффективное программирование $h [Текст] $c Джошуа Блох ; [перевод с английского и редакция И. В. Красикова]
=250 \\ $a 3-е изд.
=260 \\ $a Москва $b [б. и.] ; $a Санкт-Петербург $b Диалектика $c 2019
=300 \\ $a 457 с. $c 24 см
=336 \\ $a текст (text) $b txt $2 rdacontent
=337 \\ $a неопосредованный (unmediated) $b n $2 rdamedia
=338 \\ $a том (volume) $b nc $2 rdacarrier
=490 0\ $a Лучшие методики программирования
=500 \\ $a Предм. указ.: с. 453-457
=500 \\ $a Фактическая дата выхода в свет - 2018
=504 \\ $a Библиогр.: с. 449-452
=534 \\ $p Пер.: $a Bloch, Joshua (1961- ) $t Effective Java $c Boston etc. : Addison-Wesley, cop. 2018
=650 \7 $a Вычислительная техника -- Вычислительные машины электронные цифровые -- Программирование -- Языки программирования -- Java $2 rubbk
=852 \\ $a РГБ $b FB $j 2 18-76/166 $x 90
=852 7\ $a РГБ $b CZ2 $h З973.2-018/Б70 $x 83
=852 \\ $a РГБ $b FB $j 2 20-39/28 $x 90
=852 \\ $a РГБ $b ORF $x 82
=852 \\ $a РГБ $b ORF $x 82
元数据中的注释
Предм. указ.: с. 453-457
Библиогр.: с. 449-452
Пер.: Bloch, Joshua (1961- ) Effective Java 3th ed. Boston [etc.] : Addison-Wesley, cop. 2018 978-0-13-468599-1
Библиогр.: с. 449-452
Пер.: Bloch, Joshua (1961- ) Effective Java 3th ed. Boston [etc.] : Addison-Wesley, cop. 2018 978-0-13-468599-1
元数据中的注释
Russian State Library [rgb] MARC:
=001 011124931
=005 20220609100811.0
=008 181224s2022\\\\ru\||||\\\\\\\0||\|\rus|d
=017 \\ $a КН-П-22-041862 $b RuMoRKP
=017 \\ $a КН-П-18-097759 $b RuMoRKP
=020 \\ $a 978-5-6041394-4-8 $c 500 экз.
=040 \\ $a RuMoRGB $b rus $e rcr
=041 1\ $a rus $h eng
=044 \\ $a ru
=084 \\ $a З973.2-018.19Java,0 $2 rubbk
=100 1\ $a Блох, Джошуа $d 1961-
=245 00 $a Java. Эффективное программирование $c Джошуа Блох ; [перевод с английского и редакция И. В. Красикова]
=250 \\ $a 3-е изд.
=260 \\ $a Москва $b Диалектика ; $c 2022 $a Санкт-Петербург $b Диалектика
=300 \\ $a 457 с. $c 24 см
=336 \\ $a текст (text) $b txt $2 rdacontent
=337 \\ $a неопосредованный (unmediated) $b n $2 rdamedia
=338 \\ $a том (volume) $b nc $2 rdacarrier
=500 \\ $a Предм. указ.: с. 453-457
=504 \\ $a Библиогр.: с. 449-452
=534 \\ $p Пер.: $a Bloch, Joshua (1961- ) $t Effective Java $b 3th ed. $c Boston [etc.] : Addison-Wesley, cop. 2018 $z 978-0-13-468599-1
=650 \7 $a Вычислительная техника -- Вычислительные машины электронные цифровые -- Программирование -- Языки программирования -- Java $2 rubbk
=852 \\ $a РГБ $b FB $j 2 22-35/207 $x 90
=001 011124931
=005 20220609100811.0
=008 181224s2022\\\\ru\||||\\\\\\\0||\|\rus|d
=017 \\ $a КН-П-22-041862 $b RuMoRKP
=017 \\ $a КН-П-18-097759 $b RuMoRKP
=020 \\ $a 978-5-6041394-4-8 $c 500 экз.
=040 \\ $a RuMoRGB $b rus $e rcr
=041 1\ $a rus $h eng
=044 \\ $a ru
=084 \\ $a З973.2-018.19Java,0 $2 rubbk
=100 1\ $a Блох, Джошуа $d 1961-
=245 00 $a Java. Эффективное программирование $c Джошуа Блох ; [перевод с английского и редакция И. В. Красикова]
=250 \\ $a 3-е изд.
=260 \\ $a Москва $b Диалектика ; $c 2022 $a Санкт-Петербург $b Диалектика
=300 \\ $a 457 с. $c 24 см
=336 \\ $a текст (text) $b txt $2 rdacontent
=337 \\ $a неопосредованный (unmediated) $b n $2 rdamedia
=338 \\ $a том (volume) $b nc $2 rdacarrier
=500 \\ $a Предм. указ.: с. 453-457
=504 \\ $a Библиогр.: с. 449-452
=534 \\ $p Пер.: $a Bloch, Joshua (1961- ) $t Effective Java $b 3th ed. $c Boston [etc.] : Addison-Wesley, cop. 2018 $z 978-0-13-468599-1
=650 \7 $a Вычислительная техника -- Вычислительные машины электронные цифровые -- Программирование -- Языки программирования -- Java $2 rubbk
=852 \\ $a РГБ $b FB $j 2 22-35/207 $x 90
备用描述
Содержание
Вступительное слово
Предисловие
Предисловие к третьему изданию
Предисловие ко второму изданию
Предисловие к первому изданию
Благодарности
Благодарности к третьему изданию
Благодарности ко второму изданию
Благодарности к первому изданию
Ждем ваших отзывов!
Глава 1. Введение
Глава 2. Создание и уничтожение объектов
2.1. Рассмотрите применение статических фабричных методов вместо конструкторов
2.2. При большом количестве параметров конструктора подумайте о проектном шаблоне Строитель
2.3. Получайте синглтон с помощью закрытого конструктора или типа перечисления
2.4. Обеспечивайте неинстанцируемость с помощью закрытого конструктора
2.5. Предпочитайте внедрение зависимостей жестко прошитым ресурсам
2.6. Избегайте создания излишних объектов
2.7. Избегайте устаревших ссылок на объекты
2.8. Избегайте финализаторов и очистителей
2.9. Предпочитайте try-с-ресурсами использованию try-finally
Глава 3. Методы, общие для всех объектов
3.1. Перекрывая equals, соблюдайте общий контракт
3.2. Всегда при перекрытии equals перекрывайте hashCode
3.3. Всегда перекрывайте toString
3.4. Перекрывайте метод clone осторожно
3.5. Подумайте о реализации Comparable
Глава 4. Классы и интерфейсы
4.1. Минимизируйте доступность классов и членов
4.2. Используйте в открытых классах методы доступа, а не открытые поля
4.3. Минимизируйте изменяемость
4.4. Предпочитайте композицию наследованию
4.5. Проектируйте и документируйте наследование либо запрещайте его
4.6. Предпочитайте интерфейсы абстрактным классам
4.7. Проектируйте интерфейсы для потомков
4.8. Используйте интерфейсы только для определения типов
4.9. Предпочитайте иерархии классов дескрипторам классов
4.10. Предпочитайте статические классы-члены нестатическим
4.11. Ограничивайтесь одним классом верхнего уровня на исходный файл
Глава 5. Обобщенное программирование
5.1. Не используйте несформированные типы
5.2. Устраняйте предупреждения о непроверяемом коде
5.3. Предпочитайте списки массивам
5.4. Предпочитайте обобщенные типы
5.5. Предпочитайте обобщенные методы
5.6. Используйте ограниченные символы подстановки для повышения гибкости API
5.7. Аккуратно сочетайте обобщенные типы и переменное количество аргументов
5.8. Применяйте безопасные с точки зрения типов гетерогенные контейнеры
Глава 6. Перечисления и аннотации
6.1. Используйте перечисления вместо констант int
6.2. Используйте поля экземпляров вместо порядковых значений
6.3. Используйте EnumSet вместо битовых полей
6.4. Используйте ЕпшпМар вместо индексирования порядковыми номерами
6.5. Имитируйте расширяемые перечисления с помощью интерфейсов
6.6. Предпочитайте аннотации схемам именования
6.7. Последовательно используйте аннотацию Override
6.8. Используйте интерфейсы-маркеры для определения типов
Глава 7. Лямбда-выражения и потоки
7.1. Предпочитайте лямбда-выражения анонимным классам
7.2. Предпочитайте ссылки на методы лямбда-выражениям
7.3. Предпочитайте использовать стандартные функциональные интерфейсы
7.4. Разумно используйте потоки
7.5. Предпочитайте в потоках функции без побочных эффектов
7.6. Предпочитайте коллекции потокам в качестве возвращаемых типов
7.7. Будьте внимательны при параллелизации потоков
Глава 8. Методы
8.1. Проверяйте корректность параметров
8.2. При необходимости создавайте защитные копии
8.3. Тщательно проектируйте сигнатуры методов
8.4. Перегружайте методы разумно
8.5. Используйте методы с переменным количеством аргументов с осторожностью
8.6. Возвращайте пустые массивы и коллекции, а не null
8.7. Возвращайте Optional с осторожностью
8.8. Пишите документирующие комментарии для всех открытых элементов API
Глава 9. Общие вопросы программирования
9.1. Минимизируйте область видимости локальных переменных
9.2. Предпочитайте циклы for для коллекции традиционным циклам for
9.3. Изучите и используйте возможности библиотек
9.4. Если вам нужны точные ответы, избегайте float и double
9.5. Предпочитайте примитивные типы упакованным примитивным типам
9.6. Избегайте применения строк там, где уместнее другой тип
9.7. Помните о проблемах производительности при конкатенации строк
9.8. Для ссылки на объекты используйте их интерфейсы
9.9. Предпочитайте интерфейсы рефлексии
9.10. Пользуйтесь машинно-зависимыми методами осторожно
9.11. Оптимизируйте осторожно
9.12. Придерживайтесь общепринятых соглашений по именованию
Глава 10. Исключения
10.1. Используйте исключения только в исключительных ситуациях
10.2. Используйте для восстановления проверяемые исключения, а для программных ошибок — исключения времени выполнения
10.3. Избегайте ненужных проверяемых исключений
10.4. Предпочитайте использовать стандартные исключения
10.5. Генерируйте исключения, соответствующие абстракции
10.6. Документируйте все исключения, которые может генерировать метод
10.7. Включайте в сообщения информацию о сбое
10.8. Добивайтесь атомарности сбоев
10.9. Не игнорируйте исключения
Глава 11. Параллельные вычисления
11.1. Синхронизируйте доступ к совместно используемым изменяемым данным
11.2. Избегайте излишней синхронизации
11.3. Предпочитайте исполнителей, задания и потоки данных потокам исполнения
11.4. Предпочитайте утилиты параллельности методам wait и notify
11.5. Документируйте безопасность с точки зрения потоков
11.6. Аккуратно применяйте отложенную инициализацию
11.7. Избегайте зависимости от планировщика потоков
Глава 12. Сериализация
12.1. Предпочитайте альтернативы сериализации Java
12.2. Реализуйте интерфейс Serializable крайне осторожно
12.3. Подумайте о применении пользовательской сериализованной формы
12.4. Создавайте защищенные методы readObject
12.5. Для управления экземпляром предпочитайте типы перечислений методу readResolve
12.6. Подумайте о применении прокси-агента сериализации вместо сериализованных экземпляров
Приложение. Соответствие статей второго издания разделам третьего издания
Список литературы
Предметный указатель
Вступительное слово
Предисловие
Предисловие к третьему изданию
Предисловие ко второму изданию
Предисловие к первому изданию
Благодарности
Благодарности к третьему изданию
Благодарности ко второму изданию
Благодарности к первому изданию
Ждем ваших отзывов!
Глава 1. Введение
Глава 2. Создание и уничтожение объектов
2.1. Рассмотрите применение статических фабричных методов вместо конструкторов
2.2. При большом количестве параметров конструктора подумайте о проектном шаблоне Строитель
2.3. Получайте синглтон с помощью закрытого конструктора или типа перечисления
2.4. Обеспечивайте неинстанцируемость с помощью закрытого конструктора
2.5. Предпочитайте внедрение зависимостей жестко прошитым ресурсам
2.6. Избегайте создания излишних объектов
2.7. Избегайте устаревших ссылок на объекты
2.8. Избегайте финализаторов и очистителей
2.9. Предпочитайте try-с-ресурсами использованию try-finally
Глава 3. Методы, общие для всех объектов
3.1. Перекрывая equals, соблюдайте общий контракт
3.2. Всегда при перекрытии equals перекрывайте hashCode
3.3. Всегда перекрывайте toString
3.4. Перекрывайте метод clone осторожно
3.5. Подумайте о реализации Comparable
Глава 4. Классы и интерфейсы
4.1. Минимизируйте доступность классов и членов
4.2. Используйте в открытых классах методы доступа, а не открытые поля
4.3. Минимизируйте изменяемость
4.4. Предпочитайте композицию наследованию
4.5. Проектируйте и документируйте наследование либо запрещайте его
4.6. Предпочитайте интерфейсы абстрактным классам
4.7. Проектируйте интерфейсы для потомков
4.8. Используйте интерфейсы только для определения типов
4.9. Предпочитайте иерархии классов дескрипторам классов
4.10. Предпочитайте статические классы-члены нестатическим
4.11. Ограничивайтесь одним классом верхнего уровня на исходный файл
Глава 5. Обобщенное программирование
5.1. Не используйте несформированные типы
5.2. Устраняйте предупреждения о непроверяемом коде
5.3. Предпочитайте списки массивам
5.4. Предпочитайте обобщенные типы
5.5. Предпочитайте обобщенные методы
5.6. Используйте ограниченные символы подстановки для повышения гибкости API
5.7. Аккуратно сочетайте обобщенные типы и переменное количество аргументов
5.8. Применяйте безопасные с точки зрения типов гетерогенные контейнеры
Глава 6. Перечисления и аннотации
6.1. Используйте перечисления вместо констант int
6.2. Используйте поля экземпляров вместо порядковых значений
6.3. Используйте EnumSet вместо битовых полей
6.4. Используйте ЕпшпМар вместо индексирования порядковыми номерами
6.5. Имитируйте расширяемые перечисления с помощью интерфейсов
6.6. Предпочитайте аннотации схемам именования
6.7. Последовательно используйте аннотацию Override
6.8. Используйте интерфейсы-маркеры для определения типов
Глава 7. Лямбда-выражения и потоки
7.1. Предпочитайте лямбда-выражения анонимным классам
7.2. Предпочитайте ссылки на методы лямбда-выражениям
7.3. Предпочитайте использовать стандартные функциональные интерфейсы
7.4. Разумно используйте потоки
7.5. Предпочитайте в потоках функции без побочных эффектов
7.6. Предпочитайте коллекции потокам в качестве возвращаемых типов
7.7. Будьте внимательны при параллелизации потоков
Глава 8. Методы
8.1. Проверяйте корректность параметров
8.2. При необходимости создавайте защитные копии
8.3. Тщательно проектируйте сигнатуры методов
8.4. Перегружайте методы разумно
8.5. Используйте методы с переменным количеством аргументов с осторожностью
8.6. Возвращайте пустые массивы и коллекции, а не null
8.7. Возвращайте Optional с осторожностью
8.8. Пишите документирующие комментарии для всех открытых элементов API
Глава 9. Общие вопросы программирования
9.1. Минимизируйте область видимости локальных переменных
9.2. Предпочитайте циклы for для коллекции традиционным циклам for
9.3. Изучите и используйте возможности библиотек
9.4. Если вам нужны точные ответы, избегайте float и double
9.5. Предпочитайте примитивные типы упакованным примитивным типам
9.6. Избегайте применения строк там, где уместнее другой тип
9.7. Помните о проблемах производительности при конкатенации строк
9.8. Для ссылки на объекты используйте их интерфейсы
9.9. Предпочитайте интерфейсы рефлексии
9.10. Пользуйтесь машинно-зависимыми методами осторожно
9.11. Оптимизируйте осторожно
9.12. Придерживайтесь общепринятых соглашений по именованию
Глава 10. Исключения
10.1. Используйте исключения только в исключительных ситуациях
10.2. Используйте для восстановления проверяемые исключения, а для программных ошибок — исключения времени выполнения
10.3. Избегайте ненужных проверяемых исключений
10.4. Предпочитайте использовать стандартные исключения
10.5. Генерируйте исключения, соответствующие абстракции
10.6. Документируйте все исключения, которые может генерировать метод
10.7. Включайте в сообщения информацию о сбое
10.8. Добивайтесь атомарности сбоев
10.9. Не игнорируйте исключения
Глава 11. Параллельные вычисления
11.1. Синхронизируйте доступ к совместно используемым изменяемым данным
11.2. Избегайте излишней синхронизации
11.3. Предпочитайте исполнителей, задания и потоки данных потокам исполнения
11.4. Предпочитайте утилиты параллельности методам wait и notify
11.5. Документируйте безопасность с точки зрения потоков
11.6. Аккуратно применяйте отложенную инициализацию
11.7. Избегайте зависимости от планировщика потоков
Глава 12. Сериализация
12.1. Предпочитайте альтернативы сериализации Java
12.2. Реализуйте интерфейс Serializable крайне осторожно
12.3. Подумайте о применении пользовательской сериализованной формы
12.4. Создавайте защищенные методы readObject
12.5. Для управления экземпляром предпочитайте типы перечислений методу readResolve
12.6. Подумайте о применении прокси-агента сериализации вместо сериализованных экземпляров
Приложение. Соответствие статей второго издания разделам третьего издания
Список литературы
Предметный указатель
开源日期
2020-09-01
🚀 快速下载
成为会员以支持书籍、论文等的长期保存。为了感谢您对我们的支持,您将获得高速下载权益。❤️
🐢 低速下载
由可信的合作方提供。 更多信息请参见常见问题解答。 (可能需要验证浏览器——无限次下载!)
- 低速服务器(合作方提供) #1 (稍快但需要排队)
- 低速服务器(合作方提供) #2 (稍快但需要排队)
- 低速服务器(合作方提供) #3 (稍快但需要排队)
- 低速服务器(合作方提供) #4 (稍快但需要排队)
- 低速服务器(合作方提供) #5 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #6 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #7 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #8 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #9 (无需排队,但可能非常慢)
- 下载后: 在我们的查看器中打开
所有选项下载的文件都相同,应该可以安全使用。即使这样,从互联网下载文件时始终要小心。例如,确保您的设备更新及时。
外部下载
-
对于大文件,我们建议使用下载管理器以防止中断。
推荐的下载管理器:JDownloader -
您将需要一个电子书或 PDF 阅读器来打开文件,具体取决于文件格式。
推荐的电子书阅读器:Anna的档案在线查看器、ReadEra和Calibre -
使用在线工具进行格式转换。
推荐的转换工具:CloudConvert和PrintFriendly -
您可以将 PDF 和 EPUB 文件发送到您的 Kindle 或 Kobo 电子阅读器。
推荐的工具:亚马逊的“发送到 Kindle”和djazz 的“发送到 Kobo/Kindle” -
支持作者和图书馆
✍️ 如果您喜欢这个并且能够负担得起,请考虑购买原版,或直接支持作者。
📚 如果您当地的图书馆有这本书,请考虑在那里免费借阅。
下面的文字仅以英文继续。
总下载量:
“文件的MD5”是根据文件内容计算出的哈希值,并且基于该内容具有相当的唯一性。我们这里索引的所有影子图书馆都主要使用MD5来标识文件。
一个文件可能会出现在多个影子图书馆中。有关我们编译的各种数据集的信息,请参见数据集页面。
有关此文件的详细信息,请查看其JSON 文件。 Live/debug JSON version. Live/debug page.