Java 9 – wszystko, co musisz wiedzieć o funkcjach nowej Javy
Opublikowany: 2018-04-24Java, wysoce dostępny język programowania, jest oczywistym wyzwaniem dla programistów na całym świecie. Od momentu powstania w 1995 roku język ten jest szeroko stosowany w różnych branżach.
Dzisiaj na swoich telefonach znajdziesz Javę. Zasilanie systemu operacyjnego Android i niezliczonej liczby aplikacji oferowanych przez system Android. Służy do tworzenia gier takich jak Minecraft, które mają ogromną bazę graczy. Znajduje również zastosowanie w zastosowaniach biznesowych, takich jak odczytywanie informacji o kartach kredytowych w kasach sklepowych i przesyłanie informacji między systemami a bankami.
Po 3 latach Java wprowadziła nową edycję — Java SE 9. Dzięki kilku kluczowym zmianom architektonicznym i dodatkowym funkcjom, Java SE 9 oferuje potężne rozwiązanie, za którym tęsknili programiści.
Java 7 dodała try-with-resource w 2011 roku, oferując lepszą funkcjonalność zarządzania zasobami.
Java 8 dodała wyrażenia lambda, dobry ruch, ale nieco wadliwy w paradygmacie OOP.
Teraz Java Solutions umożliwia programistom posiadanie prywatnych metod. Prywatne metody statyczne! TAK, dobrze to przeczytałeś!
Java SE 8 zaoferowała wiele zmian strukturalnych, które deweloperzy przyjęli z mieszanymi emocjami. Przede wszystkim są to wady Java SE 8, które Java SE 9 próbowała przezwyciężyć:
- JDK nie umożliwiał nawigacji dla małego urządzenia komputerowego
- Nie było ogólnej poprawy wydajności aplikacji
- Nie było ogólnego bezpieczeństwa i konserwacji JDK
- Programiści Java napotkali trudności w tworzeniu i utrzymaniu bibliotek kodu i większej aplikacji
Przyjrzyjmy się więc kluczowym zmianom i ulepszeniom, które oferuje Java 9 w stosunku do swoich poprzedników
Przetwarzaj aktualizacje API w Javie 9
Tradycyjnie API Javy miało prymitywny charakter. To wsparcie dla uruchamiania nowych procesów, przekierowywania strumieni wyjściowych i błędów. W Javie 9 nowe aktualizacje Process API umożliwiają:
- Uzyskiwanie identyfikatora PID bieżącego i dowolnego innego procesu JVM
- Zarządzanie podprocesami
- Zarządzanie podprocesami
- Uzyskaj informacje, takie jak PID, nazwa i wykorzystanie zasobów procesów działających w systemie.
Oto przykładowy kod, który drukuje aktualny PID oraz aktualne informacje o procesie:
public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}
Klient HTTP/2 w Javie 9
Oczekuje się, że ta funkcja zostanie zreformowana w kolejnych wydaniach lub może nawet zostać całkowicie usunięta.
Wcześniej programiści polegali na bibliotekach innych firm, na przykład Apache HTTP, Jersey i wielu innych. API HTTP Javy poprzedza specyfikację HTTP/1.1 i jest synchroniczne i trudne w utrzymaniu. Te ograniczenia wymagały dodania nowego interfejsu API. Nowy interfejs API klienta HTTP zapewnia:
- Prosty i zwięzły interfejs API do obsługi większości żądań HTTP
- Wsparcie dla specyfikacji HTTP/2
- Lepsza wydajność
- Lepsze bezpieczeństwo
- Jeszcze kilka ulepszeń
Oto fragment kodu umożliwiający wysłanie żądania HTTP GET przy użyciu nowych interfejsów API. To jest moduł zdefiniowany w pliku module-info.java:
module newfeatures{
requires jdk.incubator.httpclient;
}
Poniższy kod używa interfejsu API klienta HTTP. To jest część modułu jdk.incubator.httpclient :
import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}
Więcej funkcji aktualizacji współbieżności w Javie 9
Wraz z Javą 9 wprowadzono nową klasę o nazwie java.util.concurrent.Flow, która wspiera implementację frameworka publikuj-subskrybuj. Ta struktura umożliwia programistom tworzenie komponentów. Te składniki mogą asynchronicznie wykorzystywać strumień danych na żywo, konfigurując wydawców wytwarzających dane i subskrybentów, którzy je wykorzystują. Oto nowe interfejsy:

- java.util.concurrent.Flow.Wydawca
- java.util.concurrent.Flow.Subskrybent
- java.util.concurrent.Flow.Subskrypcja
- java.util.concurrent.Flow.Processor (który działa zarówno jako wydawca, jak i subskrybent).
Skrypty Java Shell (Read-Eval-Print-Loop) w Javie 9
Celem Projektu Kulla było zbadanie możliwości dodania narzędzia REPL (Read-Eval-Print-Loop) dla Javy 9. To wydanie Javy zawiera specjalne narzędzie wiersza poleceń o nazwie JShell. Celem jest popularyzacja i maksymalizacja wykorzystania REPL. Więc, co to znaczy? Teraz nie musisz zawijać kilku wierszy kodu w osobną metodę, aby je uruchomić. Wydajny? Powiedziałem tak.
Na przykład w Scali prosty program Hello World jest napisany jako scala>println(„Hello World”);
Uruchommy polecenie JShell, jak pokazano na poniższym obrazku:
Układanka projektu w Javie 9
Atutem nowych funkcji w Javie 9 jest system aall-newmodule. Tworzenie złożonych systemów często wiąże się ze złożonymi kodami wysokiego poziomu, które powodują niejednoznaczność. W przypadku złożoności kodu pojawiają się dwa podstawowe problemy: enkapsulacja kodu jest trudna i nie ma pojęcia wyraźnych zależności między różnymi plikami JAR systemu. Dostęp do każdej klasy publicznej może uzyskać każda inna klasa publiczna w ścieżce klasy. Prowadzi to do niepotrzebnego używania klas, które nie miały być publicznym API. Co więcej, sama ścieżka klas jest problematyczna: skąd wiadomo, czy są tam wszystkie wymagane pliki JAR, a co ze zduplikowanymi wpisami? System modułowy rozwiązuje oba problemy.
W tym miejscu widać solidną naturę Javy 9. Modułowe pliki JAR zawierają dodatkowy deskryptor modułu. W tym deskryptorze modułu wyrażenia `requires` są używane do wyrażania zależności od innych modułów. Dodatkowo, instrukcje `exports` kontrolują, które pakiety są dostępne dla różnych modułów. Domyślnie wszystkie niewyeksportowane pakiety są enkapsulowane w module.
Istnieją różne JEPy, które są częścią tego projektu, jak następuje:
JEP 200 – modularny JDK: Stosuje system modułów platformy Java do modularyzacji JDK, które można łączyć w czasie kompilacji, kompilacji lub w czasie wykonywania.
JEP 201 – modułowy kod źródłowy: służy do tworzenia modułów i umożliwia budowanie narzędzi do kompilacji utworzonych modułów
JEP 220 — modułowe obrazy środowiska wykonawczego: ten plik JEP poprawia wydajność, bezpieczeństwo i łatwość konserwacji poprzez przekształcenie obrazów środowiska wykonawczego JDK i JRE w celu dostosowania do modułów
JEP 282 — jlink, znany jako linker Java: zastosowania jako moduły pakowania i ich zależności w krótszym czasie wykonywania.
Wielowydaniowe pliki JAR
Aby wykorzystać nowe funkcje platformy Java w nowszych wersjach, twórcy bibliotek muszą wydać nowszą wersję swojej biblioteki. Wkrótce deweloperzy będą utrzymywać wiele wersji biblioteki, co może być katastrofalne. Aby przezwyciężyć to ograniczenie, Java 9 zawiera wiele wydań plików JAR, umożliwiając programistom tworzenie plików JAR z różnymi wersjami plików klas dla różnych wersji Javy. Spójrz na ten przykład.
Poniżej przedstawiono ilustrację aktualnych plików JAR:
jar root
- Klasa
– klasa B
– C.klasa
Oto jak wyglądają pliki JAR z wieloma wydaniami:
jar root
- Klasa
– klasa B
– C.klasa
– META-INF
– wersje
– – 9
- - - - Klasa
– – 10
– – – – Klasa B
Na poprzedniej ilustracji pliki JAR obsługiwały pliki klas dla dwóch wersji Javy 9 i 10. Tak więc, gdy JAR jest wykonywany w Javie w wersji 9, A.class pod wersjami – 9 folderów jest wybieranych do wykonania.
We wcześniejszych wersjach języka Java, które nie obsługują plików JAR w wielu wydaniach, klasy w katalogu version nigdy nie są używane. Tak więc, jeśli uruchomisz plik JAR z wieloma wydaniami w Javie 8, będzie to tak samo dobre, jak uruchomienie prostego pliku JAR.
Moim zdaniem wszystko zaczyna się zmieniać wraz z Javą. I to jest trend rosnący. Czy to oznacza, że wpłynie to na popularność Javy i jej wykorzystanie? Zupełnie nie. Java była i nadal jest niezwykle potężnym i niezawodnym językiem programowania w branży technologicznej. Zacznij uczyć się Javy i zobacz, jak zmienia się Twoja kariera. Powodzenia!
Notka autora:
Ten artykuł techniczny został nadesłany przez firmę Sumit, która pracuje nad popularnymi technologiami, takimi jak DevOps, Big Data i Python. Oraz w zespole Digital Marketing w Edurece.