Мова програмування Java мала декілька змін починаючи з JDK 1.0, а також багато доповнень в класах та пакетах стандартної бібліотеки. Починаючи з J2SE розвитком Java управляють Java Community Proccess (JCP), які використовують Java Specification Requests (JSRs), щоб запропоновувати та вказувати доповнення та зміни у платформі Java. Мова визначається специфікацією JLS, змінами у JLS управляють JSR 901 .

В доповнення до змін мови, найбільш драматичні зміни відбувалися у Java Class Library протягом багатьох років. Бібліотека виросла з декількох сотень класів в JDK 1.0 до більш ніж трьох тисяч в J2SE5. З'явилися нові API (Swing та ), крім цього, багато класів та методів з 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 2014Java SE 92017 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 року включали: масштабне переоснащення моделі подій AWT були додані внутрішні класи JavaBeans JDBC RMI рефлексія, що підтримувала тільки самоаналіз, зміни під час виконання програми не були можливими JIT (Just In Time) compiler на Microsoft Windows, розроблений для JavaSoft компанією Semantec. Інтернаціоналізація та підтримка Юнікоду

J2SE 1.2 Кодове ім'я — 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 пакетах. Головні доповнення включали: strictfp (ключове слово) графічний API Swing був об'єднаний з основними класами Віртуальна машина вперше була оснащена JIT компілятором Java-аплет Java IDL,  IDL реалізація для функціональної сумісності CORBA Колекції

J2SE 1.3 Кодове ім'я Kestrel. Найбільш помітними змінами в релізі 8 травня 2000 року були: включена HotSpot JVM (HotSpot JVM вперше була випущена в квітні 1999 для J2SE 1.2 JVM) RMI було змінено, щоб забезпечити підтримку сумісності CORBA Java Naming and Directory Interface (JNDI) було включено до основних бібліотек (раніше доступний як розширення) Java Platform Debugger Architecture (JPDA) JavaSound Синтетичні проксі-класи

J2SE 1.4 Кодове ім'я Merlin. Реліз 6 лютого 2002 року. Головні зміни включали: Зміни мови assert(вказане в JSR 41) Покращення бібліотеки Регулярні вирази за зразком регулярних виразів Perl Замикання виключень дозволяє виключенням інкапсулювати інші виключення Підтримка протоколу IPv6 Неблокуюче IO (названо New Input/Output, NIO) (вказано в JSR 51) API для журналювання (вказано в JSR 47) I/O API для зчитування та записку картинок в таких форматах як JPEG та PNG Інтегрований XML парсер та XSLTпроцесор(JAXP) (вказано в JSR 5 та JSR 63) Інтегровані розширення для безпеки та криптографії (JCE, JSSE, JAAS) Java Web Start (вказано в JSR 56) Preferences API (java.util.prefs)

J2SE 5.0 Кодове ім'я Tiger. Реліз 30 вересня 2004 року був також пронумерований як 1.5. Ця версія була розроблена під JSR 176.

Було додано значну кількість нових можливостей: Generics: забезпечують безпеку типів для колекцій та усувають необхідність приведення типів (вказано в JSR 14) Метадані: також називаються анотації, дозволяють додавати додаткову інформацію для класів, методів і т. д. Autoboxing/unboxing: автоматичне приведення примітивних типів до їх обгорток(вказано в JSR 201) Enumerations: впорядкований лист значень Varargs: останній параметр може бути оголошений, використовуючи три точки (наприклад void drawtext(String... lines)). За допомогою цього метод може приймати будь-яку кількість параметрів. Цикл for each: зроблений для перебору елементів колекцій, що реалізовують інтерфейс Iterable (specified by JSR 201) Покращена багатонитевість Статичні імпорти Також були покращення у основній бібліотеці: Автоматична генерація заглушки для об'єктів RMI Оновлено Swing Інструменти для паралельного виконання програм в java.util.concurrent Клас Scanner для зчитування даних з різних потоків та буферів

Java SE 6 Кодове ім'я Mustang. Випущена 11 грудня 2006 року. Ця версія була розроблена під JSR 270.

Головні зміни включали: Підтримка скриптів(JSR 223): API для інтеграції зі скриптовими мова програмування та вбудована інтеграція Mozilla JavaScript Rhino. Покращення основної платформи та Swing. Покращена підтримка вебсервісів через JAX-WS (JSR 224). JDBC 4.0 (JSR 221). Java Compiler API (JSR 199): an API. що дозволяє програмі вибирати та викликати компілятор програмно. Покращення JAXB до версії 2.0. Підтримка вбудованих анотацій(JSR 269). Покращення графічного інтерфейсу. Покращення JVM: синхронізація та оптимізація компілятора

Java SE 7 Java 7 (кодове ім'я Dolphin) стала доступною для розробників 28 липня 2011 року.

Доповнення в Java 7 включали: Підтримка JVM для динамічних мов Стиснуті 64-бітні вказівники Зміни згруповані під ім'я Coin: Strings у switch Автоматичне управління ресурсами в try З'явився оператор <> Спрощено оголошення методів зі змінною кількістю аргументів. Бінарні цілі літерали Нижнє підкреслення у числових літералах 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 XRender для Java 2D Нові API для графіки Підтримка нових мережевих протоколів, включаючи SCTP та Sockets Direct Protocol Upstream оновлення до XML та Unicode Набір правил для розгортання

Java SE 8 Java 8 була випущена 18 березня 2014 року.

На думку розробників мови програмування Java, 8-ма версія стала найбільшим кроком її еволюції. Порівняно невелика кількість нових засобів — лямбда вирази, посилання на методи та функційні інтерфейси разом перетворили Java на багатопарадигмову мову програмування: на додачу до об'єктно-орієнтованого з'явилися елементи функційного програмування. Разом з мовою еволюції зазнали й супутні програмні бібліотеки. Так, наприклад, в API для колекцій додано підтримку Stream API, завдяки чому можуть відбуватися масові операції над колекціями.

Ця версія включає:

JSR 308: анотації для типів даних. Анотації можна виконати у всіх випадках використання змінних цього типу. Таким чином поліпшено перевірку правильності коду. JSR 310: API для часу та дат JSR 335: лямбда вирази та методи за замовченням (). Методи за замовченням дозволяють зберегти бінарну сумісність зі старим кодом при додаванні нових можливостей до інтерфейсів програмних бібліотек Посилання на методи: разом з лямбда виразами спрощують написання лямбда виразів Роботу з беззнаковими цілими числами (32- та 64- бітні java.lang.Integer та Long відповідно)

Змін також зазнали 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

У версії не було реалізовано модульність платформи Java, проте було вжито деяких заходів для полегшення її реалізації у наступних релізах. Так, з'явилися «компактні профілі» (), які дозволяють реалізувати роботу програм на неповних реалізаціях платформи Java.

Java SE 9 На JavaOne 2011 Oracle обговорювали функції, які вони збираються додати до Java 9, серед яких були: покращення підтримки багатогігабайтних куп, краща інтеграція машинного коду та JVM, що може сама себе налаштовувати. На початку 2016 реліз було перенесено на березень 2017. JSR 294: Модульна організація JDK під проектом Jigsaw (Java Module System) JSR 354: API для грошей та валюти JEP 222: jshell(Java REPL) Модуляризація Були також плани додати автоматичне розпаралелювання, використовуючи OpenCL та реактивні потоки.

Java SE 10 OpenJDK 10 був випущений 20 березня 2018 року, в новий випуск увійшло 12 нововведень. Серед іншого: JEP 286: виведення типів для локальних змінних JEP 317: експериментальний JIT компілятор на Java JEP 310: можливість спільного використання класів різними додатками для Java

Цей реліз став релізом з новими функціями () та прийшов на заміну релізу 9. Наступний реліз з тривалою підтримкою (, LTS) матиме номер 11 та очікується у вересні 2018 року.

Відтепер компанія планує випускати LTS реліз раз на три роки, демонстрації нових функцій () кожні шість місяців, а оновлення — щокварталу. Після релізу Java 11 у вересні 2018 року наступним LTS релізом стане Java 17, випуск якої заплановано на вересень 2021 року.

Примітки

Див. також Java