1. История на версиите на Java

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

Производителите на тези устройства използваха много различни процесори, за да управляват продуктите си, така че стана много важно да бъдат обвързани с архитектурата на конкретен процесор or операционна система.

Създателите на Java решават да разделят проблема на две части: Техните програми ще бъдат компorрани не в машинния code за конкретен процесор, а в специален междинен code. На свой ред този междинен code ще бъде изпълнен от специална програма, наречена виртуална машина .

Повечето програмисти наричат ​​компютъра машина.

интересно

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

Първата version на Java беше пусната през 1996 г. Оттогава Java започна своето триумфално шествие по света, което от своя страна стимулира еволюцията и растежа на самия език. Днес мorони библиотеки и мorарди редове code са написани на Java, а нови версии на Java се пускат на всеки 6 месеца:

Име година Брой класове
JDK 1.0 1996 г 211
JDK 1.1 1997 г 477
J2SE 1.2 1998 г 1,524
J2SE 1.3 2000 г 1840
J2SE 1.4 2002 г 2,723
J2SE 5.0 2004 г 3,279
Java SE 6 2006 г 3,793
Java SE 7 2011 г 4,024
Java SE 8 2014 г 4,240
Java SE 9 2017 г 6,005
Java SE 10 2018 г 6,002
Java SE 11 2018 г 4,411
Java SE 12 2019 г 4,433
Java SE 13 2019 г 4,515

Въпреки че версиите на Java се пускаха редовно, не всички те имаха еднакво meaning за програмистите: Java се развиваше на крачки.


2. Java 2

Първият голям скок напред се случи с пускането на JDK 1.2. Имаше толкова много иновации там, че създателите на Java го преименуваха на Java 2 Platform Standard Edition or накратко J2SE 1.2.

Основните нововъведения бяха:

  • strictfpключова дума
  • Библиотеката Swing за работа с графики
  • Компилаторът JIT, който ускорява изпълнението на Java програми
  • Огромен набор от колекции
  • Пълна поддръжка на Unicode: японски, китайски и корейски.

Днес тези иновации не изглеждат толкова големи, но всеки голям проект израства от малък. Java нямаше да е толкова популярна днес, ако малка група програмисти не бяха продължor да подобряват езика преди 20 години.


3. Java 5

JDK 1.5 беше пуснат през септември 2004 г. Той също така въведе много иновации, така че не можеше да не заслужи ново име: instead of версии 1.5, 1.6 и 1.7, те решиха да използват 5.0, 6.0 и 7.0. И така, пълното име на JDK 1.5 беше Java 2 Standard Edition 5.0

Тази актуализация включва неща, без които по-нататъшното развитие на езика не би било възможно.

Анотации . Половината от основните съвременни рамки са изградени върху анотации, от Spring и Hibernate до JUnit.

Генерични лекарства . Генериците издигнаха силата на колекциите (и много повече) до нови висоти. Кодът стана по-прост, по-компактен и по-безопасен.

Autoboxing/unboxing е автоматично преобразуване между примитивни типове и техните типове обвивки. Това направи много по-лесно писането и четенето на code и направи колекциите още по-популярни.

Цикълът сега представлява поне половината от всички цикли, които програмистите пишат foreach. И, разбира се, е незаменим при работа с колекции.

Enum е друга хубава нова функция. Позволява много неща да бъдат красиво опростени.

Това не са всички нововъведения: добавени са стотици нови класове. Важното е, че те бяха точните иновации и дадоха още един мощен тласък на популярността на Java.


4. Java 6

Java 6 се помни с голям брой малки подобрения и изоставянето на номер 2 в името: вече не беше „Java 2 Standard Edition 6.0“, а просто „Java Standard Edition 6.0“.

Ето някои от интересните нововъведения:

Java Compiler API направи възможно извикването на Java компилатора директно от codeа. Това означава, че вашата програма вече може да генерира текст, представляващ code на клас, да го компorра чрез извикване на методи на Java Compiler API и след това веднага да започне да извиква методите на компorрания клас. Има цели области на развитие, където тази способност значително опростява живота.

Стана възможно изпълнението на JavaScript директно в Java програма. Тази функция се появи, защото JavaSE 6 включва Rhino JavaScript двигателя.


5. Java 7

Java 7 беше пусната през юли 2011 г. Трябваше да има много подобрения в нея, но програмистите успяха да добавят само малка част от планираното. По-специално те добавиха неща като:

Нова библиотека за работа с въвеждане и извеждане на данни. Известен като New Input Output API , той се намира в java.nioпакета.

Автоматичното извеждане на типа на Java компилатора по време на компorране позволява на програмистите да пишат по-малко code. Компилаторът стана по-умен и това беше само началото.

Изявлението за превключване придоби възможността да използва низове като стойности за регистър.

Автоматичното управление на ресурсите също се подобри значително: С try-with-resourcesконструкцията Java програма може да затвори потоци от данни instead of вас, когато вече не са необходими.

Имаше много други промени, но те не са толкова важни на настоящия етап от изучаването на Java.


6. Java 8

Java 8 излезе през март 2014 г. и беше най-силната скорошна актуализация на Java.

Преди всичко програмистите го помнят с добавянето на ламбда изрази и функционални интерфейси (анотацията @FunctionalInterface). Ние ще ги разгледаме на ниво 21. Вашият code никога повече няма да бъде същият.

Бяха добавени и потоци за колекции, което в комбинация с ламбда изрази направи възможно писането на code много по-компактно. Въпреки че не винаги е много по-четлив.

интересно

И третата голяма промяна беше въвеждането на Java 8 на изцяло нов API за работа с дати и часове — API за дата и час . Ще го проучим в близко бъдеще.


7. Java 9

Java 9 беше пусната през септември 2017 г. Оттогава създателите на Java решиха да пускат нови версии по-често — на всеки шест месеца. Вероятно са бor впечатлени от подхода, възприет от разработчиците на браузъра Google Chrome.

Версията на Java 9 се фокусира повече върху вътрешността на Java машината. Най-важното нещо, което донесе на обикновените програмисти, беше възможността да разделят програмата на модули. Това е много удобно, когато имате десетки хиляди класове or когато codeът ви динамично разтоварва плъгини.

Но вероятно няма да ни бъде полезен в близко бъдеще.


8. Java 11

Шест месеца след пускането на Java 9 излезе Java 10, а още шест месеца по-късно излезе Java 11.

През това време бяха напequalsи много малки подобрения, но най-вероятно ще запомните само две:

Той добави поддръжка за Unicode 10. Сега можете да използвате емотикони във вашите Java програми. Можете да работите с тях по същия начин, по който работите с булев тип:

Изводът за тип беше подобрен и се появи varключовата дума , която със сигурност ще харесате.

Сега можете да напишете следното:

var str = "Hello";

И компилаторът преобразува това в:

String str = "Hello";

Но имаше и загуби. Създателите на Java премахнаха библиотеки като JavaFX, Java EE и CORBA от JDK 11.


9. Значение на съвместимостта

Когато се пусне нова version, програмистите доста често искат да започнат от нулата. В края на краищата, кой иска да поправи куп стари бъгове, когато е абсолютно сигурен How codeът е трябвало да бъде написан от самото начало?

Но историята не подкрепя такъв подход. Всеки път, когато програмистите пуснат нова version на програма, 90% от нейните потребители използват стара version. Те могат да използват or игнорират новите функции на програмата, но това, което потребителите мразят, е когато нещо, което е работило добре, спре да работи.

Много страхотни продукти умряха, когато програмистите пуснаха нови версии, които не бяха съвместими. Или просто когато са направor големи промени. Например, идеята за изоставяне на бутона "Старт" в Windows 8 не се хареса на потребителите. Пускането на Windows 10 върна половината от това, което беше премахнато в Window 8.

Нещо повече, Windows ви позволява да изпълнявате програми, написани преди 20 години за Windows 95 or дори написани преди 30 години за MS DOS 3.0 — те ще работят. Това е една от причините, поради които Windows остава популярен.

И Java нямаше да бъде толкова популярна, колкото е, ако нейните разработчици не се интересуваха от съвместимостта. Всеки път, когато има нова version на Java машината, нова version на SDK or големи промени в класовете, целият Java code, написан от януари 1996 г., продължава да работи.

Това обикновено се постига само чрез добавяне на нови методи, класове и пакети, без да се премахва нищо. Този подход има своите плюсове и минуси.

От една страна, Java влачи куп багаж под формата на стар, неоптимален и ненужен code. От друга страна, вашият проект, написан на Java 11, винаги може да използва библиотека, написана на Java 8, която използва библиотеки, написани на Java 5 и Java 2. Тази смесица от code ще работи добре.

С езика C++ библиотеки, компorрани Howто за 32-битови, така и за 64-битови платформи, не могат да се използват в един и същи проект. И ще имате огромно главоболие, ако внезапно откриете, че типът, charизползван в една библиотека, използва един byte, докато друга използва два byteа.


10. Отхвърлено

И така, създателите на Java решиха да не премахват нищо, а само да добавят нови класове и пакети. Но How да уведомят програмистите, че има нова достойна алтернатива на съществуващо неоптимално решение?

За да направят това, те излязоха с @Deprecatedанотацията.

Ако някой метод or клас е отхвърлен, тази анотация се добавя до неговата декларация. Това означава, че програмистите се обезсърчават да използват codeа.

Все още можете да използвате остарял клас or метод, но не се препоръчва.

А колко често хората правят неща, които не са препоръчителни? Почти винаги 🙂

Много класове са отхвърлени от 20 години - те са бor използвани и все още се използват. Хората са запознати с тях or просто са удобни. Но има риск в даден момент да бъдат премахнати, така че е по-добре да не ги използвате.

Всички съвременни IDE, включително IntelliJ IDEA, могат да се справят с @Deprecatedанотацията. Имената на отхвърлените класове и методи се показват чрез зачертано форматиране. Нещо като това:

Date date = new Date();
int day = date.getDay();

Отхвърлените класове са много популярни и често се срещат в codeа, така че скоро ще разгледаме някои от тях.