Создатели языка Java постарались воплотить в своем "детище" все лучшие, по их мнению, идеи объектно-ориентированных языков программирования. За основу был взят C++, масса полезных идей была заимствована из Objective C и SmallTalk, кое-что - из других языков.
Язык разрабатывался с 1990 года (подробности истории Java описаны в "SM" NN 37-38/1995), однако лишь совсем недавно появилась версия языка, получившая официальное название Java 1.0.
Вот перечень свойств языка Java, которыми особенно гордятся его создатели (см. также сравнительную таблицу характеристик Java и других языков программирования):
- Простота. Описание языка занимает всего 60 страниц, его вполне можно прочитать за один вечер. Тем, кто знает C++, изучить этот язык будет особенно просто.
- Объектная ориентированность. Концепция объектно-ориентированного программирования реализована в Java весьма строго: в нем нет данных, не являющихся объектами, нет и функций, не являющихся методами какого-либо объекта.
Имеются следующие стандартные библиотеки классов:
- java.lang - в нее входят базовые классы;
- java.io - в ней хранятся средства для работы с потоками и файлами последовательного доступа;
- java.net - библиотека для создания сетевых приложений;
- java.util, содержащая классы-контейнеры с множеством полезных функций; наконец,
- java.awt - "оконная" библиотека.
Последняя представляет собой не что иное, как новый, не зависящий от конкретной графической оболочки стандарт для разработки приложений, использующих оконный интерфейс.
- Средства работы в сети. Java хорошо приспособлен для работы в сетях, использующих протокол TCP/IP. Имеется специальная библиотека классов для создания сетевых приложений.
- Интерпретируемость. Исходный код Java-приложений преобразуется компилятором в так называемый байт-код, исполняемый виртуальной машиной в режиме интерпретации. Java использует так называемое очень позднее связывание, которое начинается непосредственно перед исполнением. Еще одна характерная особенность: при создании байт-кода компилятор не определяет адресов и размеров объектов в памяти. Связывание имен и настройку адресов в оперативной памяти осуществляет виртуальная машина, которая, кстати, может изменить настройку на конкретные адреса, если сочтет это нужным, приложения же ни о каких изменениях догадываться не будут.
- Надежность. Язык строго типизирован, стало быть, значительная часть ошибок может быть выявлена на стадии компиляции. Конструкции C++, предшественника Java, которые порой сбивали программистов с толку, в новый язык не вошли. Возможности для контроля приложений на стадии исполнения (переполнение стека, отслеживание границ массивов, поиск резервов для оптимизации и др.) стали обязательным элементом средств разработки.
- Безопасность. Поскольку Java изначально планировался для создания коммерческих приложений, которые не только могут распространяться по сетям, но и сами способны работать с сетями, разработчики языка постарались уделить безопасности максимум внимания. Полученный по сети байт-код проверяется на правильность инструкций (принадлежность к байт-коду Java), на безопасность команд для компьютера и локальной сети, на соответствие разрешенным операциям, а также на целый ряд прочих условий.
- Динамичность. Язык Java динамичен, он открыт для новаций, обновлений. По умолчанию все классы являются расширяемыми, а методы виртуальными, хотя при желании можно запретить дальнейшую модификацию класса или метода. В языке предусмотрена возможность создания модулей без реализации или с неполной реализацией (нечто подобное есть и в языке Ada).
- Переносимость и нейтральность относительно архитектуры. Байт-код языка Java един для всех платформ и архитектур. Благодаря наличию виртуальных машин Java-приложения могут разрабатываться и исполняться на самых разных вычислительных платформах.
Базовые типы данных имеют строго определенный формат. Существует 4 базовых типа для описания целых чисел (8, 16, 32 и 64-разрядные), 2 базовых типа чисел с плавающей запятой (32 и 64-разрядные), 1 символьный тип (символ кодируется 2 байтами в стандарте UNICODE) и 1 логический (boolean). Имеются специальные классы для работы со строками и символами.
- Многопоточность. В языке Java предусмотрены механизмы создания так называемых легковесных параллельных процессов (threads), которые могут работать в режиме квантования времени, используя синхронизацию на основе мониторов Хоара.
- Автоматическая сборка мусора. Сборщик мусора встроен в виртуальную машину. Он работает в фоновом режиме, осуществляя поиск потерянных объектов и освобождая занятую ими память.
- Работа с исключениями. Язык содержит все необходимые средства для корректной работы со всеми объектами и ресурсами в случае возникновения исключительных ситуаций.
- Высокая производительность. По скорости работы Java-приложения вполне соизмеримы с приложениями, разработанными на языках C и C++, оказываясь иногда производительнее последних. Можно считать, что генератор "родного" кода исполнительной машины встроен в динамический загрузчик виртуальной машины. Процесс генерации машинного кода прост, байт-коды легко интерпретируются и исполняются "на лету". Сильного замедления не происходит также благодаря весьма разумному изначальному кодированию, в результате которого работа с базовыми классами оказалась встроенной в байт-код, и оптимизации, которая производится как на этапе генерации байт-кода, так и перед непосредственным исполнением на конкретной машине.
Источник