Частина інформації в цій статті застаріла. Ви можете допомогти, оновивши її. Можливо, сторінка обговорення містить зауваження щодо потрібних змін.
Мова програмування Java мала декілька змін починаючи з JDK 1.0, а також багато доповнень в класах та пакетах стандартної бібліотеки. Починаючи з J2SE розвитком Java управляють Java Community Proccess (JCP), які використовують Java Specification Requests (JSRs), щоб запропоновувати та вказувати доповнення та зміни у платформі Java. Мова визначається специфікацією JLS, змінами у JLS управляють JSR 901 [Архівовано 15 червня 2020 у Wayback Machine.].
В доповнення до змін мови, найбільш драматичні зміни відбувалися у Java Class Library протягом багатьох років. Бібліотека виросла з декількох сотень класів в JDK 1.0 до більш ніж трьох тисяч в J2SE5. З'явилися нові API (Swing та Java 2D[en]), крім цього, багато класів та методів з JDK 1.0 застаріли. Деякі програми дозволяють перетворення програм на Java з однієї версії до іншої (наприклад Java 5.0 портована до 1.4).
Після релізу Java 7, Oracle пообіцяли повернутись до дворічного циклу випуску. Тим не менше, у 2013 Oracle оголосили, що вони бажають відкласти випуск Java 8 на один рік для того, щоб виправити помилки, пов'язані з безпекою Java.
Реліз
Рік
JDK Beta
1995
JDK 1.0
1996
JDK 1.1
1997
J2SE 1.2
1998
J2SE 1.3
2000
J2SE 1.4
2002
J2SE 5.0
2004
Java SE 6
2006
Java SE 7
2011
Java SE 8
2014
Java SE 9
2017
Java SE 10
2018
JDK Alpha and Beta
Перші альфа та бета-релізи Java у 1995 мали дуже нестабільні API та ABI. Браузер, що підтримував Java, мав назву WebRunner.
JDK 1.0
Перша версія була випущена 23 січня 1996 року і називалася "дуб". Перша стабільна версія JDK 1.0.2 називалася Java 1.
JDK 1.1
Основні доповнення в релізі 19 лютого 1997 року включали:
Кодове ім'я - Playground. Реліз відбувся у грудні 1998 року. Назва версії "J2SE" (Java 2 Platform, Standard Edition) замінив JDK, щоб відрізнити базову платформу J2EE (Java 2 Platform, Enterprise Edition) і J2ME (Java 2 Platform, Micro Edition). Це був дуже важливий реліз Java, так як він втричі збільшив розмір платформи Java до 1520 класів в 59 пакетах. Головні доповнення включали:
Varargs: останній параметр може бути оголошений, використовуючи три точки (наприклад void drawtext(String... lines)). За допомогою цього метод може приймати будь-яку кількість параметрів.
Цикл for each: зроблений для перебору елементів колекцій, що реалізовують інтерфейс Iterable (specified by JSR 201)
Спрощено оголошення методів зі змінною кількістю аргументів.
Бінарні цілі літерали
Нижнє підкреслення у числових літералах
Catching multiple exception types and rethrowing exceptions with improved type checking
Інструменти для паралельного програмування під JSR 166[
Нова файлова I/O бібліотека, що підтримує різні файлові системи, метадані файлу та символічні посилання. З'явилися нові пакети: java.nio.file,java.nio.file.attribute and java.nio.file.spi
Timsort, що використовується, щоб відсортувати колекції та масиви об'єктів замість merge sort
На думку розробників мови програмування Java, 8-ма версія стала найбільшим кроком її еволюції. Порівняно невелика кількість нових засобів — лямбда вирази, посилання на методи та функційні інтерфейси разом перетворили Java на багатопарадигмову мову програмування: на додачу до об'єктно-орієнтованого з'явилися елементи функційного програмування. Разом з мовою еволюції зазнали й супутні програмні бібліотеки[2]. Так, наприклад, в API для колекцій додано підтримку Stream API, завдяки чому можуть відбуватися масові операції над колекціями[3].
JSR 308: анотації для типів даних. Анотації можна виконати у всіх випадках використання змінних цього типу. Таким чином поліпшено перевірку правильності коду.
JSR 310: API для часу та дат
JSR 335: лямбда вирази та методи за замовченням (англ.default methods). Методи за замовченням дозволяють зберегти бінарну сумісність зі старим кодом при додаванні нових можливостей до інтерфейсів програмних бібліотек[3]
Посилання на методи: разом з лямбда виразами спрощують написання лямбда виразів[3]
Роботу з беззнаковими цілими числами (32- та 64- бітні java.lang.Integer та Long відповідно)[5]
Змін також зазнали
JSR 003: Java Management Extensions
JSR 114: JDBC Rowsets
JSR 160: JMX Remote API
JSR 173: Потокове API для XML (SAX)
JSR 199: Java Compiler API
JSR 206: Java API для обробки XML документів
JSR 221: JDBC 4.0
JSR 269: Pluggable Annotation-Processing API
Був замінений рушій для виконання скриптів JavaScript, замість Rhino обраний Nashorn[3]
У версії не було реалізовано модульність платформи Java, проте було вжито деяких заходів для полегшення її реалізації у наступних релізах[4]. Так, з'явилися «компактні профілі» (англ.Compact Profiles), які дозволяють реалізувати роботу програм на неповних реалізаціях платформи Java[3].
Java SE 9
На JavaOne 2011 Oracle обговорювали функції, які вони збираються додати до Java 9, серед яких були: покращення підтримки багатогігабайтних куп, краща інтеграція машинного коду та JVM, що може сама себе налаштовувати. На початку 2016 реліз було перенесено на березень 2017.
JSR 294: Модульна організація JDK під проектом Jigsaw (Java Module System)
JEP 317: експериментальний JIT компілятор на Java[8]
JEP 310: можливість спільного використання класів різними додатками для Java[9]
Цей реліз став релізом з новими функціями (англ.feature release) та прийшов на заміну релізу 9. Наступний реліз з тривалою підтримкою (англ.long-term support, LTS) матиме номер 11 та очікується у вересні 2018 року[10].
Відтепер компанія планує випускати LTS реліз раз на три роки, демонстрації нових функцій (англ.feature release) кожні шість місяців, а оновлення — щокварталу. Після релізу Java 11 у вересні 2018 року наступним LTS релізом стане Java 17, випуск якої заплановано на вересень 2021 року[10].
↑James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley (13 лютого 2015). Preface to the Java SE 8 Edition. The Java® Language Specification. Java SE 8 Edition(PDF). Oracle America, Inc. Архів оригіналу(PDF) за 21 жовтня 2014. Процитовано 3 березня 2017.