Эффективное-Java-3-е издание-китайско-английское-двуязычное
Это справочник по изучению китайского и английского языков для каждой главы книги «Эффективная Java» (3-е издание). Я надеюсь, что он будет полезен для улучшения технологии Java. Предложения и изменения приветствуются через выпуск или PR.
Содержание
- Глава 2. Создание и уничтожение объектов
- Глава 2. Введение
- Пункт 1. Рассмотрите статические фабричные методы вместо конструкторов (Рассмотрите статические фабричные методы вместо конструкторов)
- Пункт 2. Рассмотрим конструктор, столкнувшийся с множеством параметров конструктора.
- Пункт 3. Обеспечьте использование свойства Singleton с помощью частного конструктора или типа перечисления (используйте частный конструктор или тип перечисления для реализации свойства Singleton).
- Пункт 4. Обеспечьте отсутствие возможности создания экземпляров с помощью частного конструктора (используйте частный конструктор для реализации отсутствия возможности создания экземпляров)
- Пункт 5. Предпочитайте внедрение зависимостей аппаратным ресурсам (внедрение зависимостей лучше, чем аппаратные ресурсы)
- Пункт 6. Избегайте создания ненужных объектов
- Пункт 7. Устраните ссылки на устаревшие объекты (исключите ссылки на устаревшие объекты)
- Пункт 8. Избегайте финализаторов и очистителей (избегайте использования финализаторов и очистителей)
- Пункт 9. Предпочитайте попробовать с ресурсами, чтобы попробовать наконец (использовать попытку с ресурсами лучше, чем попробовать-наконец)
- Глава 3. Методы, общие для всех объектов (общие методы объектов)
- Глава 3. Введение
- Пункт 10. Соблюдайте общий контракт при переопределении метода равенства (соглашение, которому следует следовать при переопределении метода равенства).
- Пункт 11. Всегда переопределяйте hashCode при переопределении метода равенства (при переопределении метода равенства всегда переопределяйте метод hashCode)
- Пункт 12. Всегда переопределять toString (всегда переопределять метод toString)
- Пункт 13. Разумно переопределить метод клонирования (разумно переопределить метод клонирования)
- Пункт 14. Рассмотрите возможность реализации Comparable (рассмотрите возможность реализации интерфейса Comparable).
- Глава 4. Классы и интерфейсы
- Глава 4. Введение
- Пункт 15. Минимизируйте доступность классов и членов (минимизируйте доступность классов и членов)
- Пункт 16. В общедоступных классах используйте методы доступа, а не открытые поля (в общедоступных классах используйте методы доступа, а не общедоступные поля)
- Пункт 17: Минимизация изменчивости (уменьшение изменчивости)
- Пункт 18. Отдавайте предпочтение композиции, а не наследованию
- Пункт 19: Спроектируйте и документируйте наследование или иным образом запретите его (наследование должно быть хорошо оформлено и задокументировано, в противном случае его использование запрещено)
- Пункт 20. Предпочитайте интерфейсы абстрактным классам (Интерфейсы лучше абстрактных классов)
- Пункт 21. Проектируйте интерфейсы для потомков
- Правило 22. Используйте интерфейсы только для определения типов (интерфейсы используются только для определения типов)
- Пункт 23. Предпочитайте иерархии классов классам с тегами (иерархии классов лучше, чем классы с тегами)
- Правило 24. Отдавайте предпочтение статическим классам-членам над нестатическими (статические классы-члены лучше, чем нестатические классы-члены)
- Пункт 25. Ограничьте исходные файлы одним классом верхнего уровня (исходные файлы ограничены одним классом верхнего уровня)
- Глава 5. Дженерики
- Глава 5. Введение
- Пункт 26. Не используйте необработанные типы (Не используйте необработанные типы)
- Пункт 27. Устранить непроверенные предупреждения (удалить непроверенные предупреждения)
- Пункт 28. Предпочитайте списки массивам (список лучше массива)
- Пункт 29. Отдавайте предпочтение универсальным типам (предпочтительнее использовать универсальные типы)
- Пункт 30. Отдавайте предпочтение универсальным методам (предпочтительно использовать универсальные методы)
- Пункт 31. Используйте ограниченные подстановочные знаки для повышения гибкости API (используйте ограниченные подстановочные знаки для повышения гибкости API)
- Пункт 32. Разумно комбинируйте дженерики и varargs
- Пункт 33. Рассмотрите типобезопасные гетерогенные контейнеры (Рассмотрите типобезопасные гетерогенные контейнеры)
- Глава 6. Enums and Annotations (перечисления и аннотации)
- Глава 6. Введение
- Правило 34. Используйте перечисления вместо констант int (используйте типы перечислений вместо констант int)
- Правило 35. Используйте поля экземпляров вместо порядковых номеров.
- Пункт 36. Используйте EnumSet вместо битовых полей (используйте EnumSet вместо битовых полей)
- Пункт 37. Используйте EnumMap вместо порядкового индексирования (используйте EnumMap для замены порядкового индексирования)
- Правило 38. Эмулируйте расширяемые перечисления с помощью интерфейсов (используйте интерфейсы для имитации расширяемых перечислений)
- Пункт 39. Предпочитайте аннотации шаблонам именования (аннотации лучше шаблонов именования)
- Пункт 40. Постоянно используйте аннотацию Override (настаивайте на использовании аннотации @Override).
- Правило 41. Используйте интерфейсы маркеров для определения типов
- Глава 7. Лямбды и потоки (λ-выражения и потоки)
- Глава 7. Введение
- Пункт 42. Отдавайте предпочтение лямбда-выражениям анонимным классам (выражения λ лучше анонимных классов)
- Правило 43. Отдавайте предпочтение ссылкам на методы лямбда-выражениям (ссылки на методы лучше, чем лямбда-выражения)
- Пункт 44. Отдавайте предпочтение использованию стандартных функциональных интерфейсов.
- Правило 45. Используйте потоки разумно
- Пункт 46. Предпочитайте в потоках функции без побочных эффектов (используйте в потоках функции без побочных эффектов)
- Пункт 47. Предпочитайте сбор вместо потока в качестве типа возвращаемого значения (предпочитайте сбор вместо потока в качестве типа возврата)
- Пункт 48. Будьте осторожны при параллельном выполнении потоков.
- Глава 8. Методы
- Глава 8. Введение
- Пункт 49: Проверьте правильность параметров.
- Пункт 50. При необходимости делайте защитные копии.
- Пункт 51. Тщательно проектируйте сигнатуры методов (тщательно проектируйте сигнатуры методов)
- Правило 52: Используйте перегрузку разумно
- Пункт 53: Используйте varargs разумно
- Пункт 54. Возвращать пустые коллекции или массивы, а не значения NULL (возвращать пустые коллекции или массивы, а не значения NULL)
- Пункт 55. Возвращайте опциональные опции разумно.
- Пункт 56. Напишите комментарии к документации для всех открытых элементов API.
- Глава 9. Общее программирование
- Глава 9. Введение
- Пункт 57. Минимизируйте область действия локальных переменных (минимизируйте область действия локальных переменных)
- Пункт 58. Отдавайте предпочтение циклам for-each традиционным циклам for (цикл for-each лучше, чем традиционный цикл for).
- Пункт 59. Знать и использовать библиотеки.
- Пункт 60. Избегайте типов float и double, если требуются точные ответы (следует избегать типов float и double, если требуются точные ответы)
- Правило 61. Отдавайте предпочтение примитивным типам коробчатым примитивам (базовые типы данных лучше, чем классы-оболочки)
- Правило 62. Избегайте строк, в которых более уместны другие типы (избегайте использования строк, когда более уместны другие типы)
- Правило 63. Остерегайтесь производительности конкатенации строк (остерегайтесь проблем с производительностью, вызванных конкатенацией строк)
- Пункт 64. Обращайтесь к объектам по их интерфейсам.
- Пункт 65. Предпочитайте интерфейсы отражению (Интерфейс лучше отражения)
- Правило 66. Разумно используйте собственные методы
- Правило 67: Оптимизируйте разумно
- Пункт 68. Соблюдайте общепринятые соглашения об именах.
- Глава 10. Исключения
- Глава 10. Введение
- Пункт 69. Используйте исключения только в исключительных случаях.
- Пункт 70. Используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования (используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования)
- Пункт 71. Избегайте ненужного использования проверенных исключений (Избегайте ненужного использования проверенных исключений)
- Пункт 72: Поощрять использование стандартных исключений (поощрять повторное использование стандартных исключений)
- Пункт 73. Выдавать исключения, соответствующие абстракции (выдавать исключения, которые можно объяснить абстракцией)
- Пункт 74. Документируйте все исключения, возникающие каждым методом (записывайте все исключения, возникающие каждым методом).
- Пункт 75. Включайте информацию о отслеживании сбоев в подробные сообщения (сообщения с подробными сведениями об исключениях должны включать информацию о сбоях при отслеживании ошибок)
- Пункт 76. Стремитесь к атомарности сбоев (приложите все усилия, чтобы обеспечить атомарность сбоев).
- Правило 77. Не игнорируйте исключения
- Глава 11. Параллелизм
- Глава 11. Введение
- Пункт 78. Синхронизация доступа к общим изменяемым данным.
- Правило 79. Избегайте чрезмерной синхронизации
- Пункт 80. Отдавайте предпочтение исполнителям, задачам и потокам потокам (Исполнители, задачи и потоки лучше, чем прямое использование потоков)
- Пункт 81. Предпочитайте, чтобы утилиты параллелизма ждали и уведомляли (утилиты параллелизма лучше, чем ожидание и уведомление)
- Пункт 82. Документирование потокобезопасности (Документ должен содержать атрибуты потокобезопасности)
- Правило 83: разумно используйте отложенную инициализацию
- Пункт 84. Не полагайтесь на планировщик потоков (Не полагайтесь на планировщик потоков)
- Глава 12. Сериализация
- Глава 12. Введение
- Пункт 85. Предпочитайте альтернативы сериализации Java (предпочитайте альтернативы сериализации Java)
- Правило 86. Реализуйте Serializable с большой осторожностью.
- Пункт 87. Рассмотрите возможность использования пользовательской сериализованной формы (Рассмотрите возможность использования пользовательской сериализованной формы)
- Правило 88. Пишите методы readObject с защитой (пишите методы readObject с защитой)
- Правило 89. Для управления экземпляром отдавайте предпочтение типам перечислений, а не readResolve (Для управления экземпляром типы перечислений лучше, чем readResolve)
- Пункт 90. Рассмотрите прокси-серверы сериализации вместо сериализованных экземпляров (Рассмотрите прокси-серверы сериализации вместо сериализованных экземпляров)