В марте 1995 года с развитием WWW как транспортной среды для работы сетевых приложений Sun Microsystems принимает решение открыть спецификации новой технологии и свободно распространять ее в Internet. В этом же году язык ОАК был переработан и переименован в JAVA (название популярного сорта кофе США).
Для продвижения языка JAVA Sun Microsystems в апреле 1995 года выпускает Web-браузер, целиком написанный на JAVA. Но стремительное распространение JAVA начинается, когда фирма Netscape Communications лицензирует JAVA-интерпретатор для включения его в свой продукт Navigator 2.0.
JAVA — это объектно-ориентированный язык, схожий с C++. Фирма Sun описывает его как "простой, объектно-ориентированный, распределенный, интерпретируемый, надежный, защищенный, не зависящий от архитектуры, переносимый, высокопроизводительный, многопоточный и динамичный".
При разработке языка была поставлена цель — создать простой язык, не требующий специального изучения. Поскольку большинство программистов используют языки С и C++, язык JAVA был разработан так, чтобы быть максимально похожим на C++. Однако в нем нет таких возможностей C++, как перегрузка операторов (есть только перегрузка методов) и множественное наследование. По мнению создателей JAVA, эти возможности C++ используются редко и затрудняют разработку приложений. В язык добавлена автоматическая "сборка мусора", что существенно сокращает число ошибок, связанных, например, с выделением и освобождением памяти. Кроме того, базовый интерпретатор языка и поддержка библиотеки классов занимают всего 40 Кбайт, а вместе с поддержкой стандартных библиотек и потоков — чуть более 200 Кбайт.
Как уже отмечалось, JAVA повторяет язык C++ и обладает возможностью динамического "разрешения" ссылок на методы, заимствованные у OBJECTIVE С. JAVA позволяет сосредоточиться на функциональности самой программы, а не на выборе языковых средств для ее создания.
Особенность языка JAVA и его отличие от всех остальных языков программирования заключаются в использовании виртуальной машины JAVA, что делает этот язык машинно независимым. При компиляции программы JAVA создает не исполняемый модуль для процессора, а байтовый код JAVA, который представляет собой набор команд для некоторой виртуальной машины JAVA. Поэтому для выполнения программы необходим интерпретатор байтового кода, который при загрузке программы через WWW должен быть встроен в программу просмотра (например, Internet Explorer или Netscape Navigator).
Использование виртуальной машины дает ряд преимуществ. Во-первых, как уже говорилось, — машиннонезависимость. Во-вторых, программы для виртуальной машины JAVA имеют намного меньший размер, чем обычные программы. Это позволило передавать эти программы по сети Internet.
В-третьих, т. к. программы не обращаются напрямую к процессору, это делает программы на JAVA безопасными. Программы выполняются внутри виртуальной машины, которая постоянно следит за тем, чтобы программа не сделала чего-нибудь небезопасного.
В обеспечении безопасности также играет большую роль и то, что JAVA — строго типизированный язык, позволяющий выявлять ошибки на стадии компиляции. Одним из отличий JAVA от C++ является то, что в нем невозможно "затереть" память или испортить данные.
В большинстве случаев JAVA — более динамичный язык, чем С или C++, за счет того, что объектно-ориентированная парадигма используется в нем "напрямую". Возможно добавление новых методов в библиотеки, что никак не влияет на уже готовые программы. Напротив, это делает программы более гибкими, способными к изменениям, и позволяет создавать более динамичные приложения.
Язык JAVA представляет собой мощное средство для разработки приложений. Основанный на объектно-ориентированном программировании, позволяющий создавать независимые от архитектуры приложения, данный язык является практически идеальным средством создания приложений для Internet.
С тех пор, как основополагающая концепция JAVA получила дальнейшее развитие, в частности она пополнилась компонентной моделью JAVABEANS, обеспечивающей взаимодействие апплетов JAVA между собой, а также новыми процедурами, которые призваны сделать этот язык, как и планировалось изначально, действительно независимым от платформы. Технология JAVA возникла как альтернатива стандартной модели "клиент- сервер", реализованной в WINDOWS, и одновременно как язык программирования, виртуальная машина и среда для разработки приложений. JAVA занимает центральное место почти в каждой дискуссии, посвященной проблемам компьютерных информационных технологий.
В последнее время совместно с компаниями Netscape Communications, Sun Microsystems и IBM была разработана новая библиотека классов JAVA Foundation Classes (JFC). Эта библиотека содержит несколько новых программных интерфейсов. JFC содержит Internet Foundation Classes (IFC) от компании Netscape, Abstract Windowing Toolkit (AWT) от компании JAVASOFT и средство разработки Java-программ от компании IBM. Фактически специалисты IBM, Netscape и Sun намерены совместно работать над JFC в составе компании JAVASOFT. Признаком зрелости JAVA может служить появление нескольких новых особенностей, таких как совместимость, AWT, усовершенствование пользовательского интерфейса, поддержка международных кодировок, разработка апплетов, шифрование данных, интерфейс к базам данных — Java DataBase Connectivity (JDBC) и JAVA BEANS. Все это, в конечном счете, интегрировано в JDK 1.1.
Компания Sun также ведет разработки PersonalJava и EmbeddedJava, наборы программных интерфейсов, с помощью которых можно будет разрабатывать программы для бытовой электроники и таких устройств, как копиры, смарт- карты и PDA. PersonalJava дополняет стандарт JAVA функциями, предназначенными для устройств со встроенными микропроцессорами и ограниченной памятью, таких как пейджеры и сотовые телефоны.
Sun также намеревается производить набор библиотек JAVA Platform for Enterprise. С помощью последней компания попытается сделать акцент на клиентской, а не на серверной части программ, а также упростить реализацию распределенных корпоративных бизнес-приложений.
По мнения Джеймса Гослинга, новые трудности возникают при размещении приложения в сети. Положительной чертой JAVA является возможность однородного представления действительности, которая на самом деле однородностью не отличается. Одним из наиболее "горячих" направлений в последнее время стал бизнес, связанный с сотовыми телефонами. Сейчас в мире ежедневно продаются десятки тысяч сотовых телефонов с поддержкой JAVA. Эти цифры поражают воображение. Еще большие темпы роста демонстрируют решения, связанные со смарт-картами. Многие сегодня разрабатывают приложения, обеспечивающие связь между периферийными и центральными узлами сети. Отдельные части приложения независимо от особенностей конкретного устройства, подключаемого к сети — будь то настольный компьютер, сотовый телефон или PDA, — должны одновременно являться компонентами инфраструктуры, элементами основной бизнес-логики и баз данных. Конечно, проектирование этой сложной архитектуры можно поручить одному человеку, но справится ли он с такой задачей?
Гослинг подчеркивает, что они пока не имеют действительно бесспорных решений. Имеются лишь инструменты, позволяющие взглянуть на то, что делает какая-то одна система, и перенести это на всю сквозную архитектуру. Некоторые используют отладчики. Но как проанализировать отладчиком код, находящийся внутри базы данных Oracle? Как обобщить всю имеющуюся информацию? Это серьезный и интересный вопрос. Программные системы с каждым днем становятся все более и более сложными.
Пару лет назад Гослинг много времени потратил на создание инструментов, помогающих в разработке систем реального времени. Основная посылка состояла в том, что программист больше не должен вручную писать несколько тысяч строк ассемблерного кода. Системы действительно становились огромными. А технология JAVA к тому времени уже успела проявить себя с самой лучшей стороны в проектах создания больших и надежных систем. Вот что говорит сам Гослинг: "Некоторые из подобных изолированных приложений, находящихся на одной машине, включают в себя миллионы строк кода. Как можно иметь с ними дело? Большинство людей не имеют понятия об этом. Сегодня нам доступны все виды инструментов, начиная с организационных, получаемых на основе объектно-ориентированной методологии, и заканчивая средствами, построенными на их базе, например моделями UML. Но чем больше средств мы создаем, чтобы справиться с имеющимися трудностями, тем более сложные вещи появляются вновь. Мы всегда ограничены в понимании конструируемых объектов — будь то программное обеспечение или небоскребы".