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

Джава
Java programming language logo.svg
Парадигма Мультипарадигма : общий , объектно-ориентированный (на основе классов ), функциональный , императивный , рефлексивный , параллельный
Разработано Джеймс Гослинг
Разработчик Корпорация Oracle
Впервые появился 23 мая 1995 г . ; 26 лет назад (1995-05-23)
Стабильный выпуск
Java SE 17/14  Edit this on Wikidata сентября 2021 г . ; 33 дней назад (14 September 2021)
Печатная дисциплина Статический, сильный, безопасный , именительный падеж , манифест
Расширения имени файла .java, .class , .jar , .jmod
Веб-сайт oracle .com / java /
Под влиянием
CLU , Simula67 , Lisp , Smalltalk , Ada 83 , C ++ , C # , Eiffel , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Object Pascal
Под влиянием
Ада 2005 , BeanShell , C # , Chapel , Clojure , ECMAScript , Fantom , Gambas , Groovy , Hack , Haxe , J # , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript

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

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

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

Oracle (и другие) настоятельно рекомендуют удалить устаревшие и неподдерживаемые версии Java из-за серьезных рисков, связанных с нерешенными проблемами безопасности. Oracle рекомендует своим пользователям немедленно перейти на поддерживаемую версию, например, на одну из версий LTS (8, 11, 17).

История

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

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

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

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

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

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

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

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

Принципы

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

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

Версии

С сентября 2021 года Java 8, 11 и 17 поддерживаются как версии с долгосрочной поддержкой (LTS). Основные версии Java, а также даты их выпуска:

Версия Дата
JDK Beta 1995 г.
JDK1.0 23 января 1996 г.
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 г.
Java SE 6 11 декабря 2006 г.
Java SE 7 28 июля 2011 г.
Java SE 8 (LTS) 18 марта 2014 г.
Java SE 9 21 сентября 2017 г.
Java SE 10 20 марта 2018 г.
Java SE 11 (LTS) 25 сентября 2018 г.
Java SE 12 19 марта 2019 г.,
Java SE 13 17 сентября 2019 г.,
Java SE 14 17 марта 2020 г.
Java SE 15 15 сентября 2020 г.
Java SE 16 16 марта 2021 г.
Java SE 17 (LTS) 14 сентября 2021 г.
Java SE 18 Март 2022 г.

Редакции

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

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

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

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

Java JVM и байт-код

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

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

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

Представление

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

Без JVM

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

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

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

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

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

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

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

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

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

Синтаксис

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

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

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

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

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

Традиционную программу Hello world можно записать на Java как:

public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

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

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

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

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

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

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

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

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

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

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

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

// This is an example of a single line comment using two slashes

/*
 * This is an example of a multiple line comment using the slash and asterisk.
 * This type of comment can be used to hold a lot of information or deactivate
 * code, but it is very important to remember to close the comment.
 */

package fibsandlies;

import java.util.Map;
import java.util.HashMap;

/**
 * This is an example of a Javadoc comment; Javadoc can compile documentation
 * from this text. Javadoc comments must immediately precede the class, method,
 * or field being documented.
 * @author Wikipedia Volunteers
 */
public class FibCalculator extends Fibonacci implements Calculator {
    private static Map<Integer, Integer> memoized = new HashMap<>();

    /*
     * The main method written as follows is used by the JVM as a starting point
     * for the program.
     */
    public static void main(String[] args) {
        memoized.put(1, 1);
        memoized.put(2, 1);
        System.out.println(fibonacci(12)); // Get the 12th Fibonacci number and print to console
    }

    /**
     * An example of a method written in Java, wrapped in a class.
     * Given a non-negative number FIBINDEX, returns
     * the Nth Fibonacci number, where N equals FIBINDEX.
     * 
     * @param fibIndex The index of the Fibonacci number
     * @return the Fibonacci number
     */
    public static int fibonacci(int fibIndex) {
        if (memoized.containsKey(fibIndex)) return memoized.get(fibIndex);
        else {
            int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
            memoized.put(fibIndex, answer);
            return answer;
        }
    }
}

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

Апплет

Аплеты Java - это программы, которые были встроены в другие приложения, обычно на веб-страницу, отображаемую в веб-браузере. API-интерфейс Java-апплета устарел с версии Java 9 в 2017 году.

Сервлет

Технология сервлетов 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, при первом обращении к нему. После этого сгенерированный сервлет создает ответ.

Приложение Swing

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

Приложение JavaFX

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

Дженерики

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

В 2016 году система типов Java оказалась несостоятельной .

Критика

Критика, направленная на Java, включает реализацию универсальных шаблонов, скорость, обработку беззнаковых чисел, реализацию арифметики с плавающей запятой и историю уязвимостей безопасности в основной реализации Java VM HotSpot .

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

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

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

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

Реализации

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

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

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

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

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

Android

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

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

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

использованная литература

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

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

  • Словарное определение Java в Викисловаре
  • СМИ, связанные с Java, на Викискладе?
  • Программирование на Java в Викиучебнике
  • Учебные материалы по Java в Викиверситете