Устойчивость

Многоплатформенная среда Web предъявляет к программам повышенные требования, поскольку они должны надежно выполняться в разнообразных системах. Поэтому способность создавать устойчивые программы была одним из главных приоритетов при проектировании Java. Для обеспечения надежности Java накладывает ряд ограничений в нескольких наиболее важных областях, что вынуждает программиста выявлять ошибки на ранних этапах разработки программы. В то же время Java избавляет от беспокойства по поводу многих наиболее часто встречающихся ошибок программирования. Поскольку Java — строго типизированный язык, проверка кода выполняется во время компиляции. Однако проверка кода осуществляется и во время выполнения. В результате многие трудно обнаруживаемые программные ошибки, которые часто ведут к возникновению трудновос-производимых ситуаций времени выполнения, в Java-программе попросту невозможны. Предсказуемость кода в различных ситуациях — одна из основных особенностей Java.

Чтобы понять, чем достигается устойчивость Java-программ, рассмотрим две основных причины программных сбоев: ошибки управления памятью и неправильная обработка исключений (т.е. ошибки времени выполнения). В традиционных средах создания программ управление памятью — сложная и трудоемкая задача. Например, в среде C/C++ программист должен вручную резервировать и освобождать всю динамически распределяемую память. Иногда это ведет к возникновению проблем, поскольку программисты либо забывают освободить ранее зарезервированную память, либо, что еще хуже, пытаются освободить участок памяти, все еще используемый другой частью кода. Java полностью исключает такие ситуации, автоматически управляя резервированием и освобождением памяти. (Фактически, освобождение выполняется полностью автоматически, поскольку Java предоставляет функцию сборки мусора в отношении неиспользуемых объектов.) В традиционных средах условия исключений часто возникают в таких ситуациях, как деление на ноль или "файл не найден", и управление ими должно осуществляться с помощью громоздких и трудных для понимания конструкций. Java облегчает выполнение этой задачи, предлагая объектно-ориентированный механизм обработки исключений. В хорошо написанной Java-программе все ошибки времени выполнения могут — и должны — управляться самой программой.