Главная » Советы

Для каждого метода документируйте все инициируемые исключения

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

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

Читать »

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

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

в языке программирования Java предусмотрены три типа объектов Throwable: обрабатываемые исключения (checked exception), исключения времени выполнения (rиn-time exception) и ошибки (error). Программисты обычно путают, при каких условиях следует использовать каждый из этих типов. Решение не всегда очевидно, но есть несколько общих правил, в значительной мере упрощающих выбор.

Читать »

Перегружая методы, соблюдайте осторожность

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

Приведем пример попытки классифицировать коллекции по признаку – Haбop, список или другой вид коллекций,- предпринятой из лучших побуждений: 120

// Ошибка: неверное использование перезагрузки!

public class CollectionClassifier {

Читать »

Синхронизируйте доступ потоков к совместно используемым изменяемым данным

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

Использование ключевого слова synchronized дает гарантию, что в данный момент времени некий оператор или блок будет выполняться только в одном потоке. Многие программисты рассматривают синхронизацию лишь как средство блокировки потоков, которое не позволяет одному потоку наблюдать объект в промежуточном состоянии, пока тот модифицируется другим потоком. С этой точки зрения, объект создается с согласованным состоянием (статья 13), а затем блокируется методами, имеющими к нему доступ. Эти методы следят за состоянием объекта и (дополнительно) могут вызывать для него переход состояния (state transition), переводя объект из одного согласованного состояния в другое. Правильное выполнение синхронизации гарантирует, что ни один метод никогда не сможет наблюдать этот объект в промежуточном состоянии.

Читать »

Никогда не вызывайте метод wait вне цикла

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

Метод Object.wait применяется в том случае, когда нужно заставить поток дождаться некоторого условия. Метод должен вызываться из синхронизированной области, блокирующей объект, для которого был сделан вызов. Стандартная схема использования метода wai t:

Читать »

Не игнорируйте исключений

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

Этот совет кажется очевидным, но он нарушается настолько часто, что заслуживает повторения. Когда разработчики API декларируют, что некий метод инициирует исключение, этим они пытаются что-то вам скliзать. Не игнорируйте это! Игнорировать исключения легко: необходимо всего лишь Окружить вызов метода оператором try с пустым блоком catch:

Читать »

Предпочитайте компоновку наследованию

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

Наследование (inheritance) – это мощный способ обеспечения многократного использования кода, но не всегда лучший инструмент для работы. При неправильном применении наследование приводит к появлению ненадежных программ. Наследование можно безопасно использовать внутри пакета, где реализация и подкласса, и суперкласса находится под контролем одних и тех же программистов. Столь же безопасно пользоваться наследованием, когда расширяемые классы специально созданы и документированы для последующего расширения (статья 15). Однако наследование обыкновенных неабстрактных классов за пределами пакета сопряжено с риском. Напомним, что в этой книге слово "наследование" (inheritance) применяется для обозначения наследования реализации (implementation inheritance), когда один класс расширяет Другой. Проблемы, обсуждаемые в этой статье, не касаются наследование интерфейса (interface inheritance), когда класс реализует интерфейс или же один интерфейс расширяет другой.

Читать »

Не попадайте в зависимость от планировщика потоков

Добавлено Дата: 17 May, 2011 категория: Java, Советы

 

При выполнении в системе нескольких потоков соответствующий планировщик определяет, какие из них будут выполняться и в течение какого времени. Каждая правильная реализация JVМ пытается при этом добиться какой-то справедливости, однако конкретные стратегии диспетчеризации в различных реализациях сильно отличаются. Хорошо написанные многопоточные приложения не должны зависеть от особенностей этой стратегии. Любая программа, чья корректность или производительность зависит от планировщика потоков, скорее всего окажется не переносимой.

Читать »

Избегайте группировки потоков

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Помимо потоков, блокировок и мониторов, система многопоточной обработки предлагает еще одну базовую абстракцию: группа потоков (thread gгоuр). Первоначально группировка потоков рассматривалась как механизм изоляции апплетов

Читать »

Сводите к минимуму область видимости локальных переменных

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

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

Читать »

Соблюдайте осторожность при реализации интерфейса SerializabIe

Добавлено Дата: 16 May, 2011 категория: Java, Советы

Чтобы сделать экземпляры класса сериализуемыми, достаточно добавить в его декларацию слова "implements Serializable". Поскольку это так легко, широкое распространение получило неправильное представление, что сериализация требует от программиста совсем небольших усилий. На самом деле все гораздо сложнее.

Читать »

Не используйте строку там, где более уместен иной тип

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Тип String создавался для того, чтобы представлять текст, и делает он это прекрасно. Поскольку строки широко распространены и имеют хорошую поддержку в языке Java, возникает естественное желание использовать строки для решения тех задач, для которых они не предназначались. В этой статье обсуждается несколько операций, которые не следует проделывать со строками.

Читать »

Не создавайте дублирующих объектов

Добавлено Дата: 16 May, 2011 категория: Java, Советы

Вместо того чтобы создавать новый функционально эквивалентный объект всякий раз, когда в нем возникает необходимость, можно, как правило, еще раз использовать тот же объект. Применять что-либо снова – и изящнее, и быстрее. Если объект является неизменяемым (immutable), его всегда можно использовать повторно (статья 13).

Читать »

Рассмотрите возможность использования специализированной сериализованной формы

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Если вы создаете класс в условиях дефицита времени, то, как правило, имеет смысл сконцентрировать усилия на построении самого лучшего АРI. Иногда это означает создание "одноразовой" реализации, которая в следующей версии поменяется. Обычно это проблем не вызывает, однако если данный класс реализует интерфейс Serializable и использует при этом сериализованную форму, предоставленную по умолчанию, вам уже никогда не удастся полностью избавиться от этой временной реализации, и она всегда будет навязывать вам именно эту сериализованную форму. Это не теоретическая проблема. Такое уже происходило с несколькими классами из библиотек для платформы Java, такими как B1gInteger.

Читать »

Проверяйте достоверность параметров

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Большинство методов и конструкторов имеет ограничения на то, какие значения могут быть переданы с параметрами. Например, нередко указывается, что индексы должны быть неотрицательными, а ссылки на объекты отличны от null. Вы обязаны четко документировать все эти ограничения и начинать метод с их проверки. Это частный случай более общего принципа: стараться выявлять ошибки как можно cкоpee после того, как они произойдут. В противном случае обнаружение ошибки станет менее вероятным, а определение источника ошибки – более трудоемким.

Читать »