Краткая история языка Java

Краткая история языка Java

Язык Java (произносится “джава”, с ударением на первом слоге) интерпретируемый объектно-ориентированный, архитектурно-нейтральный, динамический, строго типизированный, переносимый язык программирования общего назначения. Разработан маленькой группой, возглавляемой Джеймсом Гослингом (James Gosling) из корпорации Sun Microsystems. В эту группу также входили Патрик Ноутон (Patrick Naughton) и Билл Джой, сооснователь корпорации Sun Microsystems, поддержавший этот проект. Сейчас этой корпорации уже нет, но все разработки Sun, в том числе и вся линейка продуктов Java перешли корпорации Oracle, купившей Sun в 2009 году (точнее, поглощение Sun шло с апреля 2009 года по январь 2010 года).

Язык Java создан на базе языков C++, Smalltalk, Pascal и др., вобрав их лучшие, по мнению создателей, черты. Более того, авторы языка стремились сделать Java как можно более похожим на С++, но убрав при этом редко используемые, малопонятные и вредные для надёжности и безопасности средства С++, поэтому синтаксис Java, по существу, представляет собой упрощенный вариант синтаксиса С++ и зная С++, нетрудно перейти к Java.

Как пишет Карен Саутвик (Karen Southwick) в книге High Noon (В зените): “Java was the product of a small, elite team of developers who had worked in secret in offices outside of Sun”. – Язык Java был продуктом небольшой группы высококвалифицированных разработчиков, которые вели эту работу секретно за пределами фирмы Sun. Язык Java (первоначальное название Oak (по-английски дуб). По легенде под окном офиса Джеймса Гослинга рос дуб, который ему очень нравился и в честь которого он и решил назвать новый язык) предназначен для создания небольших, надёжных платформно-независимых Интернет-приложений, аплетов, которые можно распространять на клиентские машины с Web-сервера, а также включать в Web-страницы для их анимации. Язык Java изначально обладал встроенной поддержкой работы в сетевой среде, взаимодействия с базами данных и многопоточной обработки.

Java-программы создаются из классов. Классы являются стандартными блоками, из которых состоят все приложения и аплеты, написанные на Java. Классы транслируются в байт-код (bytecode) и исполняются виртуальной Java-машиной (JVM, Java VM) непосредственно под конкретной ОС. Поэтому, когда рассматривают весь комплекс ПО, связанного с Java, говорят о технологии Java. Как это водится, за прошедшие годы число классов так называемого API Java (API – интерфейс прикладного программирования) выросло с 200 до нескольких тысяч.

Отмечу, что технология Java является одновременно и платформой, и языком программирования. Некоторые авторы проводят различие между этими понятиями, отделяя по ряду причин язык Java от платформы, но я не сторонник такого деления. Работа над Java была начата в 1990/1991 гг. (отмечу, что существенные её части были разработаны в Санкт-Петербурге – тогда там находилось отделение Sun) и официально анонсирована в мае 1995 г. на конференции SunWorld, в этом же году Java был встроен в самый популярный в то время браузер Netscape 2.0, в 1996 году его начал поддерживать браузер Microsoft Internet Explorer 3.0, а затем и другие браузеры.

В начале 1997 г. появилась версия Java 1.1, в которой вдвое выросла скорость работы интерпретатора. Большой шаг в развитии Java был сделан в 1998 г. на конференции JavaOne, на которой было объявлено о выпуске версии Java 1.2. В ней слабые средства для создания  графического пользовательского интерфейса и графических приложений были заменены мощным инструментарием. Эта версия языка и получила название Java 2.

В отличие от языка C++, оказавшего на новый язык сильное влияние, Java изначально создавался как объектно-ориентированный язык (ООЯ). Все программы на Java являются классами (class), точнее программа состоит из одного или нескольких классов. Так как байт-код является по отношению к ЦП архитектурно-нейтральным, т. е. после трансляции в байт-код Java-программа может работать на любом устройстве, на всех платформах, на которых реализована JVM. Это одна из сильных сторон Java, воплощающая принцип кросс-платформенности языка – «написано единожды, работает везде». Например, Java-программы могут работать на множестве небольших потребительских устройств, имеющих встроенный микропроцессор (МП). При этом они не зависят от типов применяемых в этих устройствах МП. Это особенно важно для работы программы в неоднородных вычислительных средах, особенно в Интернете. Классы Java загружаются интерпретатором языка динамически по мере необходимости, в том числе могут загружаться и запускаться на выполнение файлы из Интернета.

В 2009 году корпорация Sun Microsystems была куплена корпорацией Oracle и язык Java сменил своего владельца.

Для повышения надёжности из Java удалены средства работы с указателями, поскольку указатели – источник большинства ошибок в программах на языках C и C++. В целях безопасности каждой Java-программе может быть приписан цифровой код, позволяющий распознать происхождение этой программы, что важно при загрузке программ из Сети. Для ускорения исполнения Java-программ кроме JVM существуют компиляторы, транслирующие байт-код программы во время её исполнения в машинные коды конкретного ЦП (JIT compiler). Этот процесс часто называют динамической компиляцией байт-кода, при этом сейчас JIT-компиляторы могут конкурировать с традиционными компиляторами.

Технология Java включает в себя клиентскую и серверную части, а также доступ к БД и поддержку многопоточности. Она состоит из различных платформ (разделение на платформы тоже началось в 1997 г. с появлением существенно обновленной версии – Java 2), предназначенных для широких областей применения. Среди них: EnterpriseJava, PersonalJava и EmbeddedJava, соответственно имеется три версии языка:

- Java2 Standard Edition (J2SE) – для настольных приложений. По состоянию на 2017 год последней версией J2SE является версия Java 8 (выпущена в 2014 г.). В 2006 г. неудобное обозначение Java 2 было отменено, и текущая версия Java Standard Edition была названа Java SE.

- Java2 Enterprise Edition (J2EE) – среда и технология разработки корпоративных и бизнес-приложений. 4 марта 2018 некоммерческая организация Eclipse Foundation, которой корпорация Oracle передала разработку и управление проектом Java EE, подвела итоги голосования по смене имени проекта, так как Oracle отказалась передать Eclipse права на использование торговой марки Java. В итоге было решено переименовать Java EE в Jakarta EE.

- и Java2 Micro Edition (J2ME) – для встраиваемых приложений, для портативных устройств. Это технология разработки встраиваемых приложений (для мобильных телефонов, телевизионных приставок и т. п.), созданная корпорацией Sun Microsystems. Включает в себя компактную Java-машину и набор API-интерфейсов. Java-приложение, разработанное специально для мобильных устройств, поддерживающих стандарт MIDP (он определяет взаимодействие Java-программ с аппаратным обеспечением сотовых телефонов), называется мидлет. С повсеместным распространением смартфонов мидлеты стали очень популярны. Вот что о влиянии компьютерных сетей на Java сказал Джеймс Гослинг: «Вопрос о том, как сеть влияет на разработку языка программирования, весьма обширен. Как только появляется сеть, вам приходится иметь дело с разнородностью, со связью, тщательно продумывать последствия отказов – значительно больше заниматься надежностью. В частности, нужно думать о том, как строить системы, которые будут устойчивы и смогут продолжить работу в условиях частичных отказов …

В значительной мере такого рода заботы нашли отражение в механизме исключений Java, системе строгой типизации, сборке мусора, виртуальных машинах и так далее. Хочу подчеркнуть, что сети оказали глубокое влияние на организацию Java – языка и виртуальной машины.

… Одним из уникальных новшеств Java было встраивание документации в код. Для Java API есть инструмент Javadoc, который извлекает документацию из исходного кода. Одна из существенных проблем документирования программ состоит в том, что документация часто оказывается устаревшей в сравнении с реальными API. Автоматическое извлечение стандартной документации обеспечивает гораздо лучшую синхронизацию, и даже если вообще не писать комментарии, то Javadoc фактически правдоподобно сгенерирует полезную документацию по API.» (из книги «Пионеры программирования»).

С Java связано довольно много новых в программировании понятий. Прежде всего, это аплеты. Аплеты – это Java-программы, работающие под управлением веб-браузеров (в HTML для этого есть специальный тег </applet>), поскольку первоначальная идея состояла в том, что пользователи загружают байт-коды Java по сети и выполняют их на своих машинах, т. е. исполнение происходит на стороне клиента. Для безопасности апплеты исполняются в так называемой «песочнице». Разумеется, веб-браузер должен содержать в себе интерпретатор байт-кода. Однако всплеск популярности апплетов прошёл и сейчас на большинстве веб-страниц вместо аплетов применяются сценарии JavaScript, однако Java-программы стали широко использоваться на стороне сервера, по аналогии с аплетами они получили название сервлеты.

В Java спецификации, ориентированные на конкретные приложения, носят названия профилей (Java TV, JavaPhone и др.).

Очень важная дата в биографии Java 13 ноября 2006 года. В этот день Sun выпустила большую часть технологии Java как свободное и открытое программное обеспечение в соответствии с условиями лицензии GPL2 (GNU General Public License) (по этой же лицензии распространяются исходные тексты Linux). Через год практически весь исходный код технологии Java стал бесплатным и открытым, кроме небольшой части кода, на который San не имела авторских прав. Java 7 – первая версия языка, которая разрабатывалась по предложениям сообщества Java-разработчиков по лицензии свободного программного обеспечения.

С конца 1990-х Java стала доминирующим ЯВУ и с тех пор удерживает корону одного из наиболее широко используемых языков программирования. Его стали часто использовать для создания больших сложных систем, включающих несколько разных компьютеров, взаимодействующих по сети, например систем обработки транзакций. В знакомой мне туристической компании, имеющей громадные обороты и продающей в год более миллиона путёвок, вся система (и клиентская и серверная части) написаны на Java.

На Java также создаётся ПО с графическим пользовательским интерфейсом (ГИП), такое как редакторы, аудиоплееры, веб-браузеры и т. д. Согласно оценке Sun Microsystems, технологию Java использует более 700 тыс. разработчиков. С Java связаны много других программных продуктов, например, операционная система JavaOS – небольшая, эффективная ОС, оптимизированная для поддержки Java-приложений. Существует в двух модификациях: JavaOS for Business и JavaOS for Consumers. Java API – интерфейс прикладного программирования Java # библиотека классов, на базе которых создаются стандартные пакеты Java, исполняемые виртуальной Java-машиной (JVM). В составе Java API существует большое количество таких стандартизованных библиотек, содержащие собрания готовых решений часто встречающихся задач, тысячи классов и интерфейсов, а также многие тысячи методов. Эти библиотеки можно свободно использовать при написании собственного кода. Создатель Java Джеймс Гослинг справедливо сказал: «В нынешние времена уже нельзя рассматривать язык изолированно: нужно брать язык вместе со средой».

Существует множество технологий, расширяющих технологию Java на другие предметные области, одной из них является технология Jini – разработка Sun Microsystems, представляющая собой расширение языка Java и позволяющая цифровым устройствам с программами на этом языке самоорганизовываться в компьютерной сети в сообщества без посредничества настольного ПК.

Для разработчиков был создан пакет JDK (Java Development Kit).Он включает в себя пакеты разных фирм (например, Oracle, Sun Microsystems, Novell), содержащие базовый набор инструментальных средств, необходимых для быстрого создания, тестирования и отладки на разных платформах Java-приложений и Java-аплетов в среде визуального программирования. Включает с себя также инструментарий, полезный при разработке программ на Java. Пакет JDK 1.1 появился в декабре 1996 года. Текущая версия, JDK 20 (август 2024 года).

Упомяну о таком явлении в ЯВУ, которое называется синтаксический сахар (syntactic sugar). Это добавление в язык новых форм записи его конструкций, которые делают процесс кодирования более удобным. В процессе развития в большинство ЯВУ был добавлен разнообразный синтаксический сахар. Не избежал этого и Java, например в целочисленных константах могут использоваться нижние подчеркивания – они повышают удобочитаемость кода. Как правило, конструкции, являющиеся синтаксическим сахаром, на ранней стадии процесса компиляции заменяются на их базовые представления. Это называется «обессахариванием» кода.

Java – это не только язык программирования, но ещё и платформа, на которой могут работать другие языки, основанные на разных парадигмах программирования: одни из них функциональные, другие – декларативные и т.д. Кроме того, языки Jython и JRuby являются «портами», через которые другие языки могут работать на виртуальной машине Java. Существует много причин, по которым на JVM может потребоваться использовать не Java, а иной язык.

В 1998 г. Sun Microsystems создала Java Community Process – партнёрское сообщество (организация, программа) JCP. Это открытая организация, которая позволяет международному Java-сообществу, всем заинтересованным юридическим и физическим лицам, формализованным образом участвовать в разработке и развитии технологии Java, пересмотре её спецификаций и др. Процесс JCP предусматривает использование так называемых “запросов на спецификацию Java” (Java specification request, JSR), формальных документов, которые описывают проекты спецификаций и технологий, предлагаемых как дополнения к платформе Java. У сообщества есть свой веб-сайт (https://www.jcp.org/en/home/index), на котором публикуются новости, проводятся конкурсы на лучший проект и осуществляется другая деятельность.

Знаковое событие произошло в  2007 году: поняв все преимущества коллективной разработки OpenSource, корпорация Sun Microsystems публикует исходники своей JVM под названием OpenJDK и лицензией GPL-2.

Интересная деталь связана с появившимся сравнительно недавно языком Kotlin (Котлин). Это кроссплатформенный, статически строго типизированный ЯВУ общего назначения, предназначенный для взаимодействия с Java. Разработан петербургской компанией JetBrains под руководством выпускника Университета ИТМО Андрея Бреслава. Название язык получил в честь острова в Финском заливе, на котором расположен город Кронштадт. Версия его стандартной библиотеки для виртуальной машины Java (JVM) зависит от библиотеки классов Java. Синтаксис Kotlin более лаконичен, чем у Java. В мае 2019 года корпорация Google объявила, что язык Kotlin теперь является предпочтительным языком для разработчиков под ОС Android.

Фигура главного разработчика Java Джеймса Гослинга (James Gosling) весьма примечательна. Он родился 19 мая 1955 года, в городе Калгари, Канада. Джеймс с детства проявлял большой интерес к только начавшим развиваться в то время компьютерным технологиям. В 1977 году он со степенью бакалавра информатики окончил университет Калгари, а в 1983 году получил степень доктора в университете Карнеги-Меллон. Работая над своей докторской диссертацией университете Карнеги-Меллона, он написал версию текстового процессора emacs (gosmacs), а до того, как присоединиться к Sun Microsystems, он создал многопроцессорную версию Unix, а также несколько компиляторов и почтовых систем.

Он в 1984 году перешёл в Sun из исследовательского отдела IBM. Он разработал оригинальный дизайн Java и реализовал его компилятор и виртуальную машину. За это достижение он был избран членом Национальной инженерной академии США. Он также внёс большой вклад в несколько других программных систем, таких как NeWS и Gosling Emacs и др.

Гослинг проработал в Sun Microsystems целых 26 лет, но 2 апреля 2010 года уволился из Sun после того, как она была поглощена корпорацией Oracle. В качестве причины своего ухода Гослинг назвал «плохое отношение нового руководства к разработчикам Java».

С 28 марта 2011 года Джеймс Гослинг начал работать в корпорации Google. Он проработал там некоторое время, а позже присоединился к своему старому коллеге из Sun в стартапе под названием «Liquid Robotics». Через несколько лет Liquid Robotics была приобретена компанией Boeing. После этого Гослинг ушел из неё и с мая 2017 года начал работать в корпорации Amazon.

В 2007 году Гослинг был награждён Орденом Канады, высшей гражданской наградой Канады. В 2015 году ассоциация IEEE наградила его медалью фон Неймана.

Джеймс Гослинг, разработчик языка Java, о языке Си: «Люблю Си. Я очень долго профессионально работал на Си. Я перешел на Си, когда им ещё почти никто не пользовался. Первые компиляторы Си работали на машинах с 32K памяти и для программ, которые должны были выполняться в 32K памяти. Первые компиляторы Си были изумительны, но сейчас трудно найти даже наручные часы, где будет всего 32K памяти. На кредитной карточке памяти обычно больше 32K.

Если бы в Си была решена проблема строк, когда невозможно узнать длину строки, потому что она оканчивается нулем, у нас уже лет 40 назад мог появиться более быстрый Си. Раньше для меня это была наибольшая неприятность в Си.» (из книги «Пионеры программирования»).

Джеймс Гослинг, разработчик языка Java

Структура языка

Что следует помнить.

  1. Все имена чувствительны к регистру.

  2. Типы данных, ничем не отличаются от типов данных в процедурных ЯВУ, только отсутствуют беззнаковые типы unsigned и строки (тип String) могут быть любой длины, а одиночные символы (char) даются в кодировке Юникод. При этом переменные типа char выделяются одинарными кавычками, а типа String – двойными.

  3. Имя файла программы на Java должно полностью совпадать с именем класса. Не очень понятно это ограничение, но к нему легко привыкнуть.

  4. В Java диапазоны допустимых значений целочисленных типов не зависят от процессора, который исполняет программу, т. е. диапазоны допустимых значений для различных типов данных фиксированы. Это упрощает перенос программного обеспечения с одной платформы на другую.

Вот пример классической первой программы «Hello World!»

class Hello       // Имя программы объявляется после ключевого слова class

{           // Весь код программы будет помещен внутри этих фигурных скобок

           

public static void main ( String[] args)

{   // метод с именем main будет содержать все инструкции программы

// строка String[] args – служит для передачи параметров методу

System.out.println( "Hello World!"); // вывод строки на экран

{

}

}

 

Видно, что по сравнению с Python язык Java весьма многословен.

Пример конструкции case:

public void printDay(String dayOfWeek) {

switch (dayOfWeek) {

case "Monday": System.out.println("Понедельник"); break;

case "Tuesday": System.out.println("Вторник"); break;

case "Wednesday": System.out.println("Среда"); break;

case "Thursday": System.out.println("Четверг"); break;

case "Friday": System.out.println("Пятница"); break;

case "Saturday": System.out.println("Суббота "); break;

case "Sunday": System.out.println("Воскресенье "); break;

default: System.out.println("Error: " + dayOfWeek + " это не день недели "); break;

}

}

Значениями для условий, разумеется, могут быть не только строки, но также и константы простых типов byte, char, short и int.

Отмечу, что многие системы автоматического написания программ поддерживают и программирование на Java. Поскольку база исходных текстов программ на Java имеет уже гигантские размеры, то системы на искусственных нейронных сетях (ИНН) могут выполнять достаточно сложные задания. По некоторым оценкам стандартные программы до 600 предложений Java он генерируют вполне сносно. Разумеется, их работу необходимо тщательно проверять.

О языке Java можно писать бесконечно много, но, к счастью, литература по программированию на Java весьма обширна и разнообразна. Я легко нашёл в Интернете более полусотни разного рода бесплатных описаний Java, учебников и интерактивных уроков на русском и английском языках. Поэтому и не привожу здесь список литературы.

Об авторе: Директор Виртуального Компьютерного Музея
Помещена в музей с разрешения автора 27 апреля 2025