Jump to content

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

Страница полузащищена

Ява
Парадигма Мультипарадигмальность : универсальная , объектно-ориентированная ( на основе классов ), функциональная , императивная , рефлексивная , параллельная.
Разработано Джеймс Гослинг
Разработчик Корпорация Oracle
Впервые появился 23 мая 1995 г .; 29 лет назад ( 1995-05-23 ) [ 1 ]
Дисциплина набора текста Статический, сильный, безопасный , номинативный , манифестный
Управление памятью Автоматический сбор мусора
Расширения имен файлов .java, .класс , .jar , .jmod
Веб-сайт
Под влиянием
КЛУ , [ 2 ] Симула67 , [ 2 ] Лисп , [ 2 ] Смолток , [ 2 ] Есть 83 , C++ , [ 3 ] С# , [ 4 ] Эйфель , [ 5 ] Меса , [ 6 ] Модуль-3 , [ 7 ] Оберон , [ 8 ] Цель-С , [ 9 ] UCSD Паскаль , [ 10 ] [ 11 ] Объектный Паскаль [ 12 ]
Под влиянием
Ада 2005 , BeanShell , C# , Chapel , [ 13 ] Clojure , ECMAScript , Fantom , Gambas , [ 14 ] Крути , Хак , [ 15 ] Haxe , J# , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript , JS++ , ArkTS

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

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

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

По состоянию на март 2024 г. , Java 22 — последняя версия. Java 8, 11, 17 и 21 — предыдущие версии LTS, которые до сих пор официально поддерживаются.

История

Герцог, талисман Явы
Джеймс Гослинг , создатель Java, 2008 год.

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

Sun Microsystems выпустила первую общедоступную реализацию Java 1.0 в 1996 году. [ 25 ] Он обещал функциональность «напиши один раз, запускай где угодно » (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 . [ 30 ] В свое время Sun предоставила бесплатный доступ к большинству своих реализаций Java, несмотря на статус их проприетарного программного обеспечения . Sun получала доход от Java за счет продажи лицензий на специализированные продукты, такие как Java Enterprise System.

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

Вице-президент Sun Рич Грин сказал, что идеальная роль Sun в отношении Java — роль евангелиста . [ 32 ] После приобретения корпорацией Oracle компании 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 с указанием дат их выпуска:

Версия Дата
JDK- бета 1995
JDK 1.0 23 января 1996 г. [ 40 ]
JDK 1.1 19 февраля 1997 г.
J2SE 1.2 8 декабря 1998 г.
J2SE 1.3 8 мая 2000 г.
J2SE 1.4 6 февраля 2002 г.
J2SE 5.0 30 сентября 2004 г.
Ява ЮВ 6 11 декабря 2006 г.
Ява ЮВ 7 28 июля 2011 г.
Java SE 8 (ЛТС) 18 марта 2014 г.
Ява ЮВ 9 21 сентября 2017 г.
Ява ЮВ 10 20 марта 2018 г.
Java SE 11 (LTS) 25 сентября 2018 г. [ 41 ]
Ява ЮВ 12 19 марта 2019 г.
Ява ЮВ 13 17 сентября 2019 г.
Ява ЮВ 14 17 марта 2020 г.
Ява SE 15 15 сентября 2020 г. [ 42 ]
Ява SE 16 16 марта 2021 г.
Java SE 17 (LTS) 14 сентября 2021 г.
Ява SE 18 22 марта 2022 г.
Ява SE 19 20 сентября 2022 г.
Ява SE 20 21 марта 2023 г.
Java SE 21 (LTS) 19 сентября 2023 г. [ 43 ]
Ява ЮВ 22 19 марта 2024 г.

Издания

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

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

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

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

Java JVM и байт-код

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

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

Использование универсального байт-кода упрощает портирование. Однако из-за накладных расходов на интерпретацию байт-кода в машинные инструкции интерпретируемые программы почти всегда работали медленнее, чем собственные исполняемые файлы . 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++ , где адресами объектов можно арифметически манипулировать (например, путем добавления или вычитания смещения). Это позволяет сборщику мусора перемещать объекты, на которые имеются ссылки, и обеспечивает безопасность и безопасность типов.

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

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

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

Синтаксис

Этот граф зависимостей классов 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.

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

Апплет

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

Сервлет

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

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

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

Страницы Java-сервера

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

Приложение Swing

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

JavaFX-приложение

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

Дженерики

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

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

Критика

Критика в адрес Java включает реализацию дженериков, [ 67 ] скорость, [ 50 ] обработка беззнаковых чисел, [ 68 ] реализация арифметики с плавающей запятой, [ 69 ] и историю уязвимостей безопасности в основной реализации виртуальной машины Java HotSpot . [ 70 ]

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

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

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

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

Реализации

Корпорация 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 (JNI) и добавила собственные функции, специфичные для платформы. Sun подала в суд в 1997 году и в 2001 году выиграла компенсацию в размере 20 миллионов долларов США, а также постановление суда, обеспечивающее соблюдение условий лицензии Sun. [ 81 ] В результате Microsoft больше не поставляет Java вместе с Windows .

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

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

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

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

Андроид

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

См. также

Ссылки

  1. ^ Бинсток, Эндрю (20 мая 2015 г.). «20 лет инноваций Java» . Форбс . Архивировано из оригинала 14 марта 2016 года . Проверено 18 марта 2016 г.
  2. ^ Перейти обратно: а б с д Барбара Лисков с Джоном Гуттагом (2000). Разработка программ на Java: абстракция, спецификация и объектно-ориентированное проектирование . США, Эддисон Уэсли. ISBN  9780201657685 .
  3. ^ Чаудхари, Гарри Х. (28 июля 2014 г.). «Интервью по программированию на Java :: 2000+ вопросов и ответов на интервью по Java» . Архивировано из оригинала 29 сентября 2023 года . Проверено 29 мая 2016 г.
  4. ^ В Java 5.0 добавлено несколько новых возможностей языка ( улучшенный цикл for , автоупаковка , varargs и аннотации ) после того, как они были представлены в аналогичном (и конкурирующем) языке 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. ^ «АЗ языков программирования: Модуль-3» . Компьютерный мир. Архивировано из оригинала 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 (1999). «История Явы» (PDF) . Отчет о серверах приложений Java . Архивировано из оригинала (PDF) 29 декабря 2010 года. Проект был реализован под названием Green , а язык был основан на старой модели UCSD Pascal , которая позволяет генерировать интерпретируемый код.
  11. ^ «Разговор с Джеймсом Гослингом – Очередь ACM» . Queue.acm.org. 31 августа 2004 года. Архивировано из оригинала 16 июля 2015 года . Проверено 9 июня 2010 г.
  12. ^ Команда Java Language. О «Делегатах» Microsoft (Белая книга). JavaSoft, Sun Microsystems, Inc. Архивировано из оригинала 27 июня 2012 года. Летом 1996 года Sun разрабатывала предшественник того, что сейчас является моделью событий AWT и компонентной архитектуры JavaBeans. Компания Borland внесла большой вклад в этот процесс. Мы очень внимательно изучили Delphi Object Pascal и создали рабочий прототип ссылок на привязанные методы, чтобы понять их взаимодействие с языком программирования Java и его API.
  13. ^ «Спецификация часовни (Благодарность)» (PDF) . Cray Inc., 1 октября 2015 г. Архивировано (PDF) из оригинала 5 февраля 2016 г. . Проверено 14 января 2016 г.
  14. ^ «Введение в документацию Gambas» . Сайт Гамбас. Архивировано из оригинала 9 октября 2017 года . Проверено 9 октября 2017 г.
  15. ^ «Вопросы и ответы Facebook: хак привносит статическую типизацию в мир PHP» . Инфомир . 26 марта 2014. Архивировано из оригинала 13 февраля 2015 года . Проверено 11 января 2015 г.
  16. ^ «Написать один раз, бежать куда угодно?» . Компьютерный еженедельник . 2 мая 2002 г. Архивировано из оригинала 13 августа 2021 г. Проверено 27 июля 2009 г.
  17. ^ Перейти обратно: а б с «1.2 Цели разработки языка программирования Java» . Оракул. 1 января 1999 года. Архивировано из оригинала 23 января 2013 года . Проверено 14 января 2013 г.
  18. ^ Мелансон, Майк (9 августа 2022 г.). «Не называйте это возвращением: почему Java по-прежнему лидирует» . Гитхаб . Архивировано из оригинала 25 августа 2023 года . Проверено 15 октября 2023 г.
  19. ^ «Топовые языки программирования» . Состояние Октоверса . Гитхаб . Архивировано из оригинала 2 августа 2023 года . Проверено 15 октября 2023 г.
  20. ^ Макмиллан, Роберт (1 августа 2013 г.). «Ява теряет свое моджо?» . Проводной . Архивировано из оригинала 15 февраля 2017 года . Проверено 15 октября 2023 г.
  21. ^ Байус, Джон (около 1998 г.). «Технология Java: первые годы» . Сеть разработчиков Sun. Сан Микросистемс . Архивировано из оригинала 20 апреля 2005 года . Проверено 22 апреля 2005 г.
  22. ^ Объектно-ориентированное программирование «История Java-технологии» . Сеть разработчиков Sun. в. 1995. Архивировано из оригинала 10 февраля 2010 года . Проверено 30 апреля 2010 г.
  23. ^ Мерфи, Кирон (4 октября 1996 г.). «Так почему же они решили назвать его Java?» . JavaWorld . Архивировано из оригинала 13 июля 2020 года . Проверено 13 июля 2020 г.
  24. ^ Кабуц, Хайнц; Однажды на дубе. Архивировано 13 апреля 2007 года в Wayback Machine . Артима. Проверено 29 апреля 2007 г.
  25. ^ «JAVASOFT ПОСТАВЛЯЕТ JAVA 1.0» . Архивировано из оригинала 10 марта 2007 года . Проверено 13 мая 2018 г.
  26. ^ Объектно-ориентированное программирование на Java: основы и приложения . Тата МакГроу-Хилл Образование. п. 34.
  27. ^ «JSG – Группа по изучению Java» . open-std.org . Архивировано из оригинала 25 августа 2006 года . Проверено 2 августа 2006 г.
  28. ^ «Почему Java была, а не стандартизирована дважды» (PDF) . Архивировано (PDF) из оригинала 13 января 2014 г. Проверено 3 июня 2018 г.
  29. ^ «Что такое ECMA и почему это волнует Microsoft» . ЗДНет . Архивировано из оригинала 6 мая 2014 года . Проверено 6 мая 2014 г.
  30. ^ «Веб-сайт Java Community Process» . Jcp.org. 24 мая 2010 года. Архивировано из оригинала 8 августа 2006 года . Проверено 9 июня 2010 г.
  31. ^ «JAVAONE: Sun – основная часть Java имеет открытый исходный код» . GrnLight.net. Архивировано из оригинала 27 мая 2014 года . Проверено 26 мая 2014 г.
  32. ^ «Развивающаяся роль Sun как евангелиста Java» . О'Рейли Медиа . Архивировано из оригинала 15 сентября 2010 года . Проверено 2 августа 2009 г.
  33. ^ «Оракул и Java» . oracle.com . Корпорация Оракл. Архивировано из оригинала 31 января 2010 года . Проверено 23 августа 2010 г. Oracle является ведущим и активным сторонником Java с момента ее появления в 1995 году и берет на себя новую роль управляющего технологией Java с неустанным стремлением способствовать развитию сообщества участия и прозрачности.
  34. ^ Гослинг, Джеймс (9 апреля 2010 г.). «Время двигаться дальше…» На новой дороге . Архивировано из оригинала 5 ноября 2010 года . Проверено 16 ноября 2011 г.
  35. ^ Тема, Далибор. «Переход к сети без плагинов» . Архивировано из оригинала 16 марта 2016 года . Проверено 15 марта 2016 г.
  36. ^ «Узнайте о технологии Java» . Оракул. Архивировано из оригинала 24 ноября 2011 года . Проверено 21 ноября 2011 г.
  37. ^ «Почему мне следует удалять старые версии Java из моей системы?» . Оракул. Архивировано из оригинала 12 февраля 2018 года . Проверено 24 сентября 2021 г.
  38. ^ «Дорожная карта поддержки Oracle Java SE» . Оракул. 13 сентября 2021 года. Архивировано из оригинала 19 сентября 2021 года . Проверено 18 сентября 2021 г.
  39. ^ «Поддержка Темурина™; Адоптиум» . Adoptium.net . Архивировано из оригинала 29 марта 2024 года . Проверено 29 марта 2024 г.
  40. ^ «JAVASOFT ПОСТАВЛЯЕТ JAVA 1.0» . Sun.com . Архивировано из оригинала 10 марта 2007 года . Проверено 5 февраля 2008 г.
  41. ^ Чандер, Шарат. «Представляем Java SE 11» . oracle.com . Архивировано из оригинала 26 сентября 2018 года . Проверено 26 сентября 2018 г.
  42. ^ «Прибытие Java 15!» . Оракул . 15 сентября 2020 года. Архивировано из оригинала 16 сентября 2020 года . Проверено 15 сентября 2020 г.
  43. ^ «ДжДК 21» . openjdk.org . Архивировано из оригинала 20 сентября 2023 года . Проверено 20 сентября 2023 г.
  44. ^ «Обзор Java-карты» . Технологическая сеть Oracle . Оракул. Архивировано из оригинала 7 января 2015 года . Проверено 18 декабря 2014 г.
  45. ^ «Платформа Java, Micro Edition (Java ME)» . Технологическая сеть Oracle . Оракул. Архивировано из оригинала 4 января 2015 года . Проверено 18 декабря 2014 г.
  46. ^ «Ява СЭ» . Технологическая сеть Oracle . Оракул. Архивировано из оригинала 24 декабря 2014 года . Проверено 18 декабря 2014 г.
  47. ^ «Платформа Java, Enterprise Edition (Java EE)» . Технологическая сеть Oracle . Оракул. Архивировано из оригинала 17 декабря 2014 года . Проверено 18 декабря 2014 г.
  48. ^ «Глубокое погружение в новый JIT-компилятор Java — Graal | Baeldung» . www.baeldung.com . 6 августа 2021 года. Архивировано из оригинала 28 октября 2021 года . Проверено 13 октября 2021 г.
  49. ^ «Является ли платформа JVM (виртуальная машина Java) зависимой или независимой от платформы? В чем преимущество использования JVM и того, что Java является переведенным языком?» . Интервью программиста. Архивировано из оригинала 19 января 2015 года . Проверено 19 января 2015 г.
  50. ^ Перейти обратно: а б Елович, Деян. «Почему Java всегда будет медленнее, чем C++» . Архивировано из оригинала 11 февраля 2008 года . Проверено 15 февраля 2008 г.
  51. ^ Хундт, Роберт. «Распознавание циклов в C++/Java/Go/Scala» (PDF) . Архивировано (PDF) из оригинала 16 ноября 2011 г. Проверено 12 июля 2012 г.
  52. ^ «Just-In-Time Java-компилятор Symantec будет интегрирован в Sun JDK 1.1» . Архивировано из оригинала 28 июня 2010 года . Проверено 1 августа 2009 г.
  53. ^ Сальчич, Зоран; Пак, Хиджон; Тайх, Юрген; Малик, Авинаш; Надим, Мухаммад (22 июля 2017 г.). «Noc-HMP: гетерогенный многоядерный процессор для встраиваемых систем, разработанный в SystemJ». Труды АСМ по автоматизации проектирования электронных систем . 22 (4): 73. дои : 10.1145/3073416 . ISSN   1084-4309 . S2CID   11150290 .
  54. ^ Перейти обратно: а б с Блох 2018 , с. 26-28, §Пункт 7: Устраните устаревшие ссылки на объекты.
  55. ^ «НуллПоинтерИсключение» . Оракул. Архивировано из оригинала 6 мая 2014 года . Проверено 6 мая 2014 г.
  56. ^ «Исключения в Java» . Артима.com. Архивировано из оригинала 21 января 2009 года . Проверено 10 августа 2010 г.
  57. ^ «Повышение производительности виртуальной машины Java HotSpot™» . Oracle.com. Архивировано из оригинала 29 мая 2017 года . Проверено 26 апреля 2017 г.
  58. ^ «Перегрузка операторов (C# против Java)» . C# для разработчиков Java . Майкрософт. Архивировано из оригинала 7 января 2015 года . Проверено 10 декабря 2014 г.
  59. ^ «Множественное наследование состояния, реализации и типа» . Учебники по Java . Оракул. Архивировано из оригинала 9 ноября 2014 года . Проверено 10 декабря 2014 г.
  60. ^ «Устаревшие API, функции и параметры» . Оракул. Архивировано из оригинала 19 июня 2019 года . Проверено 31 мая 2019 г.
  61. ^ «Апплет (платформа Java SE 7)» . Документы . Оракул. Архивировано из оригинала 2 августа 2020 года . Проверено 1 мая 2020 г.
  62. ^ «Что такое страница JSP? — Учебное пособие по Java EE 5» . docs.oracle.com . Архивировано из оригинала 2 августа 2020 года . Проверено 1 мая 2020 г.
  63. ^ «След: создание графического интерфейса с помощью JFC/Swing (учебники по Java)» . docs.oracle.com . Архивировано из оригинала 29 апреля 2020 года . Проверено 1 мая 2020 г.
  64. ^ «Удаленный из JDK 11, JavaFX 11 стал отдельным модулем» . Инфомир . 20 сентября 2018 года. Архивировано из оригинала 14 октября 2020 года . Проверено 13 октября 2020 г.
  65. ^ «Начало работы с JavaFX: Привет, мир, стиль JavaFX» . Учебные пособия и документация по JavaFX 2 . Оракул. Архивировано из оригинала 2 августа 2020 года . Проверено 1 мая 2020 г.
  66. ^ «Системы типов Java и Scala ненадежны» (PDF) . Архивировано (PDF) из оригинала 28 ноября 2016 г. Проверено 20 февраля 2017 г.
  67. ^ Арнольд, Кен (27 июня 2005 г.). «Дженерики считаются вредными» . java.net. Архивировано из оригинала 10 октября 2007 года . Проверено 10 сентября 2015 г.
  68. ^ Оуэнс, Шон Р. «Java и unsigned int, unsigned short, unsigned byte, unsigned long и т. д. (вернее, их отсутствие)» . Архивировано из оригинала 20 февраля 2009 года . Проверено 4 июля 2011 г.
  69. ^ Кахан, Уильям (1 марта 1998 г.). «Как числа с плавающей запятой в Java вредят всем и повсюду — семинар ACM по Java, 1998 г. (Стэнфорд)» (PDF) . Электротехника и информатика, Калифорнийский университет в Беркли. Архивировано (PDF) из оригинала 5 сентября 2012 г. Проверено 4 июня 2011 г.
  70. ^ «Вы проверили Java?» . Архивировано из оригинала 21 сентября 2012 года . Проверено 23 декабря 2011 г.
  71. ^ Каденхед, Роджерс (20 ноября 2017 г.), Понимание того, как работают программы Java , заархивировано из оригинала 13 августа 2021 г. , получено 26 марта 2019 г.
  72. ^ Вульф, Ники (26 мая 2016 г.). «Google выигрывает шестилетнюю судебную тяжбу с Oracle по поводу авторских прав на код Android» . Хранитель . ISSN   0261-3077 . Архивировано из оригинала 26 марта 2019 года . Проверено 26 марта 2019 г.
  73. ^ Перейти обратно: а б Блох 2018 , стр. 1–4, §1 Введение.
  74. ^ "java.nio (платформа Java SE 8)" . docs.oracle.com .
  75. ^ «Сеть Java» . docs.oracle.com .
  76. ^ «HttpClient (Java SE 11 и JDK 11)» . docs.oracle.com .
  77. ^ «Обзор платформы коллекций» . Java-документация . Оракул. Архивировано из оригинала 31 декабря 2014 года . Проверено 18 декабря 2014 г.
  78. ^ «Обзор безопасности Java» . Java-документация . Оракул. Архивировано из оригинала 3 января 2015 года . Проверено 18 декабря 2014 г.
  79. ^ «След: Интернационализация» . Учебники по Java . Оракул. Архивировано из оригинала 31 декабря 2014 года . Проверено 18 декабря 2014 г.
  80. ^ «Как писать комментарии к документу для инструмента Javadoc» . Технологическая сеть Oracle . Оракул. Архивировано из оригинала 18 декабря 2014 года . Проверено 18 декабря 2014 г.
  81. ^ Николаи, Джеймс (24 января 2001 г.). «Sun и Microsoft урегулируют иск Java» . JavaWorld . Служба новостей IDG . Архивировано из оригинала 14 июля 2020 года . Проверено 13 июля 2020 г.
  82. ^ ван Гурп, Джиллес (13 ноября 2007 г.). «Google Android: первые впечатления и критика» . Джавалобби . Архивировано из оригинала 28 августа 2008 года . Проверено 7 марта 2009 г. Честно говоря, я не понимаю, почему Google намерен игнорировать огромное количество существующих реализаций. Мне кажется, это плохой случай «не здесь изобретено». В конечном итоге это замедлит внедрение. В мобильном мире уже слишком много Java-платформ, и это еще одна
  83. ^ Маллин, Джо (7 мая 2012 г.). «Google виновен в нарушении прав в суде над Oracle; грядущие юридические проблемы маячат» . Закон и беспорядок . Арс Техника. Архивировано из оригинала 8 мая 2012 года . Проверено 8 мая 2012 г.
  84. ^ Маллин, Джо (31 мая 2012 г.). «Google выиграла решающее решение по API, а дело Oracle потерпело крах» . Арс Техника . Архивировано из оригинала 12 марта 2017 года . Проверено 1 июня 2012 г.
  85. ^ Розенблатт, Сет (9 мая 2014 г.). «Суд встал на сторону Oracle по поводу апелляции по патенту Java на Android» . CNET . Архивировано из оригинала 10 мая 2014 года . Проверено 10 мая 2014 г.
  86. ^ Маллин, Джо (26 мая 2016 г.). «Google превосходит Oracle: Android «добросовестно использует» API Java» . Арс Техника . Архивировано из оригинала 20 января 2017 года . Проверено 26 мая 2016 г.
  87. ^ Фаривар, Сайрус (27 марта 2018 г.). « Использование Google пакетов Java API было несправедливым», — постановил апелляционный суд» . Арс Техника . Архивировано из оригинала 24 сентября 2019 года . Проверено 6 августа 2019 г.
  88. ^ Ли, Тимоти (23 апреля 2019 г.). «Google просит Верховный суд отменить катастрофическое решение по авторским правам на API» . Арс Техника . Архивировано из оригинала 23 апреля 2019 года . Проверено 23 апреля 2019 г.
  89. ^ « Google LLC против Oracle America, Inc 593 США ____ (2021 г.)» (PDF) . Архивировано (PDF) из оригинала 5 апреля 2021 г. Проверено 6 апреля 2021 г.

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0b7212f968cfdac37205e4d58e9a03a6__1722816540
URL1:https://arc.ask3.ru/arc/aa/0b/a6/0b7212f968cfdac37205e4d58e9a03a6.html
Заголовок, (Title) документа по адресу, URL1:
Java (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)