От 1.0 до 17 Java измина дълъг път.

Java е един от най-широко използваните езици за програмиране в света и премина през няколко версии и актуализации от първоначалното си пускане през 1995 г. В тази публикация в блога ще разгледаме еволюцията на версиите на Java през годините.

Java 1.0

Java 1.0 беше първата версия на Java, издадена през 1995 г. Тя представи Java Virtual Machine (JVM) и набор от основни библиотеки за изграждане на Java приложения.

Java 1.1

Java 1.1 беше пусната през 1997 г. и добави няколко нови функции, включително вътрешни класове, JavaBeans и Java Foundation Classes (JFC).

Java 1.2

Java 1.2, известна също като Java 2, беше пусната през 1998 г. Тя въведе няколко нови функции, включително инструментариума Swing GUI, Java Naming and Directory Interface (JNDI) и Java Cryptography Extension (JCE).

Java 1.3

Java 1.3 беше пусната през 2000 г. и добави няколко нови функции, включително Java Sound API, Java Naming and Directory Interface (JNDI) и Java Secure Socket Extension (JSSE).

Java 1.4

Java 1.4 беше пусната през 2002 г. и добави няколко нови функции, включително механизма за твърдения, технологията Java Web Start и Java Management Extensions (JMX).

Java 5 (J2SE 5.0)

Java 5, известна също като J2SE 5.0, беше пусната през 2004 г. Тя въведе няколко нови функции, включително генерични, анотации, подобрен цикъл for и автоматично поставяне в кутия/разопаковане.

Java 6 (J2SE 6)

Java 6, известна още като J2SE 6, беше пусната през 2006 г. Тя добави няколко нови функции, включително поддръжка на скриптове, JDBC 4.0 и поддръжка за pluggable анотации.

Java 7 (J2SE 7)

Java 7, известна още като J2SE 7, беше пусната през 2011 г. Тя въведе няколко нови функции, включително оператора try-with-resources, диамантения оператор за генерични продукти и рамката Fork/Join за паралелно програмиране.

Java 8

  1. Ламбда изрази: Ламбда изразите ви позволяват да пишете по-сбит и изразителен код за функционално програмиране. Те се използват за представяне на функционални интерфейси и могат да се използват за писане на код, който е по-декларативен и по-малко зависим от променливо състояние.
  2. API на поток: API на поток предоставя функционален начин за обработка на колекции от данни. Потоците се създават от колекции или други източници на данни и могат да се използват за филтриране, картографиране и намаляване на данните по декларативен начин. Потоците улесняват писането на код, който е по-сбит и изразителен от традиционните for-цикли.
  3. Методи по подразбиране: Java 8 въведе възможността за дефиниране на методи по подразбиране в интерфейсите. Тази функция ви позволява да добавяте нови методи към съществуващи интерфейси, без да нарушавате обратната съвместимост.
  4. API за дата и час: Java 8 представи нов API за дата и час, който предоставя по-интуитивен и гъвкав начин за работа с дати и часове.
  5. Незадължителен клас: Незадължителният клас осигурява по-стабилен и безопасен начин за обработка на нулеви стойности в Java. Този клас насърчава по-добри практики за кодиране, като принуждава разработчиците да обработват изрично нулеви стойности.
  6. Препратки към методи: Препратките към методи ви позволяват да препращате към методи или конструктори, без да ги извиквате. Те могат да се използват, за да направят кода по-сбит и изразителен, особено когато работите с ламбда изрази.

Като цяло, Java 8 въведе няколко нови функции и подобрения, които улесняват писането на код, който е по-сбит, изразителен и поддържаем. Тези функции се превърнаха в основни инструменти за разработчиците на Java и значително подобриха възможностите на езика за функционално програмиране.

Java 9

  1. Модули: Java 9 въведе концепцията за модули, която ви позволява да създавате самостоятелни пакети от код, които могат да се използват за изграждане на по-модулни и мащабируеми приложения. Тази функция улеснява управлението на зависимостите и подобрява производителността.
  2. JShell: JShell е нов REPL (Read-Eval-Print-Loop) инструмент, който ви позволява да пишете и изпълнявате Java код интерактивно. Тази функция улеснява тестването на идеи и изследването на функциите на Java, без да се налага да създавате пълна програма на Java.
  3. API на процеси: Java 9 представи нов API на процеси, който улеснява управлението и контрола на процесите на операционната система от Java код. Тази функция осигурява по-последователен и интуитивен начин за взаимодействие с операционната система.
  4. HTTP/2 поддръжка: Java 9 добави поддръжка за HTTP/2 протокола, който осигурява по-бърза и по-ефективна комуникация в мрежата.
  5. JAR файлове с множество версии: Java 9 въведе нов формат за JAR файлове, който ви позволява да включвате различни версии на един и същи клас за различни версии на Java. Тази функция улеснява поддържането на обратна съвместимост и поддръжката на множество версии на Java.
  6. Подобрена сигурност: Java 9 въведе няколко подобрения в сигурността, включително по-силни алгоритми за криптиране и подобрени протоколи за сигурност.

Като цяло Java 9 въведе няколко нови функции и подобрения, които улесняват писането на по-модулни, мащабируеми и сигурни Java приложения.

Java 10

  1. Извод за тип локална променлива: Java 10 въведе възможността да се използва ключовата дума „var“ за деклариране на локални променливи с изведени типове. Тази функция улеснява писането на по-сбит и четим код.
  2. Интерфейс за събиране на боклук: Java 10 представи нов интерфейс за събиране на боклук, който позволява на разработчиците да пишат свои собствени персонализирани събирачи на боклук. Тази функция осигурява повече гъвкавост и контрол върху управлението на паметта.
  3. Споделяне на данни от клас на приложение: Java 10 въведе възможността за създаване на споделен архив от данни от клас, който може да се използва за подобряване на времето за стартиране на приложението. Тази функция може да намали времето, необходимо за стартиране на приложението, и да подобри цялостната производителност.
  4. Подобрени предупреждения на компилатора:Java 10 въведе няколко нови предупреждения на компилатора, които помагат да се идентифицират потенциални проблеми в кода. Тази функция може да помогне за подобряване на качеството на кода и предотвратяване на грешки, преди те да се появят.
  5. Локални ръкостискания на нишки: Java 10 въведе нов механизъм за извършване на ръкостискания между нишки. Тази функция може да подобри производителността на приложения, които разчитат в голяма степен на синхронизиране на нишки.
  6. Експериментални функции: Java 10 въведе няколко експериментални функции, включително компилатора Graal JIT и ZGC (Z Garbage Collector). Тези характеристики осигуряват подобрена производителност и мащабируемост за Java приложения.

Като цяло Java 10 въведе няколко нови функции и подобрения, които подобряват производителността, гъвкавостта и четливостта за Java разработчиците.

Java11

Java 11, известна още като JDK 11, беше пусната през септември 2018 г. Тя представи няколко нови функции и подобрения, включително:

  1. Синтаксис на локална променлива за ламбда параметри: Java 11 ви позволява да използвате ключовата дума „var“, за да декларирате параметрите на ламбда израз.
  2. API на HTTP клиент: Java 11 включва нов API на HTTP клиент, който поддържа HTTP/2 и WebSocket протоколи и предоставя по-добра поддръжка за реактивно програмиране.
  3. Колектор за боклук Epsilon: Java 11 въвежда нов експериментален колектор за боклук, наречен Epsilon GC, който е предназначен за сценарии, при които колекторът за боклук без операции е полезен, като например при тестване и краткотрайни приложения.
  4. Базиран на Nest контрол на достъпа: Java 11 въвежда нов механизъм за налагане на контрол на достъпа между класове, които са логически част от един и същ кодов модул, наречен Nestmates.
  5. Flight Recorder: Java 11 включва инструмента Flight Recorder, който преди беше достъпен само в търговската версия на Java. Позволява на разработчиците да записват и анализират събития на приложения, като използване на процесора и разпределение на паметта.
  6. ZGC: Java 11 представя Z Garbage Collector (ZGC), който е предназначен за широкомащабни приложения и може да обработва купища с размер от няколко гигабайта до няколко терабайта.
  7. TLS 1.3: Java 11 включва поддръжка за протокола за защита на транспортния слой (TLS) 1.3, който осигурява подобрена сигурност и производителност в сравнение с по-ранните версии на TLS.

Като цяло Java 11 носи няколко нови функции и подобрения, които подобряват производителността, сигурността и продуктивността на разработчиците. Препоръчително е разработчиците да са в крак с най-новата версия на Java, за да се възползват от тези нови функции и подобрения.

Java12

Java 12 беше пусната през март 2019 г. и въведе няколко нови функции и подобрения, включително:

  1. Изрази за превключване: Java 12 въведе нова функция за предварителен преглед, наречена „Изрази за превключване“, която предоставя по-сбит и гъвкав синтаксис за изрази за превключване. Тази нова функция позволява на разработчиците да използват изрази за превключване като изрази, а не просто изрази.
  2. JVM Constants API: Java 12 въведе нов API, наречен „JVM Constants API“, който позволява на разработчиците да дефинират константи, които могат да се използват по време на изпълнение без необходимост от отразяване. Този нов API предоставя по-ефективен и сигурен начин за дефиниране на константи.
  3. Microbenchmark Suite: Java 12 представи нов пакет за микробенчмарк, наречен „JMH (Java Microbenchmark Harness)“, който позволява на разработчиците лесно да пишат и изпълняват микробенчмаркове. Тази нова функция предоставя по-точен начин за измерване на подобренията в производителността в кода.
  4. CDS архиви по подразбиране: Java 12 въведе архиви за споделяне на данни от класове (CDS) по подразбиране, което позволява на разработчиците да създават предварително компилирани, споделени архиви на често използвани данни от класове. Тази нова функция може да подобри времето за стартиране и да намали използването на паметта за широкомащабни приложения.
  5. Колектор за боклук Shenandoah: Java 12 включваше колектор за боклук Shenandoah (GC), който е проектиран да осигурява време за ниска пауза за големи купчини. Този нов GC алгоритъм може да помогне за намаляване на въздействието на събирането на отпадъци върху производителността на приложението.

Като цяло Java 12 предостави някои полезни нови функции и подобрения за разработчиците, включително подобрения в синтаксиса, производителността и използването на паметта. Струва си да се отбележи, че някои от тези функции бяха въведени като функции за предварителен преглед и може да подлежат на промяна в бъдещи версии.

Java13

Java 13 беше пусната през септември 2019 г. и въведе няколко нови функции и подобрения, включително:

  1. Текстови блокове: Java 13 въведе нова функция за визуализация, наречена „Текстови блокове“, която предоставя по-сбит и четим синтаксис за дефиниране на многоредови низове в кода.
  2. Превключване на изрази (предварителен преглед): Функцията за превключване на изрази, въведена в Java 12, беше допълнително подобрена в Java 13 като функция за предварителен преглед.
  3. Динамични CDS архиви: Java 13 въведе динамични архиви за споделяне на данни от класове (CDS), които позволяват генерирането на CDS архиви по време на изпълнение. Тази функция може да подобри времето за стартиране на приложението и да намали използването на паметта.
  4. ZGC: Z Garbage Collector (ZGC) беше представен в Java 11, а в Java 13 стана производствена функция. ZGC е проектиран да обработва много големи купчини с ниски времена на пауза и е подходящ както за малки, така и за големи приложения.
  5. Едновременно маркиране: Java 13 въведе нова функция за едновременно маркиране за събирача на боклук G1, което подобрява времето за събиране на боклука и позволява по-ефективно използване на системните ресурси.
  6. Поддръжка на Unicode 12.0: Java 13 включва поддръжка за Unicode 12.0, която предоставя нови знаци и скриптове, включително четири нови скрипта, 66 нови знака за емотикони и нови символи за валута.

Като цяло Java 13 предоставя няколко нови функции и подобрения за разработчиците, включително подобрения в синтаксиса, събиране на отпадъци и поддръжка за най-новия стандарт Unicode. Важно е да се отбележи, че някои от тези функции все още са в режим на визуализация и може да подлежат на промяна в бъдещи версии.

Java14

Java 14 беше пусната през март 2020 г. и въведе няколко нови функции и подобрения, включително:

  1. Превключване на изрази (стандарт): Функцията за превключване на изрази, която беше въведена в Java 12 като функция за предварителен преглед и допълнително подобрена в Java 13, стана стандартна функция в Java 14. Това позволява на разработчиците да използват повече кратък и четим синтаксис за изявления за превключване.
  2. Записи (Преглед): Java 14 въведе нова функция за предварителен преглед, наречена „Записи“, която предоставя по-сбит и изразителен начин за дефиниране на класове, които се използват главно за съхраняване на данни. Записите могат да се разглеждат като по-лека алтернатива на традиционните Java класове.
  3. Съвпадение на шаблони (предварителен преглед): Java 14 въведе нова функция за предварителен преглед, наречена „Съвпадение на шаблони“, която позволява на разработчиците да тестват типове данни и да извършват преобразуване на типове по по-сбит и четим начин.
  4. Полезни изключения за NullPointerException: Java 14 въведе нова функция, която предоставя по-полезни съобщения за грешка, когато е хвърлено изключение за NullPointerException. Съобщенията за грешка сега включват информация за това коя променлива е била нулева, което улеснява разработчиците да идентифицират причината за проблема.
  5. Инструмент за пакетиране: Java 14 въведе нов инструмент, наречен „jpackage“, който позволява на разработчиците да пакетират Java приложения като собствени инсталатори, които могат да се изпълняват на множество платформи. Това може да опрости разпространението на Java приложения и да подобри потребителското изживяване.

Като цяло Java 14 предоставя няколко нови функции и подобрения за разработчиците, включително подобрения в синтаксиса, обработката на грешки и опаковането на приложения. Важно е да се отбележи, че някои от тези функции все още са в режим на визуализация и може да подлежат на промяна в бъдещи версии.

Java15

Java 15 беше пусната през септември 2020 г. и въведе няколко нови функции и подобрения, включително:

  1. Запечатани класове (предварителен преглед): Java 15 въведе нова функция за предварителен преглед, наречена „Запечатани класове“, която позволява на разработчиците да ограничат набора от подкласове, които могат да разширят клас или да реализират интерфейс. Това може да подобри безопасността и поддръжката на кода.
  2. Скрити класове: Java 15 въведе нова функция, наречена „Скрити класове“, която позволява на разработчиците да дефинират класове, които не могат да бъдат достъпни извън дефиниращия клас. Това може да подобри сигурността и капсулирането на кода.
  3. Текстови блокове (втори преглед): Функцията за текстови блокове, която беше въведена в Java 13 като функция за предварителен преглед, беше допълнително подобрена в Java 15 като втора функция за предварителен преглед.
  4. ZGC паралелна обработка на стекове от нишки: Java 15 въведе нова функция, която позволява на Z Garbage Collector (ZGC) да обработва стекове от нишки едновременно с изпълнението на приложението. Това може да подобри производителността на широкомащабни приложения.
  5. Алгоритъм за цифров подпис Edwards-Curve (EdDSA): Java 15 включва поддръжка за алгоритъма за цифров подпис Edwards-Curve (EdDSA), който осигурява по-сигурен и ефективен начин за подписване и проверка на данни.

Като цяло Java 15 предоставя няколко нови функции и подобрения за разработчиците, включително подобрения в безопасността, сигурността, производителността и криптографията. Важно е да се отбележи, че някои от тези функции все още са в режим на визуализация и може да подлежат на промяна в бъдещи версии.

Java16

Java 16 беше пусната през март 2021 г. и въведе няколко нови функции и подобрения, включително:

  1. Записи (втори преглед): Функцията за записи, която беше въведена в Java 14 като функция за предварителен преглед, беше допълнително подобрена в Java 16 като втора функция за предварителен преглед.
  2. Съвпадение на шаблони за instanceof (втори преглед): Функцията за съвпадение на шаблони, която беше въведена в Java 14 като функция за предварителен преглед, беше допълнително подобрена в Java 16 като втора функция за предварителен преглед. Тази функция позволява на разработчиците да използват съпоставяне на шаблони с оператора instanceof за опростяване на типовите тестове.
  3. Векторен API (Инкубатор): Java 16 представи нов инкубаторен модул, наречен „Векторен API“, който предоставя набор от векторизирани операции за числени и векторни данни. Това може да подобри производителността на приложения с интензивно използване на данни.
  4. API за чужди функции и памет (инкубатор): Java 16 представи нов инкубаторен модул, наречен „API за чужди функции и памет“, който предоставя начин за извикване на собствени библиотеки и управление на собствената памет от Java код.
  5. Силно капсулиране на вътрешните елементи на JDK: Java 16 въведе подобрения в капсулирането на вътрешните елементи на JDK, които могат да подобрят сигурността и поддръжката на приложенията на Java.

Като цяло Java 16 предоставя няколко нови функции и подобрения за разработчиците, включително подобрения в синтаксиса, производителността и сигурността. Важно е да се отбележи, че някои от тези функции все още са в режим на предварителен преглед или инкубаторни модули и може да подлежат на промяна в бъдещи версии.

Java17

Java 17 беше пусната през септември 2021 г. и въведе няколко нови функции и подобрения, включително:

  1. Запечатани класове (окончателни): Запечатаните класове, които бяха въведени като функция за предварителен преглед в Java 15 и подобрени в Java 16, сега са последна функция в Java 17.
  2. Силно капсулиране на вътрешните елементи на JDK (втори преглед): Подобренията в капсулирането на вътрешните елементи на JDK, които бяха въведени като функция за предварителен преглед в Java 16, бяха допълнително подобрени в Java 17 като втора функция за предварителен преглед.
  3. Съвпадение на шаблони за превключване (Визуализация): Java 17 въведе нова функция за предварителен преглед, наречена „Съвпадение на шаблони за превключване“, която позволява на разработчиците да използват съпоставяне на шаблони с оператора switch за опростяване на кода.
  4. Подобрени генератори на псевдослучайни числа:Java 17 въведе подобрения в класа java.util.Random, включително нови фабрични методи за създаване на екземпляри на класа и нови методи за генериране на произволни числа.
  5. JFR Поточно предаване на събития: Java 17 въведе нова функция, която позволява на разработчиците да предават поточно Java Flight Recorder (JFR) събития към външни системи, използвайки Java Virtual Machine Tool Interface (JVMTI).

Като цяло Java 17 предоставя няколко нови функции и подобрения за разработчиците, включително подобрения в синтаксиса, капсулирането и производителността. Важно е да се отбележи, че някои от тези функции все още са в режим на визуализация и може да подлежат на промяна в бъдещи версии.

Java18

Към датата на прекъсване на знанията ми (септември 2021 г.) все още нямаше версия на Java 18. Oracle обаче обяви нов шестмесечен цикъл на пускане на Java, така че е възможно Java 18 да бъде пусната през март 2022 г. с нови функции и подобрения. След като Java 18 бъде пусната, нейните нови функции и подобрения ще станат достъпни и ние ще разберем по-добре какво е новото в последната версия.

Заключение

Java измина дълъг път от първоначалното си пускане през 1995 г. С всяка нова версия тя добавя няколко нови функции и подобрява своята производителност и сигурност. Като разработчик е важно да сте в крак с най-новата версия на Java и да се възползвате от новите й функции за изграждане на ефективни и сигурни приложения.