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

Язык программирования Java
Язык программирования Java logo.svg
ПарадигмаМультипарадигма: общий, объектно-ориентированный (основанный на классе ), императив, отражающий
РазработаноДжеймс Гослинг
РазработчикКорпорация Oracle и другие.
Впервые появился23 мая 1995 г.; 25 лет назад (1995-05-23)[1]
Стабильный выпуск
Java SE 15[2] / 15 сентября 2020 г.; 2 месяца назад (2020-09-15)
Печатная дисциплинаСтатичный, сильный, безопасный, именительный падеж, манифест
Расширения имени файла.Ява, .учебный класс, .банка
Интернет сайторакул.com/Ява/
Под влиянием
CLU,[3] Simula67,[3] LISP,[3] Болтовня,[3] Ада 83, C ++,[4] C #,[5] Эйфель,[6] Меса,[7] Модула-3,[8] Оберон,[9] Цель-C,[10] UCSD Паскаль,[11][12] Object Pascal[13]
Под влиянием
Ада 2005, BeanShell, C #, Часовня,[14] Clojure, ECMAScript, Фантом, Гамбас,[15] Groovy, Взломать,[16] Haxe, J #, Котлин, PHP, Python, Scala, Семя7, Вала

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

Первоначально Java была разработана Джеймс Гослинг в Sun Microsystems (который с тех пор был приобретен Oracle ) и выпущен в 1995 году как основной компонент Sun Microsystems. Платформа Java. Оригинал и эталонная реализация Ява компиляторы, виртуальные машины и библиотеки классов изначально были выпущены Sun под проприетарные лицензии. По состоянию на май 2007 г., в соответствии с техническими условиями Процесс сообщества Java, Солнце было перелицензированный большинство его технологий Java под Стандартная общественная лицензия GNU. Oracle предлагает собственные HotSpot Виртуальная машина Java, однако официальная эталонная реализация это OpenJDK JVM - бесплатное программное обеспечение с открытым исходным кодом, используемое большинством разработчиков, включая Eclipse IDE и является JVM по умолчанию почти для всех дистрибутивов Linux.

Последняя версия Java 15, выпущенный в сентябре 2020 года, с Java 11, поддерживаемой в настоящее время долгосрочная поддержка (LTS) версия, выпущенная 25 сентября 2018 г .; Oracle выпущен для наследие Java 8 LTS - последнее публичное обновление с нулевой стоимостью в январе 2019 года для коммерческого использования, хотя в остальном оно по-прежнему будет поддерживать Java 8 с общедоступными обновлениями для личного использования по крайней мере до декабря 2020 года. Другие поставщики начали предлагать сборки с нулевой стоимостью OpenJDK 8 и 11, которые все еще получают обновления безопасности и другие обновления.

Oracle (и другие) настоятельно рекомендуют удалить старые версии Java из-за серьезных рисков, связанных с нерешенными проблемами безопасности.[22] Поскольку Java 9, 10, 12 и 13 больше не поддерживаются, Oracle рекомендует своим пользователям немедленно перейти на последнюю версию (в настоящее время Java 15) или выпуск LTS.

История

Герцог, талисман Явы
Джеймс Гослинг, создатель Java, в 2008 г.
В TIOBE индекс популярности языков программирования график с 2002 по 2018 год. Java стабильно занимает лидирующие позиции с середины 2015 года.

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

Sun Microsystems выпустила первую общедоступную реализацию как Java 1.0 в 1996 году.[27] Обещал Напишите один раз, бегите где угодно (WORA), обеспечивающие бесплатную работу на популярных платформы. Достаточно безопасный и обладающий настраиваемой безопасностью, он позволял ограничения доступа к сети и файлам. Основной веб-браузеры вскоре включил способность бегать Java-апплеты внутри веб-страниц, и Java быстро стала популярной. Переписан компилятор Java 1.0. в Java к Артур ван Хофф строго соответствовать спецификации языка Java 1.0.[28] С появлением 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, но вскоре вышла из процесса.[29][30][31] Java остается де-факто стандарт, управляемый через Процесс сообщества Java.[32] В свое время Sun сделала большинство своих реализаций Java бесплатно, несмотря на их проприетарное программное обеспечение положение дел. Sun получила доход от Java за счет продажи лицензий на специализированные продукты, такие как Java Enterprise System.

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

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

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

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

Программное обеспечение Java работает на всем, от ноутбуков до дата-центры, Игровые приставки научным суперкомпьютеры.[38]

Принципы

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

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

Версии

По состоянию на сентябрь 2020 г., Java 8 и 11 поддерживаются как версии с долгосрочной поддержкой (LTS), а также поддерживается одна более поздняя версия, отличная от LTS.[39] Основные версии Java, а также даты их выпуска:

ВерсияДата
JDK Beta1995
JDK1.023 января 1996 г. [40]
JDK 1.119 февраля 1997 г.
J2SE 1.28 декабря 1998 г.
J2SE 1.38 мая 2000 г.
J2SE 1.46 февраля 2002 г.
J2SE 5.030 сентября 2004 г.
Java SE 611 декабря 2006 г.
Java SE 728 июля 2011 г.
Java SE 818 марта 2014 г.
Java SE 921 сентября 2017 г.
Java SE 1020 марта 2018 г.
Java SE 1125 сентября 2018 г. [41]
Java SE 1219 марта 2019 г.,
Java SE 1317 сентября 2019 г.,
Java SE 1417 марта 2020 г.
Java SE 1515 сентября 2020 г.

Редакции

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

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

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

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

Java JVM и байт-код

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

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

Использование универсального байт-кода упрощает перенос. Однако накладные расходы устный перевод байт-код в машинные инструкции заставил интерпретируемые программы почти всегда работать медленнее, чем собственные исполняемые файлы. Вовремя (JIT) компиляторы, которые компилируют байт-коды в машинный код во время выполнения, были введены с самого начала. Сама Java не зависит от платформы и адаптирована к конкретной платформе, на которой она должна работать Виртуальная машина Java (JVM) для него, что переводит Байт-код Java на машинный язык платформы.[46]

Спектакль

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

Без JVM

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

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

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

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

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

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

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

Java содержит несколько типов сборщиков мусора. По умолчанию HotSpot использует параллельный сборщик мусора.[53] Однако есть также несколько других сборщиков мусора, которые можно использовать для управления кучей. Для 90% приложений на Java Параллельный Mark-Sweep (CMS) сборщика мусора достаточно.[54] Oracle стремится заменить CMS на Сборщик мусора (G1).[55]

Решение проблемы управления памятью не освобождает программиста от бремени правильной обработки других видов ресурсов, таких как сетевые соединения или соединения с базой данных, дескрипторы файлов и т. Д., Особенно при наличии исключений. Парадоксально, но наличие сборщика мусора устраняет необходимость наличия явного метода деструктора в классах, что затрудняет управление этими другими ресурсами.[нужна цитата ]

Синтаксис

График зависимостей классов Java Core (созданный с помощью jdeps и Gephi )

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

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

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

Привет, мир, пример

Традиционный Привет, мир программа можно записать на Java как:[58]

общественный учебный класс HelloWorldApp {    общественный статический пустота главный(Нить[] аргументы) {        Система.из.println("Привет, мир!"); // Выводит строку на консоль.    }}

Все исходные файлы должны быть названы в честь открытого класса, который они содержат, с добавлением суффикса .Ява, Например, HelloWorldApp.java. Сначала он должен быть скомпилирован в байт-код, используя Компилятор Java, создавая файл с .учебный класс суффикс (HelloWorldApp.class, в этом случае). Только тогда он может быть выполнен или запущен. Исходный файл Java может содержать только один общедоступный класс, но он может содержать несколько классов с модификатором непубличного доступа и любым количеством общедоступных внутренние классы. Если исходный файл содержит несколько классов, необходимо создать один класс (введенный учебный класс ключевое слово) public (перед ним стоит общественный ключевое слово) и назовите исходный файл этим именем открытого класса.

Класс, который не объявлен общедоступным, может храниться в любом .Ява файл. Компилятор сгенерирует файл класса для каждого класса, определенного в исходном файле. Имя файла класса - это имя класса с .учебный класс добавлено. Для создания файла класса анонимные классы рассматриваются, как если бы их имя было объединением имени их включающего класса, $, и целое число.

В ключевое слово общественный означает, что метод может быть вызван из кода в других классах или что класс может использоваться классами вне иерархии классов. Иерархия классов связана с именем каталога, в котором находится файл .java. Это называется модификатором уровня доступа. Другие модификаторы уровня доступа включают ключевые слова частный (метод, доступный только в том же классе) и защищенный (что позволяет получить доступ к коду из того же пакета). Если часть кода пытается получить доступ к закрытым или защищенным методам, JVM выдаст сообщение SecurityException

Ключевое слово статический[19] перед методом указывает статический метод, который связан только с классом, а не с каким-либо конкретным экземпляром этого класса. Без ссылки на объект можно вызывать только статические методы. Статические методы не могут получить доступ к членам класса, которые также не являются статическими. Методы, которые не обозначены как статические, являются методами экземпляра и требуют для работы определенного экземпляра класса.

Ключевое слово пустота указывает, что основной метод не возвращает значение вызывающей стороне. Если программа на Java должна выйти с кодом ошибки, она должна явно вызвать System.exit ().

Название метода главный не является ключевым словом в языке Java. Это просто имя метода, который вызывается программой запуска Java для передачи управления программе. Классы Java, которые работают в управляемых средах, таких как апплеты и Enterprise JavaBeans не использовать или нуждаться в главный() метод. Программа на Java может содержать несколько классов, которые имеют главный методы, а это означает, что виртуальной машине нужно явно указать, из какого класса запускать.

Основной метод должен принимать множество из Нить объекты. По соглашению он обозначается как аргументы хотя можно использовать любое другое юридическое имя идентификатора. Начиная с Java 5, основной метод также может использовать переменные аргументы, в виде public static void main (String ... args), позволяя вызывать основной метод с произвольным числом Нить аргументы. Эффект от этого альтернативного объявления семантически идентичен ( аргументы параметр, который по-прежнему является массивом Нить объекты), но позволяет использовать альтернативный синтаксис для создания и передачи массива.

Средство запуска Java запускает Java, загружая данный класс (указанный в командной строке или как атрибут в БАНКА ) и запустив его public static void main (String []) метод. Автономные программы должны явно объявлять этот метод. В String [] args параметр - это множество из Нить объекты, содержащие любые аргументы, переданные классу. Параметры для главный часто передаются через командная строка.

Печать является частью стандартной библиотеки Java: Система класс определяет общедоступное статическое поле, называемое из. В из объект является экземпляром PrintStream класс и предоставляет множество методов для печати данных в стандартный выход, включая println (строка) который также добавляет новую строку к переданной строке.

Струна "Привет, мир!" автоматически преобразуется компилятором в объект String.

Пример с методами

// Это пример однострочного комментария с двумя косыми чертами/* * Это пример многострочного комментария с использованием косой черты и звездочки. * Этот тип комментария можно использовать для хранения большого количества информации или отключения * код, но очень важно не забыть закрыть комментарий. */упаковка выдумки;импорт java.util.Map;импорт java.util.HashMap;/** * Это пример комментария Javadoc; Javadoc может составлять документацию * из этого текста. Комментарии Javadoc должны непосредственно предшествовать классу, методу, * или документируемое поле. * @author Волонтеры Википедии */общественный учебный класс FibCalculator расширяет Фибоначчи орудия Калькулятор {    частный статический карта<Целое число, Целое число> памятный = новый HashMap<>();    /*     * Основной метод, записанный ниже, используется JVM в качестве отправной точки.     * для программы.     */    общественный статический пустота главный(Нить[] аргументы) {        памятный.положить(1, 1);        памятный.положить(2, 1);        Система.из.println(Фибоначчи(12)); // Получаем 12-е число Фибоначчи и выводим в консоль    }    /**     * Пример метода, написанного на Java, обернутого в класс.     * Учитывая неотрицательное число FIBINDEX, возвращает     * N-е число Фибоначчи, где N равно FIBINDEX.     *      * @param fibIndex Индекс числа Фибоначчи     * @ вернуть число Фибоначчи     */    общественный статический int Фибоначчи(int fibIndex) {        если (памятный.containsKey(fibIndex)) возвращаться памятный.получать(fibIndex);        еще {            int отвечать = Фибоначчи(fibIndex - 1) + Фибоначчи(fibIndex - 2);            памятный.положить(fibIndex, отвечать);            возвращаться отвечать;        }    }}

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

Апплет

Аплеты Java были программами, которые встроенный в других приложениях, обычно на веб-странице, отображаемой в веб-браузере. API-интерфейс Java-апплета устарел с версии Java 8 в 2017 году.[59][60]

Сервлет

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

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

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

JavaServer Pages

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

Приложение Swing

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

Приложение JavaFX

JavaFX это программная платформа для создания и доставки настольные приложения, а также многофункциональные интернет-приложения (RIA) которые могут работать на самых разных устройствах. JavaFX предназначен для замены Качать как стандарт GUI библиотека для Java SE, но с JDK 11 JavaFX не входит в основной JDK, а находится в отдельном модуле.[63] JavaFX поддерживает настольные компьютеры и веб-браузеры на Майкрософт Виндоус, Linux, и macOS. JavaFX не поддерживает внешний вид собственной ОС.[64]

Дженерики

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

В 2016 году была доказана система типов Java. нездоровый.[65]

Критика

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

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

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

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

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

Реализации

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

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

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

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

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

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

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

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

Android

В Android операционная система широко использует технологии, связанные с Java

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

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

Полемика

Использование технологии Java в Android привело к юридическому спору между Oracle и Google. 7 мая 2012 г. жюри в Сан-Франциско пришло к выводу, что если API-интерфейсы могут быть защищены авторским правом, то Google нарушил авторские права Oracle, используя Java в устройствах Android.[79] Окружной судья Уильям Хаскелл Алсуп постановил 31 мая 2012 г., что API не могут быть защищены авторским правом,[80] но это было отменено Апелляционным судом Федерального округа США в мае 2014 года.[81] 26 мая 2016 года окружной суд вынес решение в пользу Google, постановив, что нарушение авторских прав на Java API в Android является добросовестным использованием.[82] В марте 2018 года это решение было отменено Апелляционным судом, который направил дело об определении размера ущерба в федеральный суд Сан-Франциско.[83]Google подала прошение о выдаче судебного приказа в Верховный суд США в январе 2019 года, чтобы оспорить два решения, вынесенные Апелляционным судом в пользу Oracle.[84]

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

Сравнение Java с другими языками

Рекомендации

  1. ^ Бинсток, Эндрю (20 мая 2015 г.). «20 лет инноваций Java». Forbes. В архиве с оригинала 14 марта 2016 г.. Получено 18 марта, 2016.
  2. ^ "Прибытие Java 15!". Oracle. 15 сентября 2020 г.. Получено 15 сентября, 2020.
  3. ^ а б c d Барбара Лисков с Джон Гуттаг (2000). Разработка программ на Java - абстракция, спецификация и объектно-ориентированный дизайн. США, Эддисон Уэсли. ISBN  9780201657685.
  4. ^ Чаудхари, Гарри Х. (28 июля 2014 г.). "Cracking The Java Programming Interview :: 2000+ Java Interview Que / Ans". Получено 29 мая, 2016.
  5. ^ В Java 5.0 добавлено несколько новых языковых функций ( улучшен для цикла, автобокс, varargs и аннотации ), после того, как они были представлены в аналогичных (и конкурирующих) C # язык. [1] В архиве 19 марта 2011 г. Wayback Machine [2] В архиве 7 января 2006 г. Wayback Machine
  6. ^ Гослинг, Джеймс; Макгилтон, Генри (май 1996 г.). «Языковая среда Java». В архиве из оригинала 6 мая 2014 г.. Получено 6 мая, 2014.
  7. ^ Гослинг, Джеймс; Джой, Билл; Стил, Гай; Браха, Гилад. «Спецификация языка Java, 2-е издание». В архиве с оригинала 5 августа 2011 г.. Получено 8 февраля, 2008.
  8. ^ «Азбука языков программирования: Модула-3». Computerworld.com.au. Архивировано из оригинал 5 января 2009 г.. Получено 9 июня, 2010.
  9. ^ Никлаус Вирт заявлено в ряде публичных мероприятий, например на лекции в Политехническом музее в Москве в сентябре 2005 г. (существует несколько независимых источников из первых рук на русском языке, например, один с аудиозаписью: Филиппова, Елена (22 сентября 2005 г.). «Лекция Никлауса Вирта в Политехническом музее в Москве».), что группа разработчиков Sun Java лицензировала исходные коды компилятора Oberon за несколько лет до выпуска Java и проверила его: (относительная) компактность, безопасность типов, сборка мусора, отсутствие множественного наследования для классов - все эти ключевые общие принципы дизайна функции являются общими для Java и Oberon.
  10. ^ Патрик Нотон цитирует Цель-C как сильное влияние на дизайн языка программирования Java, заявив, что известные прямые производные включают интерфейсы Java (производные от Objective-C протокол ) и примитивные классы-оболочки. [3] В архиве 13 июля 2011 г. Wayback Machine
  11. ^ TechMetrix Research (1999). «История Java» (PDF). Отчет о серверах приложений Java. Архивировано из оригинал (PDF) 29 декабря 2010 г. Проект продолжался под названием зеленый и язык был основан на старой модели UCSD Паскаль, что позволяет генерировать интерпретирующий код.
  12. ^ «Разговор с Джеймсом Гослингом - очередь ACM». Queue.acm.org. 31 августа 2004 г. В архиве из оригинала 16 июля 2015 г.. Получено 9 июня, 2010.
  13. ^ Летом 1996 года Sun проектировала предшественника модели событий AWT и компонентной архитектуры JavaBeans. Компания Borland внесла большой вклад в этот процесс. Мы очень внимательно изучили Delphi Object Pascal и построили рабочий прототип связанных ссылок на методы, чтобы понять их взаимодействие с языком программирования Java и его API.Официальный документ о делегатах Microsoft
  14. ^ "Спецификация часовни (Благодарности)" (PDF). Cray Inc. 1 октября 2015 г. В архиве (PDF) из оригинала 5 февраля 2016 г.. Получено 14 января, 2016.
  15. ^ «Введение в документацию Gambas». Веб-сайт Gambas. В архиве с оригинала 9 октября 2017 г.. Получено 9 октября, 2017.
  16. ^ «Facebook Q&A: Hack приносит статическую типизацию в мир PHP». InfoWorld. 26 марта 2014 г. В архиве из оригинала 13 февраля 2015 г.. Получено 11 января, 2015.
  17. ^ «Напиши один раз, беги куда-нибудь?. Computer Weekly. 2 мая 2002 г.. Получено 27 июля, 2009.
  18. ^ а б c «1.2 Цели проектирования языка программирования Java ™». Oracle. 1 января 1999 г. В архиве с оригинала от 23 января 2013 г.. Получено 14 января, 2013.
  19. ^ а б Макмиллан, Роберт (1 августа 2013 г.). "Ява теряет свой моджо?". wired.com. В архиве с оригинала 15 февраля 2017 г.. Получено 8 марта, 2017. Java находится в упадке, по крайней мере, по мнению одного агентства, которое следит за постоянно меняющимся миром языков программирования. Более десяти лет он доминировал в TIOBE Индекс сообщества программистов, и снова на вершине - снимок энтузиазма разработчиков программного обеспечения, который смотрит на такие вещи, как результаты поиска в Интернете, чтобы измерить, насколько популярны разные языки. Но в последнее время Java ускользает.
  20. ^ Чан, Розали (22 января 2019). «10 самых популярных языков программирования по версии Facebook для программистов.'". Business Insider. В архиве с оригинала от 29 июня 2019 г.. Получено 29 июня, 2019.
  21. ^ «Обзор JavaOne 2013: Java берет начало в Интернете вещей». www.oracle.com. В архиве с оригинала 19 апреля 2016 г.. Получено 19 июня, 2016. Альтернативный URL
  22. ^ «Зачем мне удалять старые версии Java из моей системы?». Oracle. Получено 9 сентября, 2016.
  23. ^ Боус, Джон (ок. 1998). «Технология Java: первые годы». Сеть разработчиков Sun. Sun Microsystems. Архивировано из оригинал 20 апреля 2005 г.. Получено 22 апреля, 2005.
  24. ^ Объектно-ориентированного программирования «История технологии Java». Сеть разработчиков Sun. c. 1995 г. В архиве из оригинала 10 февраля 2010 г.. Получено 30 апреля, 2010.
  25. ^ Мерфи, Кирон (4 октября 1996 г.). «Так почему они решили назвать это Java?». JavaWorld. Получено 2020-07-13.
  26. ^ Кабуц, Хайнц; Однажды на дубе В архиве 13 апреля 2007 г. Wayback Machine. Артима. Проверено 29 апреля 2007 года.
  27. ^ "JAVASOFT SHIPS JAVA 1.0". Архивировано из оригинал 10 марта 2007 г.. Получено 13 мая, 2018.
  28. ^ Объектно-ориентированное программирование на Java: основы и приложения. Тата Макгроу-Хилл Образование. п. 34.
  29. ^ "JSG - Группа изучения Java". open-std.org. В архиве с оригинала 25 августа 2006 г.. Получено 2 августа, 2006.
  30. ^ «Почему Java ™ не была стандартизирована дважды» (PDF). В архиве (PDF) из оригинала 13 января 2014 г.. Получено 3 июня, 2018.
  31. ^ «Что такое ECMA и почему Microsoft заботится». В архиве из оригинала 6 мая 2014 г.. Получено 6 мая, 2014.
  32. ^ "Веб-сайт процесса сообщества Java". Jcp.org. 24 мая 2010 г. В архиве из оригинала 8 августа 2006 г.. Получено 9 июня, 2010.
  33. ^ "JAVAONE: Sun - Большая часть Java имеет открытый исходный код". GrnLight.net. В архиве из оригинала 27 мая 2014 г.. Получено 26 мая, 2014.
  34. ^ «Развитие роли Sun как евангелиста Java». O'Reilly Media. В архиве из оригинала 15 сентября 2010 г.. Получено 2 августа, 2009.
  35. ^ «Oracle и Java». oracle.com. Корпорация Oracle. Архивировано 31 января 2010 года.. Получено 23 августа, 2010. Oracle является ведущим и решительным сторонником Java с момента ее появления в 1995 году и берет на себя новую роль управляющего технологией Java с неуклонной приверженностью созданию сообщества участия и прозрачности.CS1 maint: BOT: статус исходного URL-адреса неизвестен (связь)
  36. ^ Гослинг, Джеймс (9 апреля 2010 г.). "Пора двигаться дальше ..." На новой дороге. Архивировано 5 ноября 2010 года.. Получено 16 ноября, 2011.CS1 maint: BOT: статус исходного URL-адреса неизвестен (связь)
  37. ^ Тема, Далибор. «Переход к сети без плагинов». В архиве из оригинала 16 марта 2016 г.. Получено 15 марта, 2016.
  38. ^ «Узнайте о технологии Java». Oracle. В архиве с оригинала 24 ноября 2011 г.. Получено Двадцать первое ноября, 2011.
  39. ^ https://www.oracle.com/java/technologies/java-se-support-roadmap.html
  40. ^ "JAVASOFT SHIPS JAVA 1.0". Архивировано из оригинал 10 марта 2007 г.. Получено 5 февраля, 2008.
  41. ^ Чандер, Шарат. «Представляем Java SE 11». oracle.com. В архиве из оригинала 26 сентября 2018 г.. Получено 26 сентября, 2018.
  42. ^ «Обзор карты Java Card». Технологическая сеть Oracle. Oracle. В архиве с оригинала 7 января 2015 г.. Получено 18 декабря, 2014.
  43. ^ «Платформа Java, Micro Edition (Java ME)». Технологическая сеть Oracle. Oracle. В архиве из оригинала 4 января 2015 г.. Получено 18 декабря, 2014.
  44. ^ «Java SE». Технологическая сеть Oracle. Oracle. В архиве с оригинала 24 декабря 2014 г.. Получено 18 декабря, 2014.
  45. ^ «Платформа Java, Enterprise Edition (Java EE)». Технологическая сеть Oracle. Oracle. В архиве с оригинала 17 декабря 2014 г.. Получено 18 декабря, 2014.
  46. ^ «Является ли платформа JVM (виртуальная машина Java) зависимой или независимой от платформы? В чем преимущество использования JVM и наличия Java в качестве языка перевода?». Интервью программиста. В архиве с оригинала 19 января 2015 г.. Получено 19 января, 2015.
  47. ^ Елович, Деян. «Почему Java всегда будет медленнее, чем C ++». Архивировано из оригинал 11 февраля 2008 г.. Получено 15 февраля, 2008.
  48. ^ Google. «Распознавание циклов в C ++ / Java / Go / Scala» (PDF). Получено 12 июля, 2012.
  49. ^ "Компилятор Symantec Just-In-Time Java будет интегрирован в Sun JDK 1.1". В архиве из оригинала 28 июня 2010 г.. Получено 1 августа, 2009.
  50. ^ Салчич, Зоран; Парк, Хиджонг; Тейх, Юрген; Малик, Авинаш; Надим, Мухаммад (22 июля 2017 г.). «Noc-HMP: гетерогенный многоядерный процессор для встроенных систем, разработанный в SystemJ». ACM Сделки по автоматизации проектирования электронных систем. 22 (4): 73. Дои:10.1145/3073416. ISSN  1084-4309. S2CID  11150290.
  51. ^ "Исключение нулевого указателя". Oracle. В архиве из оригинала 6 мая 2014 г.. Получено 6 мая, 2014.
  52. ^ «Исключения в Java». Artima.com. В архиве из оригинала 21 января 2009 г.. Получено 10 августа, 2010.
  53. ^ «Повышение производительности виртуальной машины Java HotSpot ™». Oracle.com. В архиве из оригинала 29 мая 2017 г.. Получено 26 апреля, 2017.
  54. ^ "Параметры виртуальной машины Java HotSpot". Oracle.com. 7 сентября 2010 г. В архиве из оригинала 6 марта 2011 г.. Получено 30 июня, 2012.
  55. ^ «Первый сборщик мусора». docs.oracle.com. В архиве из оригинала 9 марта 2016 г.. Получено 15 марта, 2016.
  56. ^ «Перегрузка оператора (C # против Java)». C # для разработчиков Java. Microsoft. В архиве с оригинала 7 января 2015 г.. Получено 10 декабря, 2014.
  57. ^ «Множественное наследование состояния, реализации и типа». Учебники по Java ™. Oracle. В архиве из оригинала 9 ноября 2014 г.. Получено 10 декабря, 2014.
  58. ^ «Урок: более пристальный взгляд на приложение Hello World». Учебники по Java ™> Начало работы. Корпорация Oracle. В архиве из оригинала 17 марта 2011 г.. Получено 14 апреля, 2011.
  59. ^ «Устаревшие API, функции и параметры». www.oracle.com. Получено 31 мая, 2019.
  60. ^ «Аплет (платформа Java SE 7)». docs.oracle.com. Получено 1 мая, 2020.
  61. ^ «Что такое страница JSP? - Учебное пособие по Java EE 5». docs.oracle.com. Получено 1 мая, 2020.
  62. ^ «След: Создание графического интерфейса с помощью JFC / Swing (Учебники по Java ™)». docs.oracle.com. Получено 1 мая, 2020.
  63. ^ «Удаленный из JDK 11, JavaFX 11 поставляется как отдельный модуль». Получено 13 октября, 2020.
  64. ^ «Начало работы с JavaFX: Hello World, стиль JavaFX | Руководства и документация по JavaFX 2». docs.oracle.com. Получено 1 мая, 2020.
  65. ^ «Системы типов Java и Scala не верны» (PDF). В архиве (PDF) с оригинала 28 ноября 2016 г.. Получено 20 февраля, 2017.
  66. ^ Арнольд, Кен. «Дженерики считаются вредными». java.net. Архивировано 10 октября 2007 года.. Получено 10 сентября, 2015.CS1 maint: BOT: статус исходного URL-адреса неизвестен (связь). Дополнительные комментарии к исходной статье доступны на более ранних снимках архива, например.
  67. ^ Елович, Деян. «Почему Java всегда будет медленнее, чем C ++». www.jelovic.com. Архивировано из оригинал 11 февраля 2008 г.. Получено 17 октября, 2012.
  68. ^ Оуэнс, Шон Р. «Java и unsigned int, unsigned short, unsigned byte, unsigned long и т. Д. (Точнее, их отсутствие)». Архивировано из оригинал 20 февраля 2009 г.. Получено 4 июля, 2011.
  69. ^ Кахан, Уильям. "Как плавающая точка в Java причиняет вред всем и везде" (PDF). Электротехника и информатика, Калифорнийский университет в Беркли. В архиве (PDF) из оригинала 5 сентября 2012 г.. Получено 4 июня, 2011.
  70. ^ "Вы проверили Java?". Архивировано из оригинал 21 сентября 2012 г.. Получено 23 декабря, 2011.
  71. ^ Кейденхед, Роджерс (20 ноября 2017 г.), Понимание того, как работают программы на Java, получено 26 марта, 2019
  72. ^ Вульф, Ники (26 мая 2016 г.). «Google выигрывает шестилетнюю судебную тяжбу с Oracle за авторское право на код Android». Хранитель. ISSN  0261-3077. Получено 26 марта, 2019.
  73. ^ «Обзор платформы коллекций». Документация по Java. Oracle. В архиве с оригинала 31 декабря 2014 г.. Получено 18 декабря, 2014.
  74. ^ «Обзор безопасности Java ™». Документация по Java. Oracle. В архиве с оригинала 3 января 2015 г.. Получено 18 декабря, 2014.
  75. ^ «След: Интернационализация». Учебники по Java ™. Oracle. В архиве с оригинала 31 декабря 2014 г.. Получено 18 декабря, 2014.
  76. ^ «Как писать комментарии к документам для инструмента Javadoc». Технологическая сеть Oracle. Oracle. В архиве с оригинала 18 декабря 2014 г.. Получено 18 декабря, 2014.
  77. ^ Никколай, Джеймс (24 января 2001 г.). «Sun и Microsoft урегулировали иск против Java». JavaWorld. Служба новостей IDG. Получено 2020-07-13.
  78. ^ ван Гурп, Джиллес (13 ноября 2007 г.). «Google Android: первые впечатления и критика». Javalobby. Получено 7 марта, 2009. Честно говоря, я не понимаю, почему Google намеревается игнорировать огромное количество существующих реализаций. Мне это кажется плохим случаем «изобретено не здесь». В конечном итоге это замедлит принятие. Для мобильного мира уже существует слишком много платформ Java, и это еще одна
  79. ^ Маллин, Джо. "Google виновен в нарушении прав в суде над Oracle; впереди маячит юридическая головная боль". Закон и беспорядок. Ars Technica. В архиве из оригинала 8 мая 2012 г.. Получено 8 мая, 2012.
  80. ^ Маллин, Джо (31 мая 2012 г.). "Google выигрывает решающее решение по API, дело Oracle разгромлено". Ars Technica. В архиве из оригинала 12 марта 2017 г.. Получено 1 июня, 2012.
  81. ^ Розенблатт, Сет (9 мая 2014 г.). «Суд встал на сторону Oracle по Android в апелляции на патент Java». CNET. В архиве из оригинала 10 мая 2014 г.. Получено 10 мая, 2014.
  82. ^ Маллин, Джо (26 мая 2016 г.). "Google превосходит Oracle - Android" добросовестно использует "Java API". Ars Technica. В архиве с оригинала от 20 января 2017 г.. Получено 26 мая, 2016.
  83. ^ Фаривар, Сайрус (27 марта 2018 г.). ""Использование Google пакетов API Java было несправедливым, "правила апелляционного суда". Ars Technica. Получено 6 августа, 2019.
  84. ^ Ли, Тимоти (23 апреля 2019 г.). «Google просит Верховный суд отменить катастрофическое решение по авторским правам API». Ars Technica. Получено 23 апреля, 2019.

Процитированные работы

внешняя ссылка

  • Словарное определение Ява в Викисловарь
  • СМИ, связанные с Ява в Wikimedia Commons
  • Ява в Викиучебнике
  • Учебные материалы, связанные с Ява в Викиверситете