Последнее изменение: 23 декабря 2010г.
Этот раздел содержит материалы, посвященные преимущественно технике программирования. Они ориентированы в основном на начинающих разработчиков, но могут быть весьма полезны и профессионалам.
Общее
В этой части собраны статьи, посвященные общим вопросам программирования.
- 23.05.11. Ликбез – то, что обязаны знать все, но большая часть не знает, а небольшая – отказывается знать.
- 01.09.07. Массивы в Java – особенности устройства массивов с примерами и картинками.
- 01.09.07. Объекты и ссылки – что надо знать о ссылках в Java.
- 13.07.10. Реализация шаблона Singleton – варианты реализации в различных ситуациях.
- 22.09.07. Четыре важных "p" – о модификаторах доступа.
- 30.09.07. Overloading, overriding и другие звери – о различных технических аспектах, появляющихся при наследовании и не только.
-
28.10.07.
try/catch/finallyи исключения – об исключениях как явлении, их классификации, способе обработки и обо всем, что с этим связано.
Графический интерфейс
В этой части собраны статьи, посвященные графическомй интерфейсу, GUI – о его устройстве, особенностях работы и т.п..
- 06.10.10. О менеджерах раскладки – что это такое, как и когда ими пользоваться, а также – как написать собственный.
- 25.08.10. Синхронизация пользовательского интерфейса – о том, как не допустить зависаний интерфейса при выполнении долгих задач.
- 23.12.10. Внутреннее устройство GUI – о том, как устроен пользовательский интерфейс, как рисуются компоненты и почему не получается просто рисовать на панели.
java.lang
В этой части собраны статьи, связаные преимущественно с пакетом java.lang.
- 17.09.10. Сравнение объектов: теория – как сравниваются объекты в Java и где лежат грабли.
- 01.09.07. Сравнение объектов: практика – тонкости реализации сравнения объектов.
- 07.05.08. Ах, эти строки... – статья о строках. Расставляем флажки над зарытыми граблями.
- 28.07.11. Синхронизация потоков – о многопоточной работе и синхронизации. О кочках, буреломе и тропинках на пути к реализации многопоточности.
java.io
В этой части собраны статьи, посвященные вводу-выводу, кодировкам и пр – тому, что содержится в
пакете java.io и не только в нем
- 19.04.11. Сериализация как она есть – особенности, тонкие места, подводные камни и способы их обхода.
- 01.09.07. Вавилонское столпотворение. Часть 1. Кодировки – статья о кодировках, их использовании и т.п.
- 01.09.07. Вавилонское столпотворение. Часть 2. Локализация и ресурсы – статья о принципах создания многоязычных приложений.
- 01.09.07. Вавилонское столпотворение. Часть 3. Веб-приложения – как отослать на сервер текст и получить его назад в неизменном виде.
- 29.10.10. Вавилонское столпотворение. Часть 4. Проза жизни: компиляция и вывод в консоль – как правильно скомпилировать исходный код и вывести в консоль текст, отличный от «Hello, World!»
Знаете ли Вы?..
Здесь собраны некоторые тонкости, о которых знают далеко не все.. Эти тонкости могут доставить много головной боли. С некоторыми из них я в свое время даже обращался в службу поддержки Sun, т.к. считал, что это ошибки.
Итак, знаете ли Вы, что ...
- ... если клонировать объект, то все ссылки на другие объекты, которые он содержит, останутся теми же самыми? Иначе говоря, инкапсулированные объекты не клонируются.
- ...
у примитивного типа (
int,double,booleanи пр.) тоже есть класс? Его можно получить двумя способами: через.class, как и для обычного класса (т.е.,int.class), либо через класс-оболочку примитивного типа (т.е.Integer.TYPEдляint,Boolean.TYPEдляbooleanи т.п.) - ... теоретически строку можно изменить? Если поставить это просто как самоцель, то reflection позволяет это сделать. Хотя в реальных условиях скорее всего этого не даст сделать менеджер безопасности. Разве что он специально неправильно настроен. Читайте в статье Ах, эти строки... – Изменение строки.
- ...
операции a += b и a = a + b совсем не эквивалентны? Сравните их, при условии,
что
aимеет типint, а b –float. Первая из операций пройдет нормально, на второй компилятор выдаст синтаксическую ошибку. - ...
0.3f+0.4fвовсе не равно0.7f? Проверьте это. И заодно сразу запомните – ниfloat, ниdoubleне пригодны для точных рассчетов. Для них нужно использовать классjava.math.BigDecimal. Читайте статью "Сравнение объектов: Практика", часть "Сравнение вещественных примитивов". - ...
существуют
+0.0и-0.0? Операция сравнения для них даетtrue, хотя формально это два разных числа. И иногда их правильно считать разными. Подробности – в статье "Сравнение объектов: Практика", часть "+0.0и-0.0". - ...
при создании массива объектов его элементы не создаются? Под ссылки на них всего лишь выделяется
место, но элементы массива (собственно, ссылки на объекты) при этом равны
null! Подробнее об этом – в статье "Массивы в Java". - ...
существует более одного способа сделать объект сериализуемым? Кроме интерфейса
java.io.Serializableсуществует еще иjava.io.Externalizable. Его реализация требует больше усилий, но способна дать существенный выигрыш в скорости, в некоторых случаях более чем на порядок! Читайте статью "Сериализация как она есть". - ...
существующие в J2SDK реализации
java.util.SortedSetиjava.util.SortedMapполагаются на то, что еслиcompareTo()возвращает 0, то объекты равны?equalsпри этом даже не вызывается! И если при реализации интерфейсаjava.lang.Comparableне реализовать соответствующий ему (consistent) методequals(и, разумеется,hashCode), это может привести к трудно диагностируемым ошибкам. Читайте об этом тут: "Сравнение объектов: теория – Упорядоченные коллекции –java.util.SortedSetиjava.util.SortedMap". - ...
при использовании
java.net.HttpURLConnectionзапрос на сервер отправляется только тогда, когда вы запрашиваетеInputStreamдля чтения ответа или же какие-либо параметры ответа – response code, response message и т.п. Т.е. даже если вы вызываетеconnect()и пишете данные в выходной поток (например, при посылке POST-запроса), запрос на сервер в этот момент не посылается.
* * *
На самом деле таких тонкостей много больше. Все я сейчас перечислять не буду, к некоторым из них крайне желательны иллюстрации, чтобы понять, в чем суть.



skipy.ru)