WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Очистка вашего кода

Очистка вашего кода


Дата публикации: 17-03-2013

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

try {

// Create a connection
Connection con = // ... create a connection

// ... Use connection object above, such as firing a query

// Clean up - release connection
con.close();

}
catch(SQLException e) {
e.printStackTrace();
}
Вышеупомянутая программа использует соединение, чтобы выполнить некоторую операцию с базой данных. Она создает соединение, формирует запрос, используя его и, наконец, реализует соединение. Этот, по-видимому, совершенный фрагмент кода имеет обход цикла. Как вы могли предположить, код между созданием и очищением объекта соединения, может генерировать SQLException. Если возникает такое условие, то поток будет направлен к блоку catch и вызов con.close() не будет выполнен. Это означает, что соединение не будет закрыто!
Java обеспечивает удобный способ решения ситуаций такого типа, используя блок finally. Блок finally сопровождает блок try. Помните, что блок try должен сопровождаться блоком catch или finally или обоими. Одна хорошая особенность блока finally - это то, что он выполняется в обоих случаях:

1. Когда блок try завершает выполнение по ходу программы
2. Когда блок try завершает выполнение из-за исключения

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

Это свойство блока finally реализовано для выполнения очистки. Здесь приведена модифицированная версия вышеупомянутой программы:

Connection con = null;
try {

// Create a connection
con = //... create a connection

//... Use connection object above, such as firing a query

// Clean up - release connection
con.close();

}
catch(SQLException ex) {
ex.printStackTrace();
}
finally{

// Clean up

try {
if (con != null) {
con.close();
}
}
catch(SQLException sqlEx) {
//... Ignore exception
}

}
Как вы можете видеть, есть простые изменения. Но очистка теперь выполняется лучшим способом. Прежде всего, мы переместили объявление для объекта соединения con вне блока try, так, чтобы он был видим в блоке finally. Остаток блока try - такой же, как в предыдущем случае.
В блоке finally мы делаем пару интересных вещей. Во-первых, мы включили чистый код в блоке try. Так как мы ничего не можем сделать больше, если получаем исключение при закрытии соединения, то мы просто игнорируем его. Это удовлетворило бы нас в большинстве случаев, если бы мы не хотели столкнуться с ситуацией (типа регистрации ошибки). Во-вторых, мы проверяем, является ли объект соединения нулем (null). Это важно, потому что исключение могло бы возникнуть во время создания соединения. В это время con был бы нулем. Если мы удалим if check, то это приведет к NullPointerException. И, наконец, мы закрываем объект соединения.

Для очистки некоторые люди используют finalize(), который является специальным методом, вызываемым коллектором "мусора" перед тем как объект удаляется. Однако, коллектор мусора не имеет возможности выполнить что-либо. Так, вы не можете полагаться на finalize(), чтобы выполнить очистку.

Как я упомянул ранее, выполнение очистки - важный аспект разработки кода. И позаботиться нужно о том, чтобы очистка выполнялась во всех возможных случаях. Это делает вашу программу более крепкой и в то же самое время позволяет ей хорошо функционировать.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)
Октябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Альфонс Карр:

    "Чтобы заработать на жизнь, надо работать. Но чтобы разбогатеть, надо придумать что-то другое."

    Опрос

    Какими социальными сетями Вы пользуетесь?

    Vkontakte.ru
    Одноклассники
    Мой Мир - mail.ru
    Google Plus
    Facebook
    ЖЖ
    Другие
    Не пользуюсь