stringtranslate.com

Java (язык программирования)

Java — это высокоуровневый , основанный на классах , объектно-ориентированный язык программирования , который разработан так, чтобы иметь как можно меньше зависимостей от реализации . Это язык программирования общего назначения, предназначенный для того, чтобы позволить программистам писать один раз, запускать где угодно ( WORA ), [16] что означает, что скомпилированный код Java может работать на всех платформах, которые поддерживают Java, без необходимости перекомпиляции. [17] Приложения Java обычно компилируются в байт-код , который может работать на любой виртуальной машине Java (JVM) независимо от базовой архитектуры компьютера . Синтаксис Java похож на C и C++ , но имеет меньше низкоуровневых возможностей, чем любой из них. Среда выполнения Java предоставляет динамические возможности (такие как отражение и модификация кода во время выполнения), которые обычно недоступны в традиционных компилируемых языках.

Java приобрела популярность вскоре после своего выпуска и с тех пор является очень популярным языком программирования. [18] Java стала третьим по популярности языком программирования в 2022 году по данным GitHub . [19] Несмотря на то, что Java по-прежнему широко популярен, в последние годы наблюдается постепенный спад использования Java, в то время как другие языки, использующие JVM, набирают популярность. [20]

Java изначально была разработана Джеймсом Гослингом в Sun Microsystems . Она была выпущена в мае 1995 года как основной компонент платформы Java от Sun. Оригинальная и эталонная реализация компиляторов Java , виртуальных машин и библиотек классов изначально были выпущены Sun по проприетарным лицензиям . По состоянию на май 2007 года, в соответствии со спецификациями Java Community Process , Sun повторно лицензировала большинство своих технологий Java по лицензии GPL-2.0-only . Oracle предлагает собственную виртуальную машину Java HotSpot , однако официальной эталонной реализацией является OpenJDK JVM, которая является бесплатным программным обеспечением с открытым исходным кодом и используется большинством разработчиков, а также является JVM по умолчанию почти для всех дистрибутивов Linux.

По состоянию на сентябрь 2024 года Java 23 является последней версией (Java 22 и 20 больше не поддерживаются). Java 8, 11, 17 и 21 — предыдущие версии LTS, которые официально поддерживаются.

История

Дюк, талисман Явы
Джеймс Гослинг , создатель Java, в 2008 году

Джеймс Гослинг , Майк Шеридан и Патрик Нотон инициировали проект языка Java в июне 1991 года. [21] Первоначально Java был разработан для интерактивного телевидения, но в то время он был слишком продвинут для индустрии цифрового кабельного телевидения. [22] Первоначально язык назывался Oak в честь дуба , который рос снаружи офиса Гослинга. Позже проект получил название Green и был окончательно переименован в Java , от Java coffee , сорта кофе из Индонезии . [23] Гослинг разработал Java с синтаксисом в стиле C / C++ , который системные и прикладные программисты сочтут знакомым. [24]

Sun Microsystems выпустила первую публичную реализацию как Java 1.0 в 1996 году. [25] Она обещала функциональность write once, run anywhere (WORA), предоставляя бесплатные среды выполнения на популярных платформах . Достаточно безопасная и с настраиваемой безопасностью, она допускала ограничения доступа к сети и файлам. Основные веб-браузеры вскоре включили возможность запускать апплеты Java на веб-страницах, и Java быстро стала популярной. Компилятор Java 1.0 был переписан на Java Артуром ван Хоффом, чтобы строго соответствовать спецификации языка Java 1.0. [26] С появлением Java 2 (первоначально выпущенной как J2SE 1.2 в декабре 1998 - 1999) новые версии имели несколько конфигураций, созданных для разных типов платформ. J2EE включала технологии и API для корпоративных приложений, обычно запускаемых в серверных средах, в то время как J2ME включала API, оптимизированные для мобильных приложений. Настольная версия была переименована в J2SE. В 2006 году в маркетинговых целях Sun переименовала новые версии J2 в Java EE , Java ME и Java SE соответственно.

В 1997 году Sun Microsystems обратилась в комитет по стандартизации ISO/IEC JTC 1 , а позднее в Ecma International, с целью формализовать Java, но вскоре вышла из этого процесса. [27] [28] [29] Java остается фактическим стандартом , контролируемым Java Community Process . [30] В свое время Sun сделала большинство своих реализаций Java доступными бесплатно, несмотря на их статус проприетарного программного обеспечения . Sun получала доход от Java за счет продажи лицензий на специализированные продукты, такие как Java Enterprise System.

13 ноября 2006 года Sun выпустила большую часть своей виртуальной машины Java (JVM) как бесплатное и открытое программное обеспечение (FOSS) на условиях лицензии GPL-2.0-only . 8 мая 2007 года Sun завершила процесс, сделав весь основной код своей JVM доступным на условиях свободного программного обеспечения /распространения с открытым исходным кодом, за исключением небольшой части кода, на которую Sun не имела авторских прав. [31]

Вице-президент Sun Рич Грин сказал, что идеальная роль Sun в отношении Java — быть евангелистом . [32] После приобретения Oracle Corporation компании Sun Microsystems в 2009–2010 годах, Oracle описала себя как хранителя технологии Java с неустанной приверженностью содействию сообществу участия и прозрачности. [33] Это не помешало Oracle вскоре после этого подать иск против Google за использование Java внутри Android SDK (см. раздел Android ).

2 апреля 2010 года Джеймс Гослинг ушел из Oracle . [34]

В январе 2016 года Oracle объявила, что среды выполнения Java на основе JDK 9 прекратят поддержку плагина для браузера. [35]

Программное обеспечение Java работает на всех устройствах: от ноутбуков до центров обработки данных , игровых консолей и научных суперкомпьютеров . [36]

Oracle (и другие) настоятельно рекомендуют удалить устаревшие и неподдерживаемые версии Java из-за нерешенных проблем безопасности в старых версиях. [37]

Принципы

При создании языка Java преследовалось пять основных целей: [17]

  1. Он должен быть простым, объектно-ориентированным и знакомым.
  2. Он должен быть прочным и безопасным.
  3. Он должен быть архитектурно-нейтральным и переносимым.
  4. Он должен работать с высокой производительностью.
  5. Он должен быть интерпретируемым , потоковым и динамичным .

Версии

По состоянию на сентябрь 2023 года Java 8, 11, 17 и 21 поддерживаются как версии с долгосрочной поддержкой (LTS). [38]

Oracle выпустила последнее бесплатное публичное обновление для устаревшей версии Java 8 LTS в январе 2019 года для коммерческого использования, хотя в остальном она будет по-прежнему поддерживать Java 8 с публичными обновлениями для личного использования на неопределенный срок. Другие поставщики, такие как Adoptium, продолжают предлагать бесплатные сборки версий OpenJDK с долгосрочной поддержкой (LTS). Эти сборки могут включать дополнительные исправления безопасности и ошибки. [39]

Основные версии Java и даты их выпуска:

Издания

Sun определила и поддерживает четыре редакции Java, ориентированные на различные среды приложений, и сегментировала многие из своих API , чтобы они принадлежали к одной из платформ. Платформы:

Классы в API Java организованы в отдельные группы, называемые пакетами . Каждый пакет содержит набор связанных интерфейсов , классов, подпакетов и исключений .

Sun также представила версию под названием Personal Java , которая была заменена более поздними, основанными на стандартах парами конфигурации и профиля Java ME.

Система исполнения

Java JVM и байт-код

Одной из целей разработки Java является переносимость , что означает, что программы, написанные для платформы Java, должны работать одинаково на любой комбинации оборудования и операционной системы с адекватной поддержкой времени выполнения. Это достигается путем компиляции кода языка Java в промежуточное представление, называемое байт-кодом Java , а не напрямую в машинный код , специфичный для архитектуры . Инструкции байт-кода Java аналогичны машинному коду, но они предназначены для выполнения виртуальной машиной (VM), написанной специально для оборудования хоста. Конечные пользователи обычно используют Java Runtime Environment (JRE), установленную на их устройстве для автономных приложений Java, или веб-браузер для апплетов Java .

Стандартные библиотеки предоставляют универсальный способ доступа к специфичным для хоста функциям, таким как графика, потоки и сетевые функции .

Использование универсального байт-кода упрощает портирование. Однако накладные расходы на интерпретацию байт-кода в машинные инструкции делали интерпретируемые программы почти всегда более медленными, чем собственные исполняемые файлы . Компиляторы Just-in-time (JIT), которые компилируют байт-коды в машинный код во время выполнения, были введены на ранней стадии. Компилятор Java Hotspot на самом деле представляет собой два компилятора в одном; и с GraalVM (включенным, например, в Java 11, но удаленным с Java 16) допускает многоуровневую компиляцию. [48] Сама Java не зависит от платформы и адаптируется к конкретной платформе, на которой она должна работать, с помощью виртуальной машины Java (JVM), которая транслирует байт-код Java в машинный язык платформы. [49]

Производительность

Программы, написанные на Java, имеют репутацию более медленных и требующих больше памяти, чем программы, написанные на C++ . [50] [51] Однако скорость выполнения программ на Java значительно возросла с введением компиляции «на лету» в 1997/1998 годах для Java 1.1 , [52] добавлением языковых функций, поддерживающих лучший анализ кода (таких как внутренние классы, класс StringBuilder, необязательные утверждения и т. д.), и оптимизаций в виртуальной машине Java, таких как HotSpot, ставший JVM по умолчанию от Sun в 2000 году. С Java 1.5 производительность была улучшена с добавлением пакета java.util.concurrent, включая реализации ConcurrentMaps и других многоядерных коллекций без блокировок , и она была улучшена еще больше с Java 1.6.

Не-JVM

Некоторые платформы предлагают прямую аппаратную поддержку Java; существуют микроконтроллеры, которые могут запускать байт-код Java на аппаратном уровне вместо программной виртуальной машины Java, [53] а некоторые процессоры на базе ARM могут иметь аппаратную поддержку для выполнения байт-кода Java через опцию Jazelle , хотя поддержка в большинстве случаев была прекращена в текущих реализациях ARM.

Автоматическое управление памятью

Java использует автоматический сборщик мусора для управления памятью в жизненном цикле объекта . Программист определяет, когда создаются объекты, а среда выполнения Java отвечает за восстановление памяти, когда объекты больше не используются. Как только не остается ссылок на объект, недоступная память становится доступной для автоматического освобождения сборщиком мусора. Что-то похожее на утечку памяти все еще может произойти, если код программиста содержит ссылку на объект, который больше не нужен, как правило, когда объекты, которые больше не нужны, хранятся в контейнерах, которые все еще используются. [54] Если вызываются методы для несуществующего объекта, выдается исключение нулевого указателя . [55] [56]

Одна из идей, лежащих в основе модели автоматического управления памятью Java, заключается в том, что программисты могут быть избавлены от необходимости выполнять ручное управление памятью. В некоторых языках память для создания объектов неявно выделяется в стеке или явно выделяется и освобождается из кучи . В последнем случае ответственность за управление памятью лежит на программисте. Если программа не освобождает объект, происходит утечка памяти . [54] Если программа пытается получить доступ или освободить память, которая уже была освобождена, результат неопределен и трудно предсказуем, и программа, скорее всего, станет нестабильной или аварийно завершится. Это можно частично исправить с помощью интеллектуальных указателей , но они добавляют накладные расходы и сложность. Сборка мусора не предотвращает логические утечки памяти , то есть те, когда память все еще используется, но никогда не используется. [54]

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

Java не поддерживает арифметику указателей в стиле C/C++ , где адреса объектов могут быть арифметически изменены (например, путем добавления или вычитания смещения). Это позволяет сборщику мусора перемещать ссылочные объекты и обеспечивает безопасность и защищенность типов.

Как и в C++ и некоторых других объектно-ориентированных языках, переменные примитивных типов данных Java хранятся либо непосредственно в полях (для объектов), либо в стеке (для методов), а не в куче, как это обычно бывает с непримитивными типами данных (но см. анализ выхода ). Это было осознанное решение разработчиков Java из соображений производительности.

Java содержит несколько типов сборщиков мусора. Начиная с Java 9, HotSpot использует Garbage First Garbage Collector (G1GC) по умолчанию. [57] Однако есть также несколько других сборщиков мусора, которые можно использовать для управления кучей. Для большинства приложений на Java достаточно G1GC. Ранее в Java 8 использовался Parallel Garbage Collector.

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

Синтаксис

Этот график зависимостей классов Java Core был создан с помощью jdeps и Gephi .

Синтаксис Java во многом сформирован под влиянием C++ и C. В отличие от C++, который объединяет синтаксис структурированного, обобщенного и объектно-ориентированного программирования, Java был создан почти исключительно как объектно-ориентированный язык. [17] Весь код написан внутри классов, и каждый элемент данных является объектом, за исключением примитивных типов данных (т. е. целых чисел, чисел с плавающей точкой, логических значений и символов), которые не являются объектами по соображениям производительности. Java повторно использует некоторые популярные аспекты C++ (например, printfметод ).

В отличие от C++, Java не поддерживает перегрузку операторов [58] или множественное наследование для классов, хотя множественное наследование поддерживается для интерфейсов . [59]

Java использует комментарии, похожие на комментарии C++. Существует три различных стиля комментариев: однострочный стиль, отмеченный двумя косыми чертами ( //), многострочный стиль, открывающийся /*и закрывающийся */, и стиль комментариев Javadoc , открывающийся /**и закрывающийся */. Стиль комментариев Javadoc позволяет пользователю запускать исполняемый файл Javadoc для создания документации к программе и может быть прочитан некоторыми интегрированными средами разработки (IDE), такими как Eclipse, чтобы позволить разработчикам получать доступ к документации в IDE.

Привет, мир

Ниже приведен простой пример программы «Hello, World!» , которая записывает сообщение в стандартный вывод :

Пример открытого класса {    public static void main ( string [] args ) {      System.out.println ( " Привет , мир! " ) ; }}

Специальные классы

Апплет

Java-апплеты — это программы, встроенные в другие приложения, обычно в веб-страницу, отображаемую в веб-браузере. API Java-апплета теперь устарело с Java 9 в 2017 году. [60] [61]

Сервлет

Технология сервлетов Java предоставляет веб-разработчикам простой и последовательный механизм для расширения функциональности веб-сервера и доступа к существующим бизнес-системам. Сервлеты — это серверные компоненты Java EE, которые генерируют ответы на запросы клиентов . В большинстве случаев это означает генерацию HTML- страниц в ответ на HTTP- запросы, хотя существует ряд других стандартных классов сервлетов, например, для связи WebSocket .

API сервлетов Java в некоторой степени был заменен (но все еще используется в недрах Интернета) двумя стандартными технологиями Java для веб-сервисов:

Типичные реализации этих API на серверах приложений или контейнерах сервлетов используют стандартный сервлет для обработки всех взаимодействий с HTTP- запросами и ответами, которые делегируют методы веб-службы для фактической бизнес-логики.

Страницы JavaServer

JavaServer Pages ( JSP ) — это серверные компоненты Java EE, которые генерируют ответы, обычно HTML- страницы, на HTTP- запросы от клиентов . JSP встраивают код Java в HTML-страницу с помощью специальных разделителей <% и %>. JSP компилируется в сервлет Java , приложение Java само по себе, при первом доступе к нему. После этого сгенерированный сервлет создает ответ. [62]

Качающееся приложение

Swing — это библиотека графического пользовательского интерфейса для платформы Java SE. Можно указать другой внешний вид и поведение с помощью подключаемой системы внешнего вида и поведения Swing. Клоны Windows , GTK+ и Motif поставляются Sun. Apple также предоставляет внешний вид и поведение Aqua для macOS . В то время как предыдущие реализации этих внешних видов и поведения могли считаться недостаточными, Swing в Java SE 6 решает эту проблему, используя более собственные процедуры отрисовки виджетов GUI базовых платформ. [63]

Приложение JavaFX

JavaFX — это программная платформа для создания и доставки настольных приложений , а также многофункциональных веб-приложений , которые могут работать на самых разных устройствах. JavaFX предназначена для замены Swing в качестве стандартной библиотеки GUI для Java SE , но с JDK 11 JavaFX не входит в ядро ​​JDK, а вместо этого находится в отдельном модуле. [64] JavaFX поддерживает настольные компьютеры и веб-браузеры в Microsoft Windows , Linux и macOS . JavaFX не поддерживает собственный внешний вид и поведение ОС. [65]

Дженерики

В 2004 году в язык Java были добавлены обобщенные типы как часть J2SE 5.0. До введения обобщенных типов каждое объявление переменной должно было быть определенного типа. Например, для классов контейнеров это проблема, поскольку нет простого способа создать контейнер, который принимает только определенные типы объектов. Либо контейнер работает со всеми подтипами класса или интерфейса, обычно Object, либо для каждого содержащегося класса необходимо создать другой класс контейнера. Обобщенные типы позволяют выполнять проверку типов во время компиляции без необходимости создания множества классов контейнеров, каждый из которых содержит почти идентичный код. Помимо включения более эффективного кода, некоторые исключения времени выполнения предотвращаются путем выдачи ошибок времени компиляции. Если бы Java предотвращала ClassCastExceptionвозникновение всех ошибок типа времени выполнения ( s), это было бы типобезопасно .

В 2016 году система типов Java была признана несостоятельной , поскольку стало возможным использовать обобщения для создания классов и методов, которые позволяют назначать экземпляр одного класса переменной другого неродственного класса. Такой код принимается компилятором, но во время выполнения выдает исключение приведения класса. [66]

Критика

Критика, направленная на Java, включает реализацию дженериков, [67] скорость, [50] обработку беззнаковых чисел, [68] реализацию арифметики с плавающей точкой, [69] и историю уязвимостей безопасности в основной реализации Java VM HotSpot . [70] Разработчики критиковали сложность и многословность Java Persistence API (JPA), стандартной части Java EE. Это привело к более широкому принятию абстракций более высокого уровня, таких как Spring Data JPA, которая направлена ​​на упрощение операций с базами данных и сокращение шаблонного кода. Растущая популярность таких фреймворков предполагает ограничения в простоте использования стандартной реализации JPA для современной разработки Java. [71]

Библиотеки классов

Библиотека классов Java — это стандартная библиотека , разработанная для поддержки разработки приложений на Java. Она контролируется Oracle совместно с другими через программу Java Community Process . [72] Компании или отдельные лица, участвующие в этом процессе, могут влиять на проектирование и разработку API. Этот процесс был предметом споров в 2010-х годах. [73] Библиотека классов содержит такие функции, как:

Документация

Javadoc — это комплексная система документирования, созданная Sun Microsystems . Она предоставляет разработчикам организованную систему для документирования их кода. Комментарии Javadoc имеют дополнительную звездочку в начале, то есть разделителями являются /**и */, тогда как обычные многострочные комментарии в Java разделяются /*и */, а однострочные комментарии начинаются с //. [81]

Реализации

Корпорация Oracle владеет официальной реализацией платформы Java SE в связи с приобретением ею Sun Microsystems 27 января 2010 года. Эта реализация основана на оригинальной реализации Java от Sun. Реализация Oracle доступна для Windows , macOS , Linux и Solaris . Поскольку Java не имеет какой-либо формальной стандартизации, признанной Ecma International , ISO/IEC, ANSI или другими сторонними организациями по стандартизации, реализация Oracle является стандартом де-факто .

Реализация Oracle упакована в два различных дистрибутива: Java Runtime Environment (JRE), который содержит части платформы Java SE, необходимые для запуска программ Java, и предназначен для конечных пользователей, и Java Development Kit (JDK), который предназначен для разработчиков программного обеспечения и включает в себя инструменты разработки, такие как компилятор Java , Javadoc , Jar и отладчик . Oracle также выпустила GraalVM , высокопроизводительный динамический компилятор и интерпретатор Java.

OpenJDK — это еще одна реализация Java SE, которая лицензируется по GNU GPL. Реализация началась, когда Sun начала выпускать исходный код Java по GPL. Начиная с Java SE 7, OpenJDK является официальной эталонной реализацией Java.

Цель Java — сделать все реализации Java совместимыми. Исторически торговая марка Sun на использование бренда Java настаивает на том, что все реализации должны быть совместимы . Это привело к юридическому спору с Microsoft после того, как Sun заявила, что реализация Microsoft не поддерживает удаленный вызов методов Java (RMI) или Java Native Interface (JNI) и добавила собственные платформенно-специфичные функции. Sun подала в суд в 1997 году и в 2001 году выиграла урегулирование в размере 20 миллионов долларов США, а также судебное постановление, принуждающее Sun к соблюдению условий лицензии. [82] В результате Microsoft больше не поставляет Java с Windows .

Платформенно-независимая Java имеет важное значение для Java EE , и для сертификации реализации требуется еще более строгая проверка. Эта среда позволяет использовать переносимые серверные приложения.

Использование вне платформы Java

Для выполнения скомпилированных программ язык программирования Java требует наличия программной платформы.

Oracle поставляет платформу Java для использования с Java. Android SDK — это альтернативная программная платформа, используемая в основном для разработки приложений Android с собственной системой графического интерфейса.

андроид

Язык Java является ключевым столпом Android , мобильной операционной системы с открытым исходным кодом . Хотя Android, построенный на ядре Linux , написан в основном на языке C, Android SDK использует язык Java в качестве основы для приложений Android, но не использует ни один из его стандартных GUI, SE, ME или других установленных стандартов Java. [83] Язык байт-кода, поддерживаемый Android SDK, несовместим с байт-кодом Java и работает на собственной виртуальной машине, оптимизированной для устройств с небольшим объемом памяти, таких как смартфоны и планшетные компьютеры . В зависимости от версии Android байт-код либо интерпретируется виртуальной машиной Dalvik , либо компилируется в машинный код средой выполнения Android .

Android не предоставляет полную стандартную библиотеку Java SE, хотя Android SDK включает независимую реализацию большого ее подмножества. Он поддерживает Java 6 и некоторые функции Java 7, предлагая реализацию, совместимую со стандартной библиотекой ( Apache Harmony ).

Противоречие

Использование технологий, связанных с Java, в Android привело к юридическому спору между Oracle и Google. 7 мая 2012 года присяжные Сан-Франциско постановили, что если API могут быть защищены авторским правом, то Google нарушила авторские права Oracle, используя Java в устройствах Android. [84] Окружной судья Уильям Олсап 31 мая 2012 года постановил, что API не могут быть защищены авторским правом, [85] но это решение было отменено Апелляционным судом США по федеральному округу в мае 2014 года. [86] 26 мая 2016 года окружной суд вынес решение в пользу Google, постановив, что нарушение авторских прав на Java API в Android представляет собой добросовестное использование. [87] В марте 2018 года это решение было отменено Апелляционным судом, который направил дело об определении ущерба в федеральный суд в Сан-Франциско. [88] Google подала ходатайство о выдаче судебного приказа в Верховный суд США в январе 2019 года, чтобы оспорить два решения, вынесенных Апелляционным судом в пользу Oracle. [89] 5 апреля 2021 года суд вынес решение 6–2 в пользу Google, что использование ею API Java следует считать добросовестным использованием . Однако суд отказался выносить решение о возможности защиты авторских прав на API, решив вместо этого определить свое решение, посчитав API Java защищенным авторским правом «исключительно ради аргумента». [90]

Смотрите также

Ссылки

  1. ^ Бинсток, Эндрю (20 мая 2015 г.). «Java's 20 Years of Innovation». Forbes . Архивировано из оригинала 14 марта 2016 г. Получено 18 марта 2016 г.
  2. ^ abcd Барбара Лисков с Джоном Гуттагом (2000). Разработка программ на Java – абстракция, спецификация и объектно-ориентированное проектирование . США, Addison Wesley. ISBN 978-0-201-65768-5.
  3. ^ Чаудхари, Гарри Х. (28 июля 2014 г.). «Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans». Архивировано из оригинала 29 сентября 2023 г. Получено 29 мая 2016 г.
  4. ^ Java 5.0 добавила несколько новых языковых возможностей ( расширенный цикл for , автоупаковка , переменные аргументы и аннотации ) после того, как они были введены в похожем (и конкурирующем) языке C# . [1] Архивировано 19 марта 2011 г. на Wayback Machine [2] Архивировано 7 января 2006 г. на Wayback Machine
  5. Гослинг, Джеймс; Макгилтон, Генри (май 1996). «Языковая среда Java». Архивировано из оригинала 6 мая 2014 г. Получено 6 мая 2014 г.
  6. Гослинг, Джеймс; Джой, Билл; Стил, Гай; Браха, Гилад. «Спецификация языка Java, 2-е издание». Архивировано из оригинала 5 августа 2011 г. Получено 8 февраля 2008 г.
  7. ^ "Языки программирования от AZ: Modula-3". Computerworld. Архивировано из оригинала 5 января 2009 г. Получено 9 июня 2010 г.
  8. ^ Никлаус Вирт заявлял об этом на ряде публичных мероприятий, например, на лекции в Политехническом музее в Москве в сентябре 2005 г. (существует несколько независимых свидетельств очевидцев на русском языке, например, одно с аудиозаписью: Филиппова, Елена (22 сентября 2005 г.). «Лекция Никлауса Вирта в Политехническом музее в Москве». Архивировано из оригинала 1 декабря 2020 г. . Получено 20 ноября 2011 г. .), что команда разработчиков Sun Java лицензировала исходные коды компилятора Oberon за несколько лет до выпуска Java и изучила их: (относительная) компактность, безопасность типов, сборка мусора, отсутствие множественного наследования для классов — все эти ключевые общие особенности дизайна являются общими для Java и Oberon.
  9. ^ Патрик Нотон называет Objective-C языком, оказавшим сильное влияние на разработку языка программирования Java, отмечая, что его заметными прямыми производными являются интерфейсы Java (производные от протокола Objective-C ) и примитивные классы-оболочки. [3] Архивировано 13 июля 2011 г. на Wayback Machine
  10. ^ TechMetrix Research (1999). "История Java" (PDF) . Отчет о серверах приложений Java . Архивировано из оригинала (PDF) 29 декабря 2010 года. Проект продолжался под названием green , а язык был основан на старой модели UCSD Pascal , что позволяет генерировать интерпретируемый код.
  11. ^ «Беседа с Джеймсом Гослингом – ACM Queue». Queue.acm.org. 31 августа 2004 г. Архивировано из оригинала 16 июля 2015 г. Получено 9 июня 2010 г.
  12. ^ Команда Java Language. О «делегатах» Microsoft (White Paper). JavaSoft, Sun Microsystems, Inc. Архивировано из оригинала 27 июня 2012 г. Летом 1996 г. Sun разрабатывала предшественника того, что сейчас является моделью событий AWT и компонентной архитектурой JavaBeans. Borland внесла большой вклад в этот процесс. Мы очень внимательно изучили Delphi Object Pascal и построили рабочий прототип ссылок на связанные методы, чтобы понять их взаимодействие с языком программирования Java и его API.
  13. ^ "Chapel spec (Благодарности)" (PDF) . Cray Inc. 1 октября 2015 г. Архивировано (PDF) из оригинала 5 февраля 2016 г. Получено 14 января 2016 г.
  14. ^ "Введение в документацию Gambas". Веб-сайт Gambas. Архивировано из оригинала 9 октября 2017 г. Получено 9 октября 2017 г.
  15. ^ "Facebook Q&A: Hack приносит статическую типизацию в мир PHP". InfoWorld . 26 марта 2014 г. Архивировано из оригинала 13 февраля 2015 г. Получено 11 января 2015 г.
  16. ^ «Напиши один раз, запусти куда угодно?». Computer Weekly . 2 мая 2002 г. Архивировано из оригинала 13 августа 2021 г. Получено 27 июля 2009 г.
  17. ^ abc "1.2 Цели проектирования языка программирования Java". Oracle. 1 января 1999 г. Архивировано из оригинала 23 января 2013 г. Получено 14 января 2013 г.
  18. ^ Мелансон, Майк (9 августа 2022 г.). «Не называйте это возвращением: почему Java все еще чемпион». GitHub . Архивировано из оригинала 25 августа 2023 г. Получено 15 октября 2023 г.
  19. ^ "The top programming languages". The State of the Octoverse . GitHub . Архивировано из оригинала 2 августа 2023 г. Получено 15 октября 2023 г.
  20. ^ Макмиллан, Роберт (1 августа 2013 г.). «Java теряет свою харизму?» . Wired . Архивировано из оригинала 15 февраля 2017 г. Получено 15 октября 2023 г.
  21. ^ Байос, Джон (ок. 1998). "Java technology: The early years". Sun Developer Network . Sun Microsystems . Архивировано из оригинала 20 апреля 2005 г. Получено 22 апреля 2005 г.
  22. ^ Объектно-ориентированное программирование "История технологии Java". Sun Developer Network . c. 1995. Архивировано из оригинала 10 февраля 2010 г. Получено 30 апреля 2010 г.
  23. ^ Мерфи, Кирон (4 октября 1996 г.). «Так почему же они решили назвать его Java?». JavaWorld . Архивировано из оригинала 13 июля 2020 г. Получено 13 июля 2020 г.
  24. Kabutz, Heinz; Once Upon an Oak. Архивировано 13 апреля 2007 г. на Wayback Machine . Artima. Получено 29 апреля 2007 г.
  25. ^ "JAVASOFT SHIPS JAVA 1.0". Архивировано из оригинала 10 марта 2007 г. Получено 13 мая 2018 г.
  26. ^ Объектно-ориентированное программирование на Java: основы и приложения. Tata McGraw-Hill Education. стр. 34.
  27. ^ "JSG – Java Study Group". open-std.org . Архивировано из оригинала 25 августа 2006 г. Получено 2 августа 2006 г.
  28. ^ «Почему Java не была – стандартизирована – дважды» (PDF) . Архивировано (PDF) из оригинала 13 января 2014 г. . Получено 3 июня 2018 г. .
  29. ^ "Что такое ECMA — и почему это волнует Microsoft". ZDNet . Архивировано из оригинала 6 мая 2014 г. Получено 6 мая 2014 г.
  30. ^ "Java Community Process website". Jcp.org. 24 мая 2010 г. Архивировано из оригинала 8 августа 2006 г. Получено 9 июня 2010 г.
  31. ^ "JAVAONE: Sun – Основная часть Java имеет открытый исходный код". GrnLight.net. Архивировано из оригинала 27 мая 2014 г. Получено 26 мая 2014 г.
  32. ^ "Развивающаяся роль Sun как Java Evangelist". O'Reilly Media . Архивировано из оригинала 15 сентября 2010 г. Получено 2 августа 2009 г.
  33. ^ "Oracle и Java". oracle.com . Корпорация Oracle. Архивировано из оригинала 31 января 2010 г. Получено 23 августа 2010 г. Oracle является ведущим и значимым сторонником Java с момента ее появления в 1995 г. и берет на себя новую роль распорядителя технологии Java с неустанной приверженностью содействию сообществу участия и прозрачности.
  34. Гослинг, Джеймс (9 апреля 2010 г.). «Время двигаться дальше...» На новой дороге . Архивировано из оригинала 5 ноября 2010 г. Получено 16 ноября 2011 г.
  35. ^ Тема, Dalibor. "Переход на веб без плагинов". Архивировано из оригинала 16 марта 2016 г. Получено 15 марта 2016 г.
  36. ^ "Learn About Java Technology". Oracle. Архивировано из оригинала 24 ноября 2011 г. Получено 21 ноября 2011 г.
  37. ^ «Почему мне следует удалить старые версии Java из моей системы?». Oracle. Архивировано из оригинала 12 февраля 2018 г. Получено 24 сентября 2021 г.
  38. ^ "Oracle Java SE Support Roadmap". Oracle. 13 сентября 2021 г. Архивировано из оригинала 19 сентября 2021 г. Получено 18 сентября 2021 г.
  39. ^ "Temurin™ Support; Adoptium". admitium.net . Архивировано из оригинала 29 марта 2024 г. . Получено 29 марта 2024 г. .
  40. ^ "JAVASOFT SHIPS JAVA 1.0". sun.com . Архивировано из оригинала 10 марта 2007 г. Получено 5 февраля 2008 г.
  41. ^ Чандер, Шарат. «Введение в Java SE 11». oracle.com . Архивировано из оригинала 26 сентября 2018 г. . Получено 26 сентября 2018 г. .
  42. ^ "The Arrival of Java 15!". Oracle . 15 сентября 2020 г. Архивировано из оригинала 16 сентября 2020 г. Получено 15 сентября 2020 г.
  43. ^ "JDK 21". openjdk.org . Архивировано из оригинала 20 сентября 2023 г. . Получено 20 сентября 2023 г. .
  44. ^ "Обзор Java Card". Oracle Technology Network . Oracle. Архивировано из оригинала 7 января 2015 г. Получено 18 декабря 2014 г.
  45. ^ "Java Platform, Micro Edition (Java ME)". Oracle Technology Network . Oracle. Архивировано из оригинала 4 января 2015 г. Получено 18 декабря 2014 г.
  46. ^ "Java SE". Oracle Technology Network . Oracle. Архивировано из оригинала 24 декабря 2014 г. Получено 18 декабря 2014 г.
  47. ^ "Java Platform, Enterprise Edition (Java EE)". Oracle Technology Network . Oracle. Архивировано из оригинала 17 декабря 2014 г. Получено 18 декабря 2014 г.
  48. ^ «Глубокое погружение в новый компилятор Java JIT – Graal | Baeldung». www.baeldung.com . 6 августа 2021 г. Архивировано из оригинала 28 октября 2021 г. Получено 13 октября 2021 г.
  49. ^ «Зависит ли JVM (виртуальная машина Java) от платформы или нет? В чем преимущество использования JVM и перевода Java на другой язык?». Интервью с программистом. Архивировано из оригинала 19 января 2015 г. Получено 19 января 2015 г.
  50. ^ ab Jelovic, Dejan. "Почему Java всегда будет медленнее C++". Архивировано из оригинала 11 февраля 2008 г. Получено 15 февраля 2008 г.
  51. ^ Хундт, Роберт. "Распознавание циклов в C++/Java/Go/Scala" (PDF) . Архивировано (PDF) из оригинала 16 ноября 2011 г. . Получено 12 июля 2012 г. .
  52. ^ "Just-In-Time Java Compiler от Symantec будет интегрирован в Sun JDK 1.1". Архивировано из оригинала 28 июня 2010 г. Получено 1 августа 2009 г.
  53. ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22 июля 2017 г.). «Noc-HMP: гетерогенный многоядерный процессор для встраиваемых систем, разработанных в SystemJ». ACM Transactions on Design Automation of Electronic Systems . 22 (4): 73. doi : 10.1145/3073416. ISSN  1084-4309. S2CID  11150290.
  54. ^ abc Bloch 2018, стр. 26-28, §Пункт 7: Устраните устаревшие ссылки на объекты.
  55. ^ "NullPointerException". Oracle. Архивировано из оригинала 6 мая 2014 г. Получено 6 мая 2014 г.
  56. ^ "Исключения в Java". Artima.com. Архивировано из оригинала 21 января 2009 г. Получено 10 августа 2010 г.
  57. ^ "Java HotSpot™ Virtual Machine Performance Enhancements". Oracle.com. Архивировано из оригинала 29 мая 2017 г. Получено 26 апреля 2017 г.
  58. ^ "Перегрузка операторов (C# против Java)". C# для разработчиков Java . Microsoft. Архивировано из оригинала 7 января 2015 г. Получено 10 декабря 2014 г.
  59. ^ "Множественное наследование состояния, реализации и типа". Учебники Java . Oracle. Архивировано из оригинала 9 ноября 2014 г. Получено 10 декабря 2014 г.
  60. ^ "Устаревшие API, функции и параметры". Oracle. Архивировано из оригинала 19 июня 2019 г. Получено 31 мая 2019 г.
  61. ^ "Applet (Java Platform SE 7)". Документы . Oracle. Архивировано из оригинала 2 августа 2020 г. Получено 1 мая 2020 г.
  62. ^ "Что такое страница JSP? - Учебное пособие по Java EE 5". docs.oracle.com . Архивировано из оригинала 2 августа 2020 г. . Получено 1 мая 2020 г. .
  63. ^ "Trail: Creating a GUI With JFC/Swing (The Java Tutorials)". docs.oracle.com . Архивировано из оригинала 29 апреля 2020 г. . Получено 1 мая 2020 г. .
  64. ^ "Удален из JDK 11, JavaFX 11 поставляется как отдельный модуль". InfoWorld . 20 сентября 2018 г. Архивировано из оригинала 14 октября 2020 г. Получено 13 октября 2020 г.
  65. ^ "Начало работы с JavaFX: Hello World, JavaFX Style". Учебники и документация по JavaFX 2. Oracle. Архивировано из оригинала 2 августа 2020 г. Получено 1 мая 2020 г.
  66. ^ "Java and Scala's Type Systems are Unsound" (PDF) . Архивировано (PDF) из оригинала 28 ноября 2016 г. . Получено 20 февраля 2017 г. .
  67. ^ Арнольд, Кен (27 июня 2005 г.). «Дженерик считается вредным». java.net. Архивировано из оригинала 10 октября 2007 г. Получено 10 сентября 2015 г.
  68. ^ Оуэнс, Шон Р. "Java и беззнаковые целые, беззнаковые короткие, беззнаковые байты, беззнаковые длинные и т. д. (Или, скорее, отсутствие таковых)". Архивировано из оригинала 20 февраля 2009 г. Получено 4 июля 2011 г.
  69. ^ Кахан, Уильям (1 марта 1998 г.). «Как плавающая точка Java наносит вред всем и везде – ACM 1998 Workshop on Java (Стэнфорд)» (PDF) . Электротехника и компьютерные науки, Калифорнийский университет в Беркли. Архивировано (PDF) из оригинала 5 сентября 2012 г. . Получено 4 июня 2011 г. .
  70. ^ "Вы проверили Java?". Архивировано из оригинала 21 сентября 2012 г. Получено 23 декабря 2011 г.
  71. ^ Чидестер, Эслан. Java Persistence API, Jenkins и AWS. ISBN 9798224253951. Получено 16 сентября 2024 г. .
  72. Cadenhead, Rogers (20 ноября 2017 г.), Understanding How Java Programs Work, архивировано из оригинала 13 августа 2021 г. , извлечено 26 марта 2019 г.
  73. ^ Вульф, Ники (26 мая 2016 г.). «Google выигрывает шестилетнюю юридическую битву с Oracle по поводу авторских прав на код Android». The Guardian . ISSN  0261-3077. Архивировано из оригинала 26 марта 2019 г. Получено 26 марта 2019 г.
  74. ^ ab Bloch 2018, стр. 1–4, § 1 Введение.
  75. ^ "java.nio (платформа Java SE 8)" . docs.oracle.com .
  76. ^ "Сетевые технологии Java". docs.oracle.com .
  77. ^ "HttpClient (Java SE 11 и JDK 11)". docs.oracle.com .
  78. ^ "Обзор фреймворка коллекций". Документация Java . Oracle. Архивировано из оригинала 31 декабря 2014 г. Получено 18 декабря 2014 г.
  79. ^ "Обзор безопасности Java". Документация Java . Oracle. Архивировано из оригинала 3 января 2015 г. Получено 18 декабря 2014 г.
  80. ^ "Trail: Internationalization". The Java Tutorials . Oracle. Архивировано из оригинала 31 декабря 2014 г. Получено 18 декабря 2014 г.
  81. ^ "Как писать комментарии к документам для инструмента Javadoc". Oracle Technology Network . Oracle. Архивировано из оригинала 18 декабря 2014 г. Получено 18 декабря 2014 г.
  82. Niccolai, James (24 января 2001 г.). «Sun, Microsoft урегулировали иск по Java». JavaWorld . IDG News Service . Архивировано из оригинала 14 июля 2020 г. . Получено 13 июля 2020 г. .
  83. ^ van Gurp, Jilles (13 ноября 2007 г.). "Google Android: начальные впечатления и критика". Javalobby . Архивировано из оригинала 28 августа 2008 г. Получено 7 марта 2009 г. Честно говоря, я не понимаю, почему Google намерен игнорировать огромное количество существующих реализаций. Мне это кажется плохим случаем "не изобретено здесь". В конечном итоге это замедлит принятие. Для мобильного мира уже слишком много платформ Java, и это еще одна
  84. ^ Маллин, Джо (7 мая 2012 г.). «Google виновна в нарушении авторских прав в суде над Oracle; грядут юридические проблемы». Закон и беспорядок . Ars Technica. Архивировано из оригинала 8 мая 2012 г. Получено 8 мая 2012 г.
  85. ^ Маллин, Джо (31 мая 2012 г.). «Google выигрывает решающее решение по API, дело Oracle разгромлено». Ars Technica . Архивировано из оригинала 12 марта 2017 г. Получено 1 июня 2012 г.
  86. ^ Розенблатт, Сет (9 мая 2014 г.). «Суд встал на сторону Oracle по поводу Android в апелляции по патенту Java». CNET . Архивировано из оригинала 10 мая 2014 г. Получено 10 мая 2014 г.
  87. ^ Маллин, Джо (26 мая 2016 г.). «Google побеждает Oracle — Android «честно использует» API Java». Ars Technica . Архивировано из оригинала 20 января 2017 г. . Получено 26 мая 2016 г. .
  88. ^ Фаривар, Сайрус (27 марта 2018 г.). ««Использование Google пакетов API Java было несправедливым», — постановил апелляционный суд». Ars Technica . Архивировано из оригинала 24 сентября 2019 г. . Получено 6 августа 2019 г. .
  89. ^ Ли, Тимоти (23 апреля 2019 г.). «Google просит Верховный суд отменить катастрофическое решение об авторских правах API». Ars Technica . Архивировано из оригинала 23 апреля 2019 г. Получено 23 апреля 2019 г.
  90. ^ "Google LLC против Oracle America, Inc 593 US ____ (2021)" (PDF) . Архивировано (PDF) из оригинала 5 апреля 2021 г. . Получено 6 апреля 2021 г. .

Библиография

Внешние ссылки