Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

История [ править ]

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

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

Sun Microsystems выпустила первую общедоступную реализацию под названием Java 1.0 в 1996 году. [27] Она обещала функциональность Write Once, Run Anywhere ( 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, а также даты их выпуска:

Редакции [ править ]

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

  • Java Card для смарт-карт. [42]
  • Платформа Java, Micro Edition (Java ME) - ориентирована на среды с ограниченными ресурсами. [43]
  • Платформа Java, Standard Edition (Java SE) - ориентирована на среды рабочих станций. [44]
  • Платформа Java, Enterprise Edition (Java EE) - предназначена для крупных распределенных корпоративных сред или Интернет-сред. [45]

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

Sun также представила выпуск под названием Personal 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], а некоторые процессоры на базе ARM могут иметь аппаратную поддержку для выполнения байт-кода Java через опцию Jazelle , хотя в текущих реализациях поддержка в основном отсутствует ARM.

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

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

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

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

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

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

Java содержит несколько типов сборщиков мусора. По умолчанию HotSpot использует параллельный сборщик мусора . [53] Однако есть также несколько других сборщиков мусора, которые можно использовать для управления кучей. Для 90% приложений на Java достаточно сборщика мусора Concurrent 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), такими как Eclipse, что позволяет разработчикам получать доступ к документации в среде IDE.

Пример "Привет, мир" [ править ]

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

открытый  класс  HelloWorldApp  {  public  static  void  main ( String []  args )  {  System . из . println ( «Привет, мир!» );  // Выводит строку на консоль.  } }

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

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

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

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

Ключевое слово 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.

Пример с методами [ править ]

// Это пример однострочного комментария с двумя косыми чертами/ * * Это пример многострочного комментария с использованием косой черты и звездочки. * Этот тип комментария можно использовать для хранения большого количества информации или для деактивации * кода, но очень важно не забыть закрыть комментарий. * /пакет  fibsandlies ;import  java.util.Map ; import  java.util.HashMap ;/ ** * Это пример комментария Javadoc; Javadoc может составлять документацию * из этого текста. Комментарии Javadoc должны непосредственно предшествовать документируемому классу, методу * или полю. * @author Wikipedia Volunteers * / публичный  класс  FibCalculator  расширяет  Фибоначчи,  реализует  Калькулятор  {  приватная  статическая  карта < Integer ,  Integer >  memoized  =  new  HashMap <> (); / *  * Основной метод, написанный следующим образом, используется JVM в качестве отправной точки  * для программы.  * /  public  static  void  main ( String []  args )  {  мемоизированный . положим ( 1 ,  1 );  памятный . положим ( 2 ,  1 );  Система . из . println ( фибоначчи ( 12 ));  // Получаем 12-е число Фибоначчи и выводим в консоль  } / **  * Пример метода, написанного на Java, заключенного в класс.  * Учитывая неотрицательное число FIBINDEX, возвращает  * N-е число Фибоначчи, где N равно FIBINDEX.  *  * @param fibIndex Индекс числа Фибоначчи * @ возврат числа  Фибоначчи  * /  public  static  int  fibonacci ( int  fibIndex )  {  if  ( memoized . containsKey ( fibIndex ))  return  memoized . получить ( fibIndex );  else  {  int ответ  =  фибоначчи ( fibIndex  -  1 )  +  фибоначчи ( fibIndex  -  2 );  памятный . положить ( fibIndex ,  ответ );  ответный  ответ ;  }  } }

Специальные классы [ править ]

Аплет [ править ]

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

Сервлет [ править ]

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

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

  • API Java для RESTful Web Services (JAX-RS 2.0) полезно для AJAX, JSON и REST услуг, а также
  • API Java для XML Web Services (JAX-WS) , полезной для SOAP Web Services .

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

JavaServer Pages [ править ]

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

Приложение Swing [ править ]

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

Приложение JavaFX [ править ]

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

Дженерики [ править ]

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

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

Критика [ править ]

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

Библиотеки классов [ править ]

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

  • Основные библиотеки, которые включают:
    • IO / NIO
    • Сеть (ПРИМЕЧАНИЕ: новый HTTP-клиент, начиная с Java 11)
    • Отражение
    • Параллелизм
    • Дженерики
    • Скрипты / компилятор
    • Функциональное программирование (Lambda, Streaming)
    • Библиотеки коллекций, которые реализуют структуры данных, такие как списки , словари , деревья , наборы , очереди и двусторонние очереди или стеки [73]
    • Библиотеки обработки XML (синтаксический анализ, преобразование, проверка)
    • Безопасность [74]
    • Библиотеки интернационализации и локализации [75]
  • Библиотеки интеграции, которые позволяют автору приложения взаимодействовать с внешними системами. Эти библиотеки включают:
    • Java Database Connectivity (JDBC) API для доступа к базам данных
    • Интерфейс именования и каталогов Java (JNDI) для поиска и обнаружения
    • RMI и CORBA для разработки распределенных приложений
    • JMX для управления и мониторинга приложений
  • Библиотеки пользовательского интерфейса , которые включают:
    • (Тяжелый или собственный ) Abstract Window Toolkit (AWT), который предоставляет компоненты графического интерфейса , средства для размещения этих компонентов и средства для обработки событий от этих компонентов.
    • (Легкие) библиотеки Swing , которые построены на AWT, но предоставляют (неродные) реализации виджетов AWT
    • API для захвата, обработки и воспроизведения звука
    • JavaFX
  • Зависящая от платформы реализация виртуальной машины Java, которая является средством, с помощью которого выполняются байт-коды библиотек Java и сторонних приложений.
  • Плагины, которые позволяют запускать апплеты в веб-браузерах.
  • Java Web Start , который позволяет эффективно распространять Java-приложения среди конечных пользователей через Интернет.
  • Лицензирование и документация

Документация [ править ]

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

Реализации [ править ]

Корпорация 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. [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 .

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

Противоречие [ править ]

Использование технологии 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]

См. Также [ править ]

  • C #
  • C ++
  • Dalvik , используемый в старых версиях Android, заменен на среду выполнения Android без JIT
  • Детерминированная параллельная Java
  • Список виртуальных машин Java
  • Список Java API
  • Список языков JVM

Сравнение Java с другими языками [ править ]

  • Сравнение C # и Java
  • Сравнение Java и C ++

Ссылки [ править ]

  1. ^ Бинсток, Эндрю (20 мая 2015). «20 лет инноваций Java» . Forbes . Архивировано 14 марта 2016 года . Проверено 18 марта 2016 года .
  2. ^ "Прибытие Java 15!" . Oracle . 15 сентября 2020 . Проверено 15 сентября 2020 года .
  3. ^ a b c d Барбара Лисков с Джоном Гуттагом (2000). Разработка программ на Java - абстракция, спецификация и объектно-ориентированный дизайн . США, Эддисон Уэсли. ISBN 9780201657685.
  4. Чаудхари, Гарри Х. (28 июля 2014 г.). «Взломать Java Programming Interview :: 2000+ Java Interview Que / Ans» . Проверено 29 мая 2016 года .
  5. ^ В Java 5.0 добавлено несколько новых языковых функций ( улучшенный цикл for , автобокс , 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. ^ "Азия языков программирования: Modula-3" . Computerworld.com.au. Архивировано из оригинала на 5 января 2009 года . Проверено 9 июня 2010 года .
  9. Никлаус Вирт заявлял о ряде публичных мероприятий, например, на лекции в Политехническом музее в Москве в сентябре 2005 г. (существует несколько независимых источников из первых рук на русском языке, например, с аудиозаписью: Филиппова, Елена (22 сентября 2005 г.) ). «лекция Никлауса Вирта в политехническом музее в Москве» .), что группа разработчиков Sun Java лицензировала исходные коды компилятора Oberon за несколько лет до выпуска Java и проверила его: (относительная) компактность, безопасность типов, сборка мусора, отсутствие множественного наследования для классов - все эти ключевые общие принципы дизайна функции являются общими для Java и Oberon.
  10. ^ Патрик Нотон цитирует Objective-C как сильное влияние на дизайн языка программирования Java, заявляя, что известные прямые производные включают интерфейсы Java (производные от протокола Objective-C) и примитивные классы-оболочки. [3] Архивировано 13 июля 2011 г., в Wayback Machine.
  11. ^ TechMetrix Research (1999). «История Java» (PDF) . Отчет о серверах приложений Java . Архивировано из оригинала (PDF) 29 декабря 2010 года . Проект продолжался под названием green, а язык был основан на старой модели UCSD Pascal , которая позволяет генерировать интерпретирующий код.
  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. ^ a b c «1.2 Цели проектирования языка программирования Java ™» . Oracle. 1 января 1999 года. Архивировано 23 января 2013 года . Проверено 14 января 2013 года .
  19. ^ a b Макмиллан, Роберт (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. ^ Byous, Джон (ок. 1998). «Технология Java: первые годы» . Sun Developer Network . Sun Microsystems . Архивировано из оригинального 20 апреля 2005 года . Проверено 22 апреля 2005 года .
  24. ^ Объектно-ориентированное программирование «История технологии Java» . Sun Developer Network . c. 1995. Архивировано 10 февраля 2010 года . Проверено 30 апреля 2010 года .
  25. Мерфи, Кирон (4 октября 1996 г.). «Так почему они решили назвать это Java?» . JavaWorld . Проверено 13 июля 2020 .
  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) . Архивировано 13 января 2014 года (PDF) . Проверено 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. ^ "Эволюционирующая роль Солнца как евангелиста Java" . O'Reilly Media . Архивировано 15 сентября 2010 года . Проверено 2 августа 2009 года .
  35. ^ «Oracle и Java» . oracle.com . Корпорация Oracle. Архивировано из оригинала на 31 января 2010 года . Проверено 23 августа 2010 года . Oracle является ведущим и решительным сторонником Java с момента ее появления в 1995 году и берет на себя новую роль управляющего технологией Java с неуклонной приверженностью созданию сообщества участия и прозрачности.
  36. Гослинг, Джеймс (9 апреля 2010 г.). «Пора двигаться дальше ...» По новой дороге . Архивировано из оригинала 5 ноября 2010 года . Проверено 16 ноября 2011 года .
  37. ^ Тема, Далибор. «Переход к сети без плагинов» . Архивировано 16 марта 2016 года . Проверено 15 марта 2016 года .
  38. ^ «Узнайте о технологии Java» . Oracle. Архивировано 24 ноября 2011 года . Проверено 21 ноября 2011 года .
  39. ^ «План поддержки Oracle Java SE» . Oracle. 13 мая 2020 . Проверено 11 декабря 2020 года .
  40. ^ "JAVASOFT SHIPS JAVA 1.0" . sun.com . Архивировано из оригинального 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. ^ Jelovic, Деян. «Почему 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. DOI : 10,1145 / 3073416 . ISSN 1084-4309 . S2CID 11150290 .  
  51. ^ "Исключение NullPointerException" . 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 Platform 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) . Архивировано 28 ноября 2016 года (PDF) . Проверено 20 февраля 2017 года .
  66. ^ Арнольд, Кен. «Дженерики считаются вредными» . java.net. Архивировано из оригинального 10 -го октября 2007 года . Проверено 10 сентября 2015 года . Дополнительные комментарии к исходной статье доступны в более ранних снимках архива.
  67. ^ Jelovic, Деян. «Почему 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) . Электротехника и информатика, Калифорнийский университет в Беркли. Архивировано 5 сентября 2012 года (PDF) . Проверено 4 июня 2011 года .
  70. ^ "Вы проверили Java?" . Архивировано из оригинального 21 сентября 2012 года . Проверено 23 декабря 2011 года .
  71. ^ Cadenhead, Роджерс (20 ноября 2017), понимание того, как Java программы работы , извлекаться +26 March, 2 019
  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 Tool» . Технологическая сеть Oracle . Oracle. Архивировано 18 декабря 2014 года . Проверено 18 декабря 2014 года .
  77. ^ NICCOLAI, Джеймс (24 января 2001). «Sun и Microsoft урегулировали судебный процесс по Java» . JavaWorld . Служба новостей IDG . Проверено 13 июля 2020 .
  78. ^ Ван Гурп, Jilles (13 ноября 2007). «Google Android: первые впечатления и критика» . Javalobby . Проверено 7 марта 2009 года . Честно говоря, я не понимаю, почему Google намеревается игнорировать огромное количество существующих реализаций. Мне это кажется плохим случаем «изобретено не здесь». В конечном итоге это замедлит принятие. Для мобильного мира уже существует слишком много платформ Java, и это еще одна
  79. Маллин, Джо. «Google виновен в нарушении прав в суде над Oracle; будущие юридические головные боли маячат» . Закон и беспорядок . Ars Technica. Архивировано 8 мая 2012 года . Проверено 8 мая 2012 года .
  80. Перейти ↑ Mullin, Joe (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. ^ Farivar, Сайрус (27 марта 2018). « « Использование Google пакетов Java API было несправедливым », - постановил апелляционный суд» . Ars Technica . Проверено 6 августа 2019 года .
  84. Ли, Тимоти (23 апреля 2019 г.). «Google просит Верховный суд отменить катастрофическое решение по авторским правам API» . Ars Technica . Проверено 23 апреля 2019 года .

Цитированные работы [ править ]

  • Гослинг, Джеймс; Джой, Билл; Стил, Гай; Браха, Гилад; Бакли, Алекс (2014). Спецификация языка Java® (PDF) (Java SE 8 ed.).
  • Гослинг, Джеймс; Джой, Билл ; Стил, Гай Л., младший ; Браха, Гилад (2005). Спецификация языка Java (3-е изд.). Эддисон-Уэсли. ISBN 0-321-24678-0.
  • Линдхольм, Тим; Йеллин, Франк (1999). Спецификация виртуальной машины Java (2-е изд.). Эддисон-Уэсли. ISBN 0-201-43294-3.

Внешние ссылки [ править ]

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