Przewodnik po wersjach i funkcjach języka Java

Przewodnik po wersjach i funkcjach języka Java

Java 8, Java 11, Java 13 — jaka jest różnica?

możesz użyć tego przewodnika, aby znaleźć i zainstalować najnowszą Javę, zrozumieć różnice między dystrybucjami Javy (AdoptOpenJdk, OpenJDK, oraclejdk, itp.), a także uzyskać przegląd funkcji języka Java, w tym wersje Java 8-13.,

Możesz również polubić: Beyond Java 8

podstawowe informacje

najpierw przyjrzyjmy się kilku powszechnym, praktycznym pytaniom, które ludzie mają, próbując wybrać odpowiednią wersję Javy dla swojego projektu.

Jeśli chcesz dowiedzieć się więcej o konkretnej wersji, przejdź do strony AdoptOpenJDK, wybierz najnowszą wersję Java, Pobierz i zainstaluj ją. Następnie wróć do tego przewodnika i dowiedz się co nieco o różnych wersjach Javy.

jakiej wersji Javy powinienem użyć?,

od września 2019 r.Java 13 jest najnowszą wydaną wersją Javy, z nowszymi wersjami co 6 miesięcy — Java 14 planowana jest na Marzec 2020 r., Java 15 na wrzesień 2020 r. i tak dalej. W przeszłości cykle wydania Javy były znacznie dłuższe, do 3-5 lat!.

wraz z pojawieniem się wielu nowych wersji, istnieją zasadniczo takie scenariusze użycia w świecie rzeczywistym:

  • starsze projekty w firmach często blokują się przy użyciu Java 8 (zobacz „Dlaczego firmy wciąż blokują się przy Java 8?”sekcja poniżej). Dlatego też będziesz zmuszony używać Javy 8.,
  • niektóre starsze projekty są nawet zablokowane na Java 1.5 (wydany 2004) lub 1.6 — wydany 2006) – przepraszam, koledzy!
  • Jeśli używasz najnowszych IDE, frameworków i narzędzi do budowania i rozpoczynasz projekt greenfield, możesz bez wahania używać Java 11 (LTS) lub nawet najnowszej Java 13.
  • istnieje specjalna dziedzina rozwoju Androida, w której wersja Java jest zasadniczo zablokowana w Javie 7, z określonym zestawem dostępnych funkcji Java 8. Możesz też przełączyć się na język programowania Kotlin.

dlaczego firmy wciąż tkwią na Javie 8?,

jest mieszanka różnych powodów, dla których firmy wciąż tkwią w Javie 8. Aby wymienić tylko kilka:

  • narzędzia do budowania (Maven, Gradle itp.), a niektóre biblioteki początkowo miały błędy w wersjach > 8 i wymagały aktualizacji. Nawet dzisiaj, np. w Javie 9+, niektóre narzędzia do budowania wypisują Ostrzeżenia „odblaskowego dostępu” podczas budowania projektów Java, które po prostu „nie są gotowe”, mimo że buildy są w porządku.
  • aż do Javy 8 korzystałeś z kompilacji JDK firmy Oracle i nie musiałeś przejmować się licencjonowaniem., W 2019 r. firma Oracle zmieniła system licencjonowania, co spowodowało, że Internet oszalał mówiąc „Java nie jest już wolna” — a następnie pojawiło się sporo zamieszania. Nie jest to jednak tak naprawdę problem, o którym dowiesz się w sekcji „Java Distributions” tego przewodnika.
  • niektóre firmy mają zasady, aby używać tylko wersji LTS i polegać na swoich dostawcach systemów operacyjnych, aby zapewnić im te Kompilacje, co wymaga czasu.

podsumowując, masz do czynienia z mieszanką zagadnień praktycznych (modernizacja narzędzi, bibliotek, frameworków) i politycznych.,

dlaczego niektóre wersje Javy nazywają się 1.X?

wersje Javy przed 9 po prostu miały inny schemat nazewnictwa. Tak więc Javę 8 można również nazwać 1.8, Javę 5 można nazwać 1.5 itd. Kiedy wydałeś polecenie java -version z tymi wersjami, otrzymałeś wyjście takie jak:

oznacza to po prostu Java 8. Wraz z przejściem na Wydania oparte na czasie z Javą 9, zmieniono również schemat nazewnictwa, a wersje Javy nie są poprzedzone prefiksem 1.XD Teraz Numer wersji wygląda tak:

Jaka jest różnica między wersjami Javy?, Czy powinienem nauczyć się konkretnego?

korzystając z innych języków programowania z dużymi przerwami między wydaniami, jak np. Python 2 do 3, możesz się zastanawiać, czy to samo dotyczy Javy.

Java jest pod tym względem wyjątkowa, ponieważ jest bardzo kompatybilna wstecz. Oznacza to, że twój program Java 5 lub 8 ma gwarancję działania z maszyną Wirtualną Java 8-13 — z kilkoma wyjątkami nie musisz się teraz martwić.

oczywiście nie działa na odwrót, powiedzmy, że twój program opiera się na funkcjach Java 13, które po prostu nie są dostępne pod Java 8 JVM.,

oznacza to kilka rzeczy:

  • nie tylko „uczysz się” konkretnej wersji Javy, takiej jak Java 12.
  • raczej, dostaniesz dobre podstawy we wszystkich funkcjach językowych aż do Java 8.
  • a potem możesz dowiedzieć się z poradnika, jakie dodatkowe funkcje pojawiły się w Javie 9-13 i korzystać z nich, kiedy tylko możesz.

jakie są przykłady tych nowych funkcji pomiędzy wersjami Javy?

zajrzyj do sekcji” Java Features 8-13 ” poniżej.,

ale z zasady: starsze, dłuższe cykle wydań (3-5 lat, aż do Java 8) oznaczały wiele nowych funkcji w każdym wydaniu.

sześciomiesięczny cykl wydania oznacza mniej funkcji w jednym wydaniu, więc możesz szybko nadrobić zaległości w funkcjach języka Java 9-13.

Jaka jest różnica między JRE a JDK?

do tej pory mówiliśmy tylko o „Javie.”Ale czym właściwie jest Java?

najpierw musisz odróżnić JRE (Java Runtime Environment) od JDK (Java Development Kit).,

historycznie, pobrałeś tylko JRE, jeśli interesowało Cię tylko uruchamianie programów Java. JRE zawiera między innymi maszynę Wirtualną Java (JVM) i narzędzie wiersza poleceń” java”.

aby tworzyć nowe programy Java, trzeba było pobrać JDK. JDK zawiera wszystko, co ma JRE, a także kompilator javac I kilka innych narzędzi, takich jak javadoc(generator dokumentacji Javy) i jdb (Debugger Javy).

dlaczego mówię w czasie przeszłym?,

aż do wersji Java 8 Strona Oracle oferowała JREs i JDK jako osobne pliki do pobrania — mimo że JDK zawsze zawierał JRE w osobnym folderze. Z Javą 9, to rozróżnienie w zasadzie zniknęło, a Ty zawsze ściągasz JDK. Struktura katalogów JDKs również się zmieniła, nie posiadając już jawnego folderu JRE.

Tak więc, mimo że niektóre dystrybucje (patrz sekcja „Java Distributions”) nadal oferują osobne pobieranie JRE, wydaje się, że istnieje tendencja oferowania tylko JDK. Stąd Od teraz będziemy używać Javy i JDK zamiennie.,

Jak zainstalować Javę lub JDK?

Ignoruj obrazy Java-Docker, .MSI wrappers, czyli na razie Pakiety dedykowane dla platformy. W końcu Java to tylko … plik zip; nic więcej, nic mniej.

dlatego, aby zainstalować Javę na swoim komputerze, wystarczy rozpakować jdk – {5-13}.plik zip. Do tego nie potrzebujesz nawet uprawnień administratora.,

Twój rozpakowany plik Javy będzie wyglądał tak:

magia dzieje się w katalogu/bin, który w systemie Windows wygląda tak:

Directory C:\dev\jdk-11\bin...12.11.2019 19:23 272.736 java.exe...12.11.2019 19:23 20.832 javac.exe...

więc wszystko, co musisz zrobić, to rozpakować ten plik i umieścić katalog / bin w zmiennej PATH, abyś mógł wywołać polecenie 'java' z dowolnego miejsca.

(Jeśli zastanawiasz się, instalatory GUI, takie jak ten z Oracle lub AdoptOpenJDK, wykonają Rozpakowanie i modyfikację zmiennej PATH za Ciebie, to wszystko.,)

aby zweryfikować poprawnie zainstalowaną Javę, możesz po prostu uruchomić java -version. Jeśli wyjście wygląda jak ten poniżej, jesteś dobry, aby przejść!

teraz pozostaje jedno pytanie: Skąd masz tą Javę .plik zip z? Co prowadzi nas do tematu dystrybucji.

dystrybucje Javy

istnieje wiele witryn oferujących pliki do pobrania Javy (Czytaj: JDK) i nie jest jasne „kto oferuje co i z jakimi licencjami”. Ta sekcja rzuci na to trochę światła.,

projekt OpenJDK

Jeśli chodzi o kod źródłowy Javy (Czytaj: kod źródłowy twojego JRE/JDK), na stronie projektu OpenJDK żyje tylko jeden.

jest to po prostu kod źródłowy, jednak nie jest to dystrybucja (think: your .plik zip ze skompilowanym poleceniem java dla konkretnego systemu operacyjnego). Teoretycznie moglibyśmy stworzyć kompilację z tego kodu źródłowego, nazwijmy to, powiedzmy, MarcoJDK, i zacząć ją dystrybuować. Ale nasza dystrybucja nie byłaby certyfikowana, aby móc legalnie nazywać się Java SE compatible.,

dlatego, w praktyce, jest garstka dostawców, którzy faktycznie tworzą te buildy, uzyskać ich certyfikat (patrz TCK), a następnie rozpowszechniać je.

i chociaż dostawcy nie mogą, powiedzmy, usunąć metody z klasy String przed wyprodukowaniem nowej kompilacji Javy, mogą dodać branding (yay!) lub dodać inne (np. CLI) narzędzia, które uznają za użyteczne. Ale poza tym, oryginalny kod źródłowy jest taki sam dla wszystkich dystrybucji Javy.

OpenJDK buduje (przez Oracle) i Oraclejdk buduje

jednym z dostawców, którzy budują Javę ze źródeł jest Oracle., Prowadzi to do dwóch różnych dystrybucji Javy, które na początku mogą być bardzo mylące.

  1. OpenJDK budowany przez Oracle (!). Te Kompilacje są bezpłatne i niemarkowe, ale Oracle NIE WYDA aktualizacji dla starszych wersji, na przykład Java 13, gdy tylko pojawi się Java 14.
  2. OracleJDK, czyli markowy, komercyjny build począwszy od zmiany licencji w 2019 roku. Oznacza to, że można go używać za darmo podczas programowania, ale musisz zapłacić Oracle, jeśli używasz go w produkcji. W tym celu otrzymasz dłuższe wsparcie, tj. aktualizacje wersji i numer telefonu, pod który możesz zadzwonić, jeśli twój JVM oszaleje.,

teraz, historycznie (pre-Java 8), istniały rzeczywiste różnice źródłowe między kompilacjami OpenJDK i OracleJDK, gdzie można powiedzieć, że OracleJDK był 'lepszy'. Ale na dzień dzisiejszy obie wersje są zasadniczo takie same, z niewielkimi różnicami.

sprowadza się to do tego, że potrzebujesz płatnego, komercyjnego wsparcia (numeru telefonu) dla zainstalowanej wersji Javy.

AdoptOpenJDK

w 2017 roku grupa użytkowników, programistów i dostawców Javy (Amazon, Microsoft, Pivotal, Red Hat i inni) założyła społeczność o nazwie AdoptOpenJDK.,

zapewniają darmowe, solidne wersje OpenJDK z dłuższą dostępnością / aktualizacjami, a nawet oferują wybór dwóch różnych maszyn wirtualnych Javy: HotSpot i OpenJ9.

polecam jeśli chcesz zainstalować Javę.

Azul Zulu, Amazon Corretto, SAPMachine

pełną listę kompilacji OpenJDK znajdziesz na stronie Wikipedii OpenJDK. Wśród nich są Azul Zulu, Amazon Corretto, a także SapMachine, aby wymienić tylko kilka. Uproszczenie sprowadza się do posiadania różnych opcji wsparcia/gwarancji konserwacji.,

ale upewnij się, aby sprawdzić poszczególne strony internetowe, aby dowiedzieć się o zaletach każdej pojedynczej dystrybucji.

rekomendacja

funkcje Java 8-13

jak wspomniano na samym początku tego przewodnika: zasadniczo wszystkie (Nie bądź wybredny teraz) funkcje języka Java 8 działają w Java 13. To samo dotyczy wszystkich innych wersji Javy pomiędzy nimi.

z kolei oznacza to, że wszystkie funkcje języka Java 8 służą jako dobra znajomość języka Java base, a Wszystko inne (Java 9-13) jest w zasadzie dodatkowymi funkcjami na szczycie tej linii bazowej.,

oto krótki przegląd tego, co mają do zaoferowania konkretne wersje:

Java 8

Java 8 była masowym wydaniem, A listę wszystkich funkcji można znaleźć na stronie Oracle. Są dwa główne zestawy funkcji, o których chciałbym wspomnieć tutaj:

funkcje językowe: Lambda, itp.,

przed uruchomieniem Javy 8, za każdym razem, gdy chciałeś utworzyć instancję, na przykład nowego Runnable, musiałeś napisać anonimową klasę wewnętrzną, w ten sposób:

 Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };

w przypadku lambda ten sam kod wygląda następująco:

Runnable runnable = () -> System.out.println("Hello world two!");

masz również odwołania do metod, powtarzające się adnotacje, domyślne metody dla interfejsów i kilka innych funkcji językowych.

Collections& Streams

w Javie 8 dostępne są również operacje w stylu funkcjonalnym dla kolekcji, znane również jako Stream API., Szybki przykład:

List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");

teraz, pre-Java 8, W zasadzie trzeba było pisać for-loopy, aby zrobić coś z tą listą.

dzięki API Streams możesz wykonać następujące czynności:

list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);

Java 9

Java 9 była również dość dużym wydaniem, z kilkoma dodatkami:

Collections

Collections got a couple of new helper methods to easy construct list, Sets, and Maps.,

List<String> list = List.of("one", "two", "three");Set<String> set = Set.of("one", "two", "three");Map<String, String> map = Map.of("foo", "one", "bar", "two");

Streams

Streams got a couple of additions, in the form of takeWhile, dropWhile, and iterate methods.

Stream<String> stream = Stream.iterate("", s -> s + "s") .takeWhile(s -> s.length() < 10);

Optionals

Optionals got the sorely missed ifPresentOrElse method.,

user.ifPresentOrElse(this::displayAccount, this::displayLogin);

Interfejsy

Interfejsy got private metody:

public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); }}

inne funkcje językowe

i kilka innych ulepszeń, takich jak ulepszone oświadczenie try-with-resources lub rozszerzenia operatora Diamond.

JShell

W końcu Java dostała powłokę, w której można wypróbować proste polecenia i uzyskać natychmiastowe rezultaty.

% jshell| Welcome to JShell -- Version 9| For an introduction type: /help introjshell> int x = 10x ==> 10

HTTPClient

Java 9 wprowadziła początkową wersję podglądu nowejHttpClient., Do tego czasu Wbudowana obsługa Http Javy była raczej niskopoziomowa i trzeba było zrezygnować z korzystania z bibliotek innych firm, takich jak Apache HttpClient lub OkHttp (które są świetnymi bibliotekami, btw!).

wraz z Javą 9 Java ma własnego, nowoczesnego klienta — choć jest on w trybie podglądu, co oznacza, że może ulec zmianie w późniejszych wersjach Javy.

Project Jigsaw: Java Modules and Multi-Release jar Files

Java 9 dostała system modułowy Jigsaw, który nieco przypomina starą, dobrą specyfikację OSGI., To nie jest zakres tego przewodnika, aby przejść do pełnych szczegółów na Jigsaw, ale spójrz na poprzednie linki, aby dowiedzieć się więcej.

Multi-Release .pliki jar umożliwiły ich posiadanie .plik jar zawierający różne klasy dla różnych wersji JVM. Tak więc, twój program może zachowywać się inaczej/mieć różne klasy używane na przykład w Java 8 vs. Java 10.

Java 10

w Javie 10 wprowadzono kilka zmian, np. garbage collection itp., Ale jedyną prawdziwą zmianą, którą prawdopodobnie zobaczysz jako deweloper, jest wprowadzenie słowa kluczowego var, zwanego również wnioskowaniem typu zmiennej lokalnej.

local-Variable type Inference: var-keyword

// Pre-Java 10String myName = "Marco";// With Java 10var myName = "Marco"

czuje Javascript-y, prawda? Jest jednak nadal mocno wpisywany i dotyczy tylko zmiennych wewnątrz metod (dzięki, dpash, za ponowne wskazanie tego).

Java 11

Java 11 była również nieco mniejszym wydaniem, z perspektywy dewelopera.,

Strings & Files

Strings and files got a couple of new methods (not all listed here):

Uruchom pliki źródłowe

począwszy od Java 10, możesz uruchamiać pliki źródłowe Javy bez konieczności ich kompilacji. Krok w kierunku tworzenia skryptów.

ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

wnioskowanie typu zmiennej lokalnej (var) dla parametrów Lambda

nagłówek mówi wszystko:

(var firstName, var lastName) -> firstName + lastName

HttpClient

iv id z Javy 9 w jej ostatecznej wersji bez podglądu.,

inne gadżety

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine deprecated, itp.

Java 12

Java 12 ma kilka nowych funkcji i usprawnień, ale jedyne, o których warto wspomnieć, to obsługa Unicode 11 i podgląd nowego wyrażenia switch, które zobaczysz w następnej sekcji.

Java 13

pełną listę funkcji znajdziesz tutaj, ale zasadniczo otrzymujesz Unicode 12.,1 wsparcie, a także dwie nowe lub ulepszone funkcje podglądu (mogą ulec zmianie w przyszłości):

Switch expressions (podgląd)

Switch expressions może teraz zwracać wartość., I możesz używać składni w stylu lambda dla wyrażeń, bez problemów z przejściem/przerwaniem:

stare instrukcje switch wyglądały tak:

switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block}

podczas gdy w Javie 13 instrukcje switch mogą wyglądać tak:

ciągi Wielowierszowe (podgląd)

możesz w końcu to zrobić w Java:

Java 14 i nowsze

zostaną omówione tutaj, jak tylko zostaną wydane. Sprawdź wkrótce!,

podsumowanie

teraz powinieneś mieć całkiem dobry przegląd kilku rzeczy:

  • Jak zainstalować Javę, którą wersję pobrać i skąd ją pobrać (wskazówka: AdoptOpenJDK).
  • czym jest dystrybucja Java, które istnieją i jakie są różnice.
  • jakie są różnice między konkretnymi wersjami Javy.

informacje zwrotne, poprawki i losowe wprowadzanie są zawsze mile widziane! Po prostu zostaw komentarz poniżej.

dzięki za przeczytanie!

jest tego więcej

Ten artykuł pierwotnie ukazał się na www.marcobehler.,com / napisany jako część serii poradników o nowoczesnym programowaniu w Javie. Aby znaleźć więcej przewodników, odwiedź stronę internetową lub zapisz się do newslettera, aby otrzymywać powiadomienia o nowo opublikowanych przewodnikach: https://bit.ly/2K0Ao4F.

Stephen Colebourne napisał fantastyczny artykuł na temat różnych dostępnych dystrybucji Javy. Dzięki, Stephen!

Czytaj dalej

JVM Ecosystem Survey: Why Devs are ' T Switching to Java 11

Beyond Java 8

Kiedy Java 11 zastąpi Java 8 jako domyślną Javę?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *