Java (język)

Jawa
Logo.
Data pierwszej wersji 1995
Paradygmat Zorientowany obiektowo , uporządkowany , imperatywny , funkcjonalny
Autor Mikrosystemy słoneczne
Deweloperzy Korporacja Oracle
Ostatnia wersja Java SE 16.0.1 (20 kwietnia 2021)
Pisanie na maszynie Statyczny , mocny , bezpieczny , mianownik
Wpływem Cel-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal
Pod wpływem C# , J# , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Przetwarzanie
Realizacje Lista JVM
System operacyjny Wieloplatformowy
Licencja GNU GPLV2 + CPE
Stronie internetowej www.oracle.com/java/technologies
Rozszerzenie pliku java, klasa, słoik, jad i jmod

Java to obiektowy język programowania stworzony przez Jamesa Goslinga i Patricka Naughtona , pracowników Sun Microsystems , przy wsparciu Billa Joya (współzałożyciela Sun Microsystems w 1982 roku ), oficjalnie zaprezentowanego na23 maja 1995 r.w SunWorld .

Firma Sun została następnie kupiona w 2009 roku przez firmę Oracle , która obecnie posiada i utrzymuje Javę .

Osobliwością Javy jest to, że oprogramowanie napisane w tym języku jest kompilowane do pośredniej reprezentacji binarnej, która może być wykonywana w wirtualnej maszynie Javy (JVM) bez względu na system operacyjny .

Przegląd

Język Java w dużej mierze przejmuje składnię języka C++ . Niemniej jednak, Java został pozbawiony najbardziej subtelnych pojęć C ++ i jednocześnie najbardziej mylące, takich jak wskaźniki i referencje lub wielokrotnego dziedziczenia zablokowanych przez realizację z interfejsów . Podobnie, od wersji 8, pojawienie się interfejsów funkcjonalnych wprowadza wielokrotne dziedziczenie (bez zarządzania atrybutami) z jego zaletami i wadami, takimi jak dziedziczenie diamentowe . Projektanci preferowali podejście obiektowe, tak aby w Javie wszystko było obiektowe, z wyjątkiem typów pierwotnych ( liczby całkowite , liczby zmiennoprzecinkowe itp.), które jednak mają swoje warianty dziedziczące po obiekcie Object (Integer, Float, ...).

Java umożliwia tworzenie aplikacji klient-serwer . Po stronie klienta aplety są źródłem rozgłosu języka. Szczególnie po stronie serwera Java narzuciła się światu biznesu dzięki serwletom , serwerowej stronie apletów, a ostatnio JSP ( JavaServer Pages ), który może zastąpić PHP , ASP i ASP.NET .

Java dała początek systemowi operacyjnemu ( JavaOS ), środowisku programistycznemu ( eclipse / JDK ), maszynom wirtualnym ( MSJVM  ( en ) , JRE ) aplikacji wieloplatformowej ( JVM ), odmianie na urządzenia mobilne / wbudowane ( J2ME ), graficznej biblioteka projektowania interfejsów ( AWT/Swing ), ciężkie aplikacje (Jude, Oracle SQL Worksheet, itp.), technologie webowe (serwlety, aplety) oraz wariacja dla firmy ( J2EE ). Przenośność z kodu bajtowego Javy jest zapewniona przez wirtualną Java maszyny i ewentualnie za pomocą standardowych bibliotek zawartych w JRE. Ta maszyna wirtualna może interpretować kod bajtowy lub kompilować go w locie na język maszynowy. Przenośność zależy od przenośności maszyn JVM w każdym systemie operacyjnym.

Historyczny

Pochodzenie języka

Język Java pochodzi z projektu Sun Microsystems z 1990 roku: inżynier Patrick Naughton nie był zadowolony z języka C++ używanego w Sun, jego interfejsów programistycznych w języku C, a także związanych z nim narzędzi. Rozważając migrację do NeXT, zaoferowano mu możliwość pracy nad nową technologią i tak narodził się Projekt Stealth ( Stealth ).

Stealth Projekt został szybko przemianowany na Zieloną projekt wraz z nadejściem James Gosling i Mike Sheridan. Razem, z pomocą innych inżynierów, rozpoczęli pracę w biurze przy Sand Hill Street w Menlo Park w Kalifornii . Próbowali opracować technologię do rozwoju aplikacji nowej generacji, oferując firmie Sun perspektywę wyjątkowych możliwości.

Zespół początkowo planował używać języka C++, ale porzucił go z różnych powodów. Przede wszystkim projektowali na systemie wbudowanym z ograniczonymi zasobami i uważali, że używanie C++ wymaga zbyt dużych inwestycji i że ta złożoność jest źródłem błędów dla programistów. Brak garbage collection powodował, że zarządzanie pamięcią musiało być programowane ręcznie, co było wyzwaniem, ale i źródłem błędów.

Zespół był również niezadowolony z niedociągnięć języka C++ w zakresie bezpieczeństwa, programowania rozproszonego i wielowątkowości . Dodatkowo chcieli platformy, którą można przenieść na dowolny rodzaj urządzenia lub platformy.

Bill Joy przewidział nowy język łączący najlepszy język programowania Mesa  (w) i język C . W artykule zatytułowanym Further ( Further ) zaproponował Sun, aby inżynierowie opracowali środowisko obiektowe oparte na C++. Pierwotnie Gosling planował zmodyfikowanie i udoskonalenie języka C++, który nazwał C++++ - ale wkrótce porzucono ten pomysł na rzecz opracowania nowego języka programowania, który nazwali Oak. (dąb) w odniesieniu, według legendy do drzewa zasadzonego przed oknem ich biura .

Zespół ciężko pracował , a latem 1992 roku byli w stanie zademonstrować platformę zawierającą zielony system operacyjny , język Oak (1992), biblioteki i sprzęt. Ich pierwsze osiągnięcie, zaprezentowane na3 września 1992 r., była konstrukcja palmtopa o nazwie Star7 z interfejsem graficznym i inteligentnym agentem o nazwie Duke, który pomaga użytkownikowi.

W listopadzie tego samego roku Green Project został przerwany i stał się FirstPerson, Inc , będącym w całości własnością Sun Microsystems, a zespół przeniósł się do Palo Alto. Zespół FirstPerson był zainteresowany tworzeniem wysoce interaktywnych narzędzi, a kiedy Time Warner ogłosił zaproszenie do składania ofert na wielofunkcyjny dekoder, firma FirstPerson zmieniła swój cel, aby zaoferować taką platformę.

Jednak branża telewizji kablowej stwierdziła, że ​​oferuje ona użytkownikowi zbyt wiele opcji, a FirstPerson stracił rynek na rzecz Silicon Graphics . Nie mogąc zainteresować branży audiowizualnej, firma została przywrócona do Sun.

Java spotyka się z Internetem

czerwiec do Lipiec 1994, po trzech dniach burzy mózgów z Johnem Gage'em, Jamesem Goslingiem, Joy, Naughtonem, Waynem Rosingiem i Ericiem Schmidtem , zespół ponownie ukierunkował platformę na sieć . Wierzyli, że wraz z pojawieniem się przeglądarki Mosaic Internet był miejscem, w którym można było opracować ten sam rodzaj interaktywnego narzędzia, jakie przewidywali dla branży kablowej. Naughton opracował jako prototyp małą przeglądarkę internetową, WebRunner, która później stała się HotJava .

W tym samym roku zmieniono nazwę języka na Java po odkryciu, że nazwa Oak była już używana przez producenta kart graficznych.

Pochodzenie nazwy Java

Nazwa „Java” nie jest akronimem , została wybrana podczas burzy mózgów, aby zastąpić oryginalną nazwę „Oak” , ze względu na konflikt z istniejącą marką, ponieważ kawa ( w amerykańskim slangu „java” ) jest ulubionym napojem wielu programistów . Logo wybrane przez Sun to także parująca filiżanka kawy.

Publiczne uruchomienie Javy

W Październik 1994, HotJava i platforma Java zostały zaprezentowane dla Sun Executives . Java 1.0a była dostępna do pobrania w 1994 roku, ale pojawiła się pierwsza publiczna wersja przeglądarki HotJava23 maja 1995 r.na konferencji SunWorld .

Oświadczenie to ogłosił John Gage, dyrektor naukowy Sun Microsystems. Jego ogłoszeniu towarzyszyło niespodziewane oświadczenie Marca Andressena, wiceprezesa zarządu Netscape, że Netscape zamierza włączyć obsługę Javy w swoich przeglądarkach. 9 stycznia 1996 r., grupa Javasoft została utworzona przez Sun Microsystems w celu opracowania tej technologii. Dwa tygodnie później pojawiła się pierwsza wersja Javy.

Nadejście Jawy 2

Pojawienie się wersji 1.2 języka oznacza istotny punkt zwrotny: w 2000 roku wersja pojawiła się jednocześnie na dwóch platformach Java:

Następnie Sun kwalifikuje je jako platformę Java 2 w przeciwieństwie do pierwszych generacji 1.0 i 1.1. Wszystkie kolejne wersje, od J2EE 1.2 do Java SE lub Java EE 7, nadal określane są jako platformy Java 2, chociaż „2” zostało oficjalnie wycofane.

Niedawna historia

Korzystanie z internetu Strona klienta

Aplety

Historycznie, możliwość uruchamiania apletów Java przez przeglądarki internetowe była jedynym rozwiązaniem umożliwiającym wyświetlanie bogatych aplikacji klienckich (RIA dla rich Internet application ). Potem pojawiły się konkurencyjne technologie, w tym Macromedia Flash , DHTML JavaScript , Silverlight oparte na XAML czy Xul .

Aplety na stacji roboczej Klienta mogą komunikować się z serwletami na Serwerze, tak jak Javascript może komunikować się z Serwerem za pomocą AJAX . Flex wykorzystuje technologię Flash poprzez Adobe Flash Player .

W erze, w której JavaScript cierpiał na problemy z kompatybilnością między przeglądarkami, aplety Java miały tę zaletę, że były przenośne, ponieważ przenoszenie złożonych interfejsów było trudne dla wszystkich przeglądarek na rynku.

Oprócz upadku „mody” na Javę, postęp w technologiach konkurujących z Javą skłonił większość programistów do odwrócenia się od apletów Javy i problemów związanych z tą technologią (niezgodności między JVM, słaba wydajność, słabe biblioteki, grafika, złożoność). ). Wreszcie, współczesne przeglądarki nie uwzględniają już systematycznie środowiska Java ze względu na jego duży rozmiar, a wskaźnik maszyn zdolnych do wyświetlania apletów wyniósł w 2010 roku tylko 70%, znacznie mniej niż np. w przypadku Flasha. W 2010 roku prawie wszystkie bogate aplikacje klienckie wykorzystywały alternatywne technologie; Flash w większości, ale także GWT .

Wreszcie pojawienie się HTML5 , przeznaczonego do osadzania wielu funkcji RIA i multimedialnych , również sprawia, że ​​aplety stają się przestarzałe.

JavaFX

Wraz z pojawieniem się Javy 8 in marzec 2014, JavaFX staje się oficjalnym Java GUI narzędzie do tworzenia narzędzi, do wszelkiego rodzaju zastosowań (aplikacje mobilne, aplikacje desktopowe, aplikacje internetowe, itp), rozwój jego poprzednika Swing są przerwane (z wyjątkiem poprawek). JavaFX to czysty Java API (określony język skryptowy, który był z nim przez jakiś czas kojarzony, został porzucony). JavaFX zawiera szeroką gamę narzędzi, w tym media audio i wideo, grafikę 2D i 3D, programowanie internetowe, programowanie równoległe i wiele innych.

Po stronie serwera

W przypadku serwerów aplikacji EJB są używane do enkapsulacji wcześniej zdefiniowanych klas. Elementy te są używane w architekturach J2EE w aplikacjach wielowarstwowych. Zaletą, jaką uzyskujemy z tej pracy jest możliwość ukrycia przed klientem implementacji kodu po stronie serwera.

Wykorzystanie stacji roboczej

Natywne użycie języka Java w aplikacjach na stacji roboczej było do tej pory stosunkowo rzadkie ze względu na brak szybkości. Jednak wraz z szybkim wzrostem mocy komputerów, ulepszeniami w 2000 roku w wirtualnej maszynie Java i jakości kompilatorów, kilka technologii zyskało popularność, takie jak NetBeans i środowisko Eclipse , technologie współdzielonych plików LimeWire , Vuze (ex Azureus) i I2P . Java jest również używana w programie matematycznym MATLAB , na poziomie interfejsu człowiek-maszyna oraz do algebry komputerowej. Aplikacje Swing pojawiają się również jako alternatywa dla technologii .NET.

Używaj z telefonami komórkowymi

Oracle ogłasza startpaździernik 2012na konferencji JavaOne pragnienie oferowania rozwiązań Java z zakresu oprogramowania wbudowanego, dla procesorów o mniejszej mocy niż te zwykle dostępne w komputerach PC. Oracle skupia cały ekosystem firm specjalizujących się w tych segmentach rynku, takich jak wydawca MicroEJ czy nawet STMicroelectronics, który oferuje Javę na swoich STM32, których rdzeniem jest CortexM3/M4.

Java, w szczególności za pośrednictwem Eclipse i NetBeans , już oferuje zintegrowane środowiska programistyczne dla urządzeń mobilnych. Java to główny język używany do tworzenia aplikacji dla bezpłatnego systemu operacyjnego Google dla urządzeń mobilnych  : Android .

JavaFX może również umożliwić korzystanie z Javy na telefonach komórkowych, chociaż nie jest to jego głównym celem.

System operacyjny Windows, Mac OS X i GNU/Linux

Microsoft dostarczył w 2001 roku środowisko pracy typu Java, zwane J++ , ze swoimi systemami operacyjnymi przed wydaniem Windows XP . W następstwie orzeczenia sądu , a wobec nieprzestrzegania specyfikacji tego języka, Microsoft musiał zrezygnować z tego i stworzyć nowy język o nazwie C# (patrz rozdział "  Niezależność od platformy  " niżej )

Wielu producentów komputerów nadal dołącza środowisko JRE do swoich systemów Windows.

Java pojawia się również jako standard w systemie Mac OS X firmy Apple, a także w dystrybucjach Linux . Tak więc w dzisiejszych czasach większość użytkowników może bez problemu uruchamiać aplikacje Java. Jednak na komputerach Apple dystrybucja Javy 5 do Javy 6 była obsługiwana bezpośrednio przez Apple, a nie przez Oracle. Ta zasada spowodowała opóźnienia i ograniczenia wersji:

Tak więc J2SE 1.4 nie było dostępne przed Mac OS X v10.2 (nazwa kodowa Jaguar ), J2SE 5.0 z Mac OS X v10.4 ( Tiger ), Java SE 6 działa tylko pod Mac OS X v10.5 ( Leopard ) wyposażonym w Procesor Intel i Java 7 wymagają komputera Mac Intel z systemem Mac OS X v10.7 .3 ( Lion ).Licencjonowanie open source

11 listopada 2006 r.kod źródłowy kompilatora javac i maszyny wirtualnej HotSpot został wydany jako Open Source na licencji GNU General Public License .

13 listopada 2006, Sun Microsystems zapowiada przejście Javy, czyli JDK (JRE i narzędzia programistyczne) oraz środowisk Java EE (już na licencji CDDL) i Java ME na licencji GPL stądMarzec 2007, pod nazwą projektu OpenJDK .

W maj 2007, Sun wydaje OpenJDK na wolnej licencji. Jednak OpenJDK nadal opiera się na fragmentach niewolnego kodu, których Sun nie posiada. Właśnie dlatego firma Redhat wchodzi na rynek wczerwiec 2007projekt IcedTea  (w), którego celem jest zastąpienie fragmentów niewolnego kodu, a tym samym uczynienie OpenJDK użytecznym bez żadnego zastrzeżonego oprogramowania. Wczerwiec 2008, projekt IcedTea przeszedł rygorystyczne testy zgodności z Javą (TCK). IcedTea jest zatem implementacją specyfikacji Java typu open source. Sun, a następnie Oracle, zachowuje jednak kontrolę nad technologią poprzez katalog patentów mających zastosowanie do Javy, a także poprzez utrzymywanie TCK na zastrzeżonej licencji.

Przejęcie przez Oracle

Firma Oracle nabyła firmę Sun Microsystems w 2009 roku . Widzimy teraz logo Oracle pojawiające się w dokumentacji Java API.

12 kwietnia 2010, James Gosling , twórca języka programowania Java, rezygnuje z Oracle z powodów, których nie chce ujawniać. Został dyrektorem technicznym działu oprogramowania klienckiego firmy Oracle.

W 2018 r. firma Oracle ogłosiła, że ​​aktualizacje jej wersji Java SE 8 do użytku profesjonalnego będą podlegać płatnej licencji odstyczeń 2019.

Historia wersji

Język Java przeszedł kilka ewolucji od czasu JDK 1.0 ( Java Development Kit ) wraz z dodaniem wielu klas i pakietów do standardowej biblioteki. Od J2SE1.4 ewolucja Javy jest prowadzona przez JCP ( Java Community Process ), który wykorzystuje JSR ( Java Specifications Requests ) do proponowania dodatków i zmian na platformie Java. Sam język jest określony przez specyfikację języka Java (JLS ), a zmiany w JLS są obsługiwane w kodzie JSR 901.

Należy zauważyć, że kolejne ewolucje języka prawie nie odnoszą się do jego składni - stosunkowo stabilnej od początku - ale głównie do wzbogacania jego funkcji, z osadzaniem i optymalizacją bibliotek oprogramowania ( API ) w samych dziedzinach. : bazy danych, zarządzanie XML, przetwarzanie rozproszone i internetowe, multimedia, bezpieczeństwo itp.

Numeracja wersji

Musimy odróżnić wersję języka Java od wersji platform i JRE:

  • Główny numer wersji językowej ( na przykład Java 5 ) określony przez JLS jest więc numerem podrzędnym dla środowiska JRE lub platformy (na przykład JRE 1.5 lub Java SE 1.5);
  • Platformy JRE i Java SE są identyfikowane od wersji Java 5 pod tym samym numerem wersji: zatem Java SE 1.6.0.43 i JRE 1.6.0.43 są zgodne z językiem Java 6, ale były przedmiotem w szczególności poprawek bezpieczeństwa ;
  • Java FX (zorientowany na RIA ), składający się zasadniczo z podzbioru JavaSE, również ma ten sam numer wersji: Java FX jest więc jego wersją 2.7 dla 1.7 (również kompatybilną z JRE 1.6);
  • Z drugiej strony platformy Enterprise Edition (Java EE) i Mobile Edition (Java ME) są identyfikowane przez numer wersji ich własnego SDK  ; tak więc na początku 2013 roku:
    • Java EE wciąż była w wersji 6 (Java EE 6 SDK Update 4), ale działała z JDK 6 lub 7; tak naprawdę przełączyło się na Javę 7 dopiero w połowieczerwiec 2013,
    • Java ME jest w wersji 3.3 (SDK v. 3.3).
Kolejne wersje

Czasami mogą być oferowane jednocześnie dwie wersje, takie jak 8u65 i 8u66: różnica polega na ogół na drobnych poprawkach błędów (bez wpływu na bezpieczeństwo), w przypadku których aktualizacja do najnowszej wersji nie jest krytyczna i dlatego pozostawia się ją do wyboru administratorów (JRE) lub programiści (JDK).

Publiczne wersje Javy mogą następować po wersjach niepublicznych, nazywanych Advanced, zarezerwowanych do użytku komercyjnego; tak więc Java 1.6u45 jest ostatnią publiczną wersją Java6, ale 6u113 ostatnią dostępną wersjąmarzec 2016.

Wersja Ostatnia wersja Nazwa JSE / JRE Kryptonim Specyfikacje JDK Status październik 2018 Okres utrzymywania Rozszerzone wsparcie
1,0 1.0.2 Java 1.0 Dąb JSR 52 JDK 1.0.2 Nie jest już aktywnie wspierany 1996-2000
1,1 8_16 Java 1.1 JSR 52 1.1.8_16 Nie jest już aktywnie wspierany 1997-2000
1.2 2_017 J2SE 1.2 Plac zabaw JSR 52 1.2.2_11 Nie jest już aktywnie wspierany 2000-2006
1,3 1_29 J2SE 1.3 Pustułka JSR 58 1.3.1_29 Przestarzały 2000-2001
1,4 2_30 J2SE 1.4 Merlin JSR 59 1.4.2_30 Przestarzały 2000-2008
1,5 0_22 do 0_85 J2SE 5.0 Tygrys JSR 176 1.5.0_22 Przestarzałe, 5u51 do 5u85 dostępne tylko z określoną pomocą techniczną Oracle 2002-2009 maj 2015
1,6 0_45 do 0_111 Java SE 6 Mustang JSR 270 6u113 Przestarzałe, 6u51 do 6u111 dostępne tylko z określoną pomocą techniczną Oracle 2005-2013 grudzień 2018
1,7 0_79 do 0_80 Java SE 7 Delfin JSR 336 1.7.0_79 Stabilna, wersja 1.7.0_79 2011-2015 Lipiec 2022
1,8 0_171 Java SE 8 Kenai potem Pająk JSR 337 1.8.0_171 Stabilna, wersja 1.8.0_171 oferowana użytkownikom 2014-wrzesień 2018 Lipiec 2019
9 9.0.4 Java SE 9 Parasol JSR 379 9.0.4 Stabilny 2018-?
10 10.0.1 Java SE 10 JSR 383 10.0.1 obsługiwane 6 miesięcy przed kolejną wersją JDK Java11-LTS 2018, nie wersja LTS (długoterminowe wsparcie)
11 11.0.1 Java SE 11 JSR 384 11.0.1 Wersja LTS 2023 2026
12 12.0.2 Java SE 12 JSR 386 12.0.2
13 Java SE 13 JSR 388 13,0
14 Java SE 14 JSR 389 14.0.1

Tutaj wymienione są tylko najnowsze numery wersji dla każdego wydania. Szczegóły kolejnych modyfikacji według wersji i aktualizacji można znaleźć na stronie wikipedia.pl/java_history .

Treść i rozwój Od JDK 1.0 do J2SE 1.4
  • JDK 1.0 (23 stycznia 1996 r. - 211 klas i interfejsów) - Wersja początkowa.
  • JDK 1.1 (19 lutego 1997 - 477 klas i interfejsów) - Wiele dodatków, w tym:
    • gruntowna przebudowa modelu zdarzenia AWT .
    • Zajęcia wewnętrzne są dodawane do języka.
    • JavaBeans .
    • JDBC .
    • Zdalne wywołanie Java ( RMI ).
  • J2SE 1.2 (9 grudnia 1998- 1524 klasy i interfejsy) - Nazwa kodowa Plac zabaw . Ta wersja i kolejne aż do J2SE 7.0 są przemianowane na Java 2, a wersja o nazwie J2SE ( Java 2 Platform, Standard Edition ) zastępuje JDK, aby odróżnić platformę podstawową od wersji J2EE ( Java 2 Platform, Enterprise Edition ) i od J2ME wersja ( platforma Java 2, wersja Micro ). Kilka dodatków, w tym:
    • słowo kluczowe strictfp( ścisłe zmiennoprzecinkowe  : ścisłe zmiennoprzecinkowe )
    • odbicie
    • interfejs API grafiki Swing jest zintegrowany.
    • Po raz pierwszy wirtualna maszyna Java firmy Sun zawiera kompilator „  kompilacji w locie  ” ( Just in Time ).
    • Wtyczka Java
    • Java IDL, implementacja IDL dla współdziałania z CORBA .
    • ramy kolekcje .
  • J2SE 1.3 (8 maja 2000 r.- 1840 klas i interfejsów) - Nazwa kodowa Kestrel . Główne zmiany:
    • W zestawie HotSpot JVM (maszyna wirtualna HotSpot wyszła w Kwiecień 1999 dla maszyny wirtualnej J2SE 1.2)
    • Zmień na RMI na oparty na CORBA .
    • JavaSound
    • Basic zawiera JNDI ( Java Naming and Directory Interface ) (wcześniej dostępny jako rozszerzenie )
    • JPDA ( architektura debugera platformy Java )
  • J2SE 1.4 (6 lutego 2002 r.- 2 723 klasy i interfejsy) - Nazwa kodowa Merlin . Była to pierwsza wersja platformy pod JCP ( Java Community Process ). Główne zmiany to:
    • słowo kluczowe assert(określone w JSR 41.)
    • wyrażenia regularne modelowane przy użyciu języka Perl.
    • Tworzenie łańcuchów wyjątków umożliwia wyjątkowi hermetyzację oryginalnego wyjątku niskiego poziomu. (Określone w (en) JSR 51 ).
    • Logowanie API (określone w (w) JSR 47 ).
    • Image I / O API do odczytu i zapisu obrazów w formatach takich jak JPEG i PNG.
    • integracja parsera XML i silnika XSLT o nazwie JAXP (określone w (en) JSR 5 i (en) JSR 63. )
    • integracja rozszerzeń bezpieczeństwa JCE ( Java Cryptography Extension  (en) ), JSSE i JAAS .
    • Java Web Start (po raz pierwszy wprowadzony wMarzec 2001dla J2SE 1.3 - Określone w (w) JSR 56 ).
J2SE 5.0

Wydano dnia 30 września 2004 r.(3270 klas i interfejsów), jego nazwa kodowa to Tiger . Ma on początkowo numer 1.5, który jest zawsze używany jako wewnętrzny numer wersji. Opracowany przez (w) JSR 176 , Tiger dodał znaczną liczbę nowych funkcji do języka:

  • Integracja komponentu oprogramowania Java Web Start ze środowiskiem Java Runtime Environment (JRE)
  • Programowanie ogólne — (określone przez (w) JSR 14 )
  • Metadane - zwane również adnotacjami, umożliwiają językowi budowanie klas i metod oznaczonych dodatkowymi danymi, które mogą być używane jako metadane (określone w (w) JSR 175 ).
  • Autoboxing / unboxing - automatyczna konwersja między typami pierwotnymi (takimi jak type int) a odpowiednią klasą Wrapper (taką jak klasa Integer) (określoną w (en) JSR 201 ).
  • Wyliczenia – słowo kluczowe enumpozwala na stworzenie uporządkowanej listy wartości przy zachowaniu bezpieczeństwa wpisywania . Wcześniej można to było osiągnąć tylko za pomocą stałych liczb całkowitych (określonych w JSR 201).
  • Varargs — składnia Object…używana w deklaracji metody pozwala na określenie zmiennej liczby argumentów dla tej metody. Jest to operacja równoważna funkcji „printf” w C.
  • Importy statyczne — ta funkcja umożliwia korzystanie ze stałych klasy bez określania nazwy tej klasy i bez przechodzenia przez „ antywzorzec Stałego interfejsu  ” (jest to wyrażenie używane w witrynie firmy Sun).
  • Rozszerzenie forpętli for - składnia of forjest rozszerzona o specjalną składnię do iteracji po dowolnym iterowalnym obiekcie, takim jak tablica lub kolekcja przy użyciu składni:
void displayWidgets (Iterable<Widget> widgets) { for (Widget w : widgets) { w.display(); } }

Ten przykład iteruje przez zawartość obiektu widżetów klasy Iterable i zawiera tylko odwołania do obiektów klasy Widget, przypisując każdy z tych elementów do zmiennej w, a następnie wywołuje metodę display() na elemencie w ( określonym w JSR 201). Podobna składnia zostanie wprowadzona w 2011 r. w C++11 .

Oprócz zmian językowych na przestrzeni lat miały miejsce bardziej znaczące zmiany, które doprowadziły od kilkuset klas w JDK 1.0 do ponad 3000 w J2SE 5.0. Dodano całe interfejsy API, takie jak Swing lub Java2D, a wiele metod z oryginalnego JDK 1.0 zostało uznanych za przestarzałe (tj. przestarzałe, mogą zostać usunięte w późniejszej wersji Javy).

Java SE 6

Wydano dnia 11 grudnia 2006 r.(3777 klas i interfejsów w ponad 20 pakietach), jego nazwa kodowa to Mustang . Wersja beta została wydana w dniu15 lutego 2006, kolejna wersja beta w czerwiec 2006,   wersja „ kandydata do wydania ” wListopad 2006, a ostateczna wersja na 12 grudnia 2006. W tym wydaniu firma Sun na stałe zmienia nazwę J2SE na Java SE i usuwa .0 z numeru wersji.

Ta wersja była przedmiotem licznych luk w zabezpieczeniach i ich aktualizacji naprawczych, co doprowadziło do powstania wersji 1.6.0_45 przez Oracle, a nawet 1.6.0_51 dla wersji Mac OS. Jest to również ostatnia wersja Javy działająca w systemie Mac OS X 10.6 i wcześniejszych.

Java SE 7

Wydano dnia 7 lipca 2011(8000 klas i interfejsów), jego nazwa kodowa to Dolphin . Jest to pierwsza wersja na licencji GNU GPL .

Od aktualizacji 6 (7u6) standardowa edycja Java Oracle ponownie w pełni obsługuje system Mac OS X, aktualizacje dla tego systemu operacyjnego nie są już obsługiwane przez Apple, ale przez Oracle. Jednak ta wersja Javy nie jest obsługiwana przez Mac OS X v10.6  : Rzeczywiście, niektóre interfejsy API wymagane przez Javę 7 zostały dołączone przez Apple do Mac OS X 10.7.3, ale nie oczekuje się, że zostaną zaimplementowane w poprzednich wersjach System operacyjny Mac. Wersja 7u90kwiecień 2015 to ostatnia publicznie dostępna aktualizacja Java 7.

Java 7 oferuje m.in. następujące nowe funkcje:

  • notacja binarna;
  • formatowanie cyfrowe dla większej czytelności;
  • zamień je za pomocą sznurków;
  • wnioskowanie o typie podczas tworzenia instancji, aby uniknąć nadmiarowości składni (zobacz List <String> lst = new ArrayList <> (); );
  • multicatch pozwalający na łączenie wyjątków przechwyconych przez |  ;
  • java.nio (JSR 203), który oferuje w szczególności nowy interfejs ścieżki, system przeglądania katalogów, usługę zegarka itp.
  • zadania zrównoleglenia obliczeń uznanych za zbyt ciężkie lub zbyt drogie;
  • automatyczne pakowanie obiektów do typów pierwotnych;
  • interfejs użytkownika: przejrzystość ramek, zaokrąglone obramowania, zarządzanie zdarzeniami asynchronicznymi za pomocą pętli wtórnych, JLayers, Painters, nowy styl Nimbus ...
Java SE 8

Imię Kenai. Różne wydania JDK w fazie rozwoju są dostępne do pobrania od jesieni 2013 r., a Java 8 zostanie wydana w połowie rokumarzec 2014zgodnie z mapą drogową przedstawioną przez Oracle zmaj 2013.

Jedną z głównych nowych funkcji tej wersji jest dodanie lambd , co prowadzi do przeprojektowania części API, w szczególności kolekcji i pojęcia stream . Inne godne uwagi dodatki obejmują opcje, domyślne implementacje w interfejsie, przeprojektowanie interfejsu API daty i nie tylko. Z drugiej strony wersja Enterprise Edition (Java 8 EE) nie jest spodziewana przed 2017 rokiem.

Modularyzacja JVM z projektem Jigsaw , początkowo planowana dla tej wersji, została ze swej strony przełożona do wersji 9, w szczególności ze względu na luki w zabezpieczeniach napotkane w Javie 6, które Oracle wolało naprawić w 2013 roku w porównaniu z ewolucjami Javy.

Java SE 9

Pierwotnie zaplanowana na 2015 rok, ale przełożona częściowo ze względu na projekt Jigsaw, ta wersja została ostatecznie wydana w dniu 21 września 2017 r..

Java 9 integruje:

  • projekt Jigsaw umożliwiający modularyzację modułów ładowanych w JDK;
  • projekt Kulla mający na celu stworzenie powłoki dla Javy w formacie read-eval-print loop  (in)  ;
  • projekt Valhalla mający na celu ulepszenie typów Javy;
  • natywne wsparcie dla formatu JSON i HTTP/2 .
Java SE 10

Ta wersja została wydana dnia 20 marca 2018 r..

Ta nowa wersja zawiera w szczególności:

  • JEP 286: wnioskowanie o typach zmiennych lokalnych;
  • JEP 310: udostępnianie plików binarnych w celu szybszego uruchomienia
  • JEP 317: aktywacja Graala i kompilatora JIT w Javie
Java SE 11

Ta wersja została wydana dnia 25 września 2018 r..

Poza zmianą w modelu długoterminowej obsługi wersji, ta wersja zawiera w szczególności:

  • JEP 323: poprawa parametrów lambda
  • JEP 321: bardziej zaawansowany klient HTTP
  • JEP 320: domyślne usuwanie modułów CORBA i EE
Java SE 12

Ta wersja została wydana dnia 19 marca 2019 r..

Ta wersja integruje 8 ewolucji:

  • JEP 189: Shenandoah, śmieciarz z krótkimi przerwami (eksperymentalny)
  • JEP 230: zestaw narzędzi do mikrobenchmarku dla kodu źródłowego JDK
  • JEP 325: Przełącz wyrażenia (wersja zapoznawcza)
  • JEP 334: API stałych, pozwalające dodawać informacje w metadanych w plikach .class, przydatne dla języków na JVM)
  • JEP 340: pojedynczy port dla 64-bitowej architektury ARM
  • JEP 341: Domyślne archiwa CDS, szybsze ładowanie informacji o klasie JVM
  • JEP 344 i JEP 346: ulepszenia odśmiecacza G1
Java SE 13

Ta wersja została wydana dnia 17 września 2019 r..

  • JEP 355: Bloki tekstowe
  • JEP 354: (Przełącznik) Nowa sprawa case...->(tradycyjna sprawa)case...:)switch(nombre){ //case traditionnel case 5: System.out.println("La variable est égale à 5"); break; //nouveau case case 5 -> System.out.println("La variable est égale à 5"); }
Java SE 14

Ta wersja została wydana 17 marca 2020 r.

  • JEP 343: Inkubator
  • JEP 358: Większa precyzja od kompilatora w przypadku błędów NullPointerExceptions
  • JEP 361: (Przełącznik) Nowe pudełko case...->(tradycyjne pudełko)case...:)
  • JEP 362: Wycofanie portów Solaris i SPARC
  • JEP 368: Bloki tekstowe
Java SE 15

Ta wersja została wydana 15 września 2020 r.

Java SE 16

Ta wersja została wydana 16 marca 2021 r.


Filozofia

Kiedy powstawał język Java, zdecydowano, że język ten musi spełniać pięć celów:

  1. prosty, zorientowany obiektowo i znajomy;
  2. solidny i bezpieczny;
  3. niezależne od maszyny użytej do wykonania;
  4. wysoka wydajność ;
  5. skompilowany, wielozadaniowy i dynamiczny.

Język zorientowany obiektowo i znajomy

Pierwsza cecha, zorientowana obiektowo („OO”) i potoczna, odnosi się do sposobu programowania i projektowania języka oraz do faktu, że program napisany w Javie jest dość podobny do programu napisanego w C++ .

Chociaż istnieje kilka interpretacji wyrażenia zorientowanego obiektowo , kluczową ideą w tego typu rozwoju jest to, że różne typy danych muszą być bezpośrednio powiązane z różnymi operacjami, które można wykonać na tych danych. W rezultacie dane (nazywane Properties ) i kod manipulujący nimi (nazywane Methods ) są łączone w jedną całość o nazwie Object Class . Kod zostaje logicznie podzielony na małe spójne jednostki, a tym samym staje się prostszy w utrzymaniu i łatwiejszy do ponownego użycia, będąc z natury modułowym.

Inne mechanizmy, takie jak dziedziczenie , umożliwiają wykorzystanie wszystkich cech Klasy, które zostały wcześniej napisane w jej własnych programach, nawet bez konieczności znajomości jej wewnętrznego działania - widzimy tylko interfejs (opisany interfejs, właściwości i metody bez podawania powiązanego kodu) . Java zabrania pojęcia dziedziczenia z kilku klas nadrzędnych, chyba że są one interfejsami.

W wersji 1.5 języka dodano generyki , mechanizm polimorfizmu podobny (ale inny) do szablonów języka C++ lub do funktorów OCaml . Generyki umożliwiają wyrażenie w prostszy i bardziej bezpieczny sposób (z punktu widzenia typowania) właściwości obiektów takich jak kontenery (listy, drzewa, itp.): typ listy jest wtedy traktowany ogólnie w porównaniu z typem d 'obiekt zawarty w wykazie.

Mechanizm zbierania śmieci

Ten element przyczynia się do niezawodności i wydajności programów, Garbage Collector jest wywoływany regularnie i automatycznie podczas wykonywania programu. W systemach wieloprocesorowych i/lub wielordzeniowych wykorzystuje się nawet wiele wątków o niskim priorytecie, aby jak najmniej zakłócać wykonywanie programu. Ponadto programista może w razie potrzeby zasugerować uruchomienie garbage collectora przy użyciu metody System.gc() .

Powtarzającą się skargą na języki takie jak C++ jest uciążliwe zadanie polegające na konieczności ręcznego programowania zarządzania pamięcią. W C++ pamięć przydzielona przez program do tworzenia obiektu jest zwalniana, gdy jest niszczona (na przykład przez jawne wywołanie operatora delete ). Jeśli programista zapomni o zakodowaniu cofnięcia alokacji, powoduje to „  przeciek pamięci  ”, a program zużywa coraz więcej. Co gorsza, jeśli przez pomyłkę program kilkakrotnie zażąda cofnięcia alokacji lub użyje obszaru pamięci po zażądaniu cofnięcia alokacji, najprawdopodobniej stanie się niestabilny i spowoduje błąd krytyczny.

W Javie wiele z tych problemów można uniknąć dzięki wyrzucaniu śmieci . Przestrzeń pamięci wymagana dla każdego tworzonego obiektu jest zarządzana na stercie pamięci (w języku angielskim  : memory heap ) zarezerwowanej do tego celu. Program uzyskuje dostęp do każdego obiektu poprzez odniesienie w stercie. Gdy nie ma już żadnego odniesienia, aby dotrzeć do obiektu, garbage collector automatycznie go niszczy - ponieważ stał się niedostępny - zwalniając pamięć, a tym samym zapobiegając wyciekom pamięci.

Moduł odśmiecania pamięci używa algorytmu tagowania i zwalniania (w języku angielskim  : mark and sweep ) do zarządzania złożonymi przypadkami obiektów odwołujących się do siebie lub pętli odwołań ( przykład podwójnego łączenia w łańcuchy ). W praktyce nadal zdarzają się przypadki błędów programistycznych, w których garbage collector uważa, że ​​obiekt jest nadal użyteczny, podczas gdy program nie uzyskuje już do niego funkcjonalnego dostępu (ale zachowuje odniesienie do obiektu), co stanowi szczególny przypadek „  wycieku pamięci  ”.

Zbieranie śmieci sprawia, że ​​zarządzanie pamięcią jest zauważalnie łatwiejsze i bezpieczniejsze. Projektanci i użytkownicy programów lub bibliotek nie muszą się martwić o cofnięcie alokacji obiektów (operator usuwania w C++), chyba że ze względu na wydajność.

Niezależność platformy

Niezależność platformy oznacza, że ​​programy napisane w Javie działają bardzo podobnie na różnych architekturach sprzętowych. W związku z tym licencja Sun na Javę wymaga, aby wszystkie implementacje były kompatybilne. Teoretycznie możemy więc wykonać programowanie na danej architekturze i uruchomić ostateczną aplikację na wszystkich pozostałych.

Wynik ten uzyskuje się poprzez:

  • dostarczone standardowe biblioteki umożliwiające dostęp do niektórych elementów maszyny hosta (grafika, wielowątkowość, programowanie sieciowe itp.) w dokładnie taki sam sposób we wszystkich architekturach;
  • Kompilatory Java, które kompilują kod źródłowy „w połowie” w celu uzyskania kodu bajtowego (dokładniej bytecode Java , język typu asembler , bliski maszynie wirtualnej i specyficzny dla platformy Java).
Ten kod bajtowy ma być następnie interpretowany na wirtualnej maszynie Java (JVM), programie napisanym specjalnie dla maszyny docelowej, który interpretuje kod bajtowy Java i powoduje, że maszyna wykonuje instrukcje przetłumaczone na kod natywny.

Zauważ, że nawet jeśli istnieje jawnie pierwsza faza kompilacji, kod bajtowy Javy jest albo interpretowany, albo konwertowany w locie na kod natywny przez kompilator w locie ( just in time , JIT).

Rodzaje kompilacji

Wczesne implementacje języka wykorzystywały interpretowaną maszynę wirtualną, aby osiągnąć przenośność. Te implementacje dawały programy, które działały wolniej niż te napisane w skompilowanym języku (C, C++ itp.), więc język ten miał reputację słabej wydajności.

Nowsze implementacje wirtualnej maszyny Java (JVM) generują programy znacznie szybciej niż wcześniej, przy użyciu różnych technik:

  • Pierwszą techniką jest kompilacja bezpośrednio do kodu natywnego, jak w tradycyjnym kompilatorze, całkowicie usuwając fazę kodu bajtowego. Kompilatory Java, takie jak GNU Compiler for Java (GCJ), bezpośrednio kompilują Javę do natywnego kodu obiektowego dla maszyny docelowej. Uzyskuje się w ten sposób dobrą wydajność, ale kosztem przenośności: ostateczny kod tworzony przez te kompilatory można zatem wykonać tylko na jednej architekturze;
  • Inna technika zwana kompilacją „just-in-time” lub „w locie” ( just in time , JIT), tłumaczy kod bajtowy na kod natywny podczas fazy uruchamiania programu;
  • Niektóre bardziej wyrafinowane maszyny wirtualne wykorzystują dynamiczną rekompilację, w której maszyna wirtualna analizuje zachowanie programu i selektywnie rekompiluje jego części. Rekompilacja dynamiczna zapewnia lepsze wyniki niż kompilacja statyczna, ponieważ kompilatory dynamiczne mogą optymalizować na podstawie swojej wiedzy o środowisku docelowym i używanych klasach.
Kompilacja JIT i dynamiczna rekompilacja pozwalają Javie wykorzystać szybkość kodu natywnego bez utraty przenośności. Przegląd przenośności Java

Po tym, jak Sun odkrył, że implementacja Microsoftu nie obsługuje interfejsów RMI i JNI oraz zawiera elementy specyficzne dla platformy w porównaniu z oryginalną platformą, Sun wytoczył pozew przeciwko Microsoftowi i uzyskał odszkodowanie (20 milionów dolarów). Ten akt sprawiedliwości dodatkowo zaostrzył warunki licencji firmy Sun. W odpowiedzi firma Microsoft zaprzestała obsługi języka Java na swoich platformach, aw najnowszych wersjach programu Windows Internet Explorer nie obsługuje apletów Java bez dodawania wtyczek. Jednak firma Sun udostępnia bezpłatnie środowiska wykonawcze Java dla różnych platform firmy Microsoft.

Przenośność jest technicznie nieuchwytnym celem, a sukces Javy w tej dziedzinie był mieszany. Chociaż rzeczywiście możliwe jest pisanie programów na platformę Java, które działają dobrze na wielu maszynach docelowych, duża liczba platform z drobnymi błędami i niespójnościami spowodowała nadużycie hasła firmy Sun „  Napisz raz, uruchom wszędzie  ” ( „ Napisz raz, uruchom w dowolnym miejscu " ), aby napisać raz, debugować wszędzie  " ( " Napisz raz, debuguj wszędzie " )!

Niezależność platformy Java jest jednak skuteczna w przypadku aplikacji po stronie serwera, takich jak usługi sieciowe, serwlety i Java Beans, a także systemów wbudowanych na OSGi, korzystających ze środowiska Embedded Java .

Bezpieczne zdalne wykonanie kodu

Platforma Java była jednym z pierwszych systemów oferujących wsparcie dla wykonywania kodu ze zdalnych źródeł. Aplet może działać na użytkownika przeglądarki internetowej , wykonywanie kodu pobranego z HTTP serwera . Kod apletu działa w bardzo restrykcyjnej przestrzeni, co chroni użytkownika przed niewłaściwym lub złośliwym kodem. Przestrzeń ta jest ograniczona przez obiekt zwany menedżerem bezpieczeństwa . Taki obiekt istnieje również dla kodu lokalnego, ale domyślnie jest nieaktywny.

Menedżer bezpieczeństwa (klasa SecurityManager ) umożliwia zdefiniowanie pewnej liczby uprawnień do korzystania z zasobów systemu lokalnego (system plików, sieć, właściwości systemu itp.). Upoważnienie określa:

  1. kod dostępu (zazwyczaj aplet - ewentualnie podpisany - wysłany z serwera WWW);
  2. odpowiedni zasób lokalny (na przykład katalog);
  3. zestaw praw (na przykład odczyt/zapis).

Edytorzy apletów mogą zażądać certyfikatu, który umożliwi im cyfrowe podpisanie apletu jako bezpiecznego, potencjalnie dając im (przy odpowiedniej autoryzacji) pozwolenie na opuszczenie ograniczonej przestrzeni i dostęp do lokalnych zasobów systemowych.

Elementy języka

Oto przykład typowego programu Hello world napisanego w Javie:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }

Plik źródłowy prawie zawsze nosi nazwę klasy z rozszerzeniem ".java" (tutaj "HelloWorld.java", byłoby to nawet obowiązkowe, ponieważ klasa ma w swojej deklaracji atrybut public - wtedy udostępniając ją wszystkim innym programom ). Możemy skompilować, a następnie uruchomić ten przykład na terminalu za pomocą następujących poleceń (pod Linuksem ):

javac HelloWorld.java export CLASSPATH=. java HelloWorld

Wiersz „  export CLASSPATH =.  Służy do informowania Javy, że powinna również szukać programów klas w bieżącym katalogu. Ścieżkę tę można również podać podczas uruchamiania programu za pomocą opcji -classpath (lub w skrócie -cp ):

java -cp. HelloWorld

Zastrzeżone, prymitywne i dosłowne słowa

abstract else instanceof static try boolean false assert (1.4) enum (5.0) interface strictfp (1.2) volatile byte true break extends native super while char case final new switch double catch finally package synchronized float class for private this int const (*) goto (*) protected throw long continue if public throws short default implements return transient void null do import

Uwagi:

  • (*) te słowa kluczowe są zarezerwowane, ale nie mają znaczenia dla kompilatora (po prostu zabrania się używania tej nazwy dla np. zmiennej);
  • (1.2), (1.4) i (5.0) te słowa kluczowe zostały dodane we wskazanej wersji języka.

( źródło )

Klasa, atrybuty, metody

Koncepcja zajęć

Klasa jest opis danych zwanych atrybutów i operacji o nazwie metod. Jest to szablon definicji dla obiektów o tym samym zestawie atrybutów i tym samym zestawie operacji. Z klasy możemy stworzyć jeden lub więcej obiektów przez instancję; każdy obiekt jest instancją jednej klasy.

Widoczność:

  • Publiczny: słowo classjest następnie poprzedzone przez public, każdy użytkownik, który importuje pakiet, może użyć tej klasy. W takim przypadku musi być zdefiniowany w pliku, którego nazwą jest nazwa klasy.
  • Prywatne: słowo classjest następnie poprzedzone przez private, tylko klasy zdefiniowane w tym samym pliku mogą używać tej klasy.
  • Pakiet: słowo classnie jest poprzedzone konkretnym słowem, wszystkie klasy pakietu mogą używać tej klasy.
Koncepcja atrybutu

Atrybut definiuje się poprzez nadanie jej typ, a następnie swoją nazwę, i ewentualnie część inicjalizacji.

Widoczność:

  • Publiczny: jego definicja jest poprzedzona znakiem publici może być używany przez dowolnego użytkownika klasy.
  • Prywatne: jego definicja jest poprzedzona przez privatei może być używana tylko wewnątrz klasy
  • Protected: jego definicja jest poprzedzona protectedi może być używana tylko wewnątrz klasy, pakietu lub klas pochodnych.
  • Pakiet: żadne konkretne słowo nie poprzedza jego definicji, więc może być użyte w dowolnej klasie tego samego pakietu.
Koncepcja metody

Sposób jest określony przez:

  • Jego zwracany typ: typ wartości zwracanej przez metodę. Jeśli metoda nie zwraca wartości, określony typ to void.
  • Jej imie
  • Jego parametry: parametry są określone przez ich typ i nazwę i są oddzielone przecinkami.

Widoczność:

  • Publiczny: jego definicja jest poprzedzona znakiem publici może być używany przez dowolnego użytkownika klasy.
  • Prywatne: jego definicja jest poprzedzona przez privatei może być używana tylko wewnątrz klasy
  • Protected: jego definicja jest poprzedzona protectedi może być używana tylko wewnątrz klasy, pakietu lub klas pochodnych.
  • Pakiet: żadne konkretne słowo nie poprzedza jego definicji, więc metoda może być użyta w dowolnej klasie tego samego pakietu.

Rodzaje

Nazwisko Rozmiar w bajtach podczas obliczeń Domyślna wartość Możliwa wartość
logiczne Wystarczy jeden bit, ale często rezerwujemy bajt do ich przechowywania. false true, false
bajt 1 0 liczby całkowite od -128 do +127 (-2 7 i 2 7 -1)
spodenki 2 0 liczby całkowite od −32 768 do 32 767 (-2 15 i 2 15 -1)
int 4 0 liczby całkowite od -2 147 483 648 do +2 147 483 647 (-2 31 i 2 31 -1)
długo 8 0 liczby całkowite od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 (-2 63 i 2 63 -1)
czołg 2 '\u0000' Wszystkie wartości Unicode (wartości U + U + 0000 do FFFF, wymagane 4 cyfry po '\u') Pierwsze 128 znaków to kody ASCII i apostrofy nutowe: 'a', '1', '\'', '\n'.
pływak 4 0.0 Zbiór liczb [−3,402 823 47 × 10 38 .. −1,402 398 46 × 10 −45 ], 0, [1,402 398 46 × 10 −45 .. 3,402 823 47 × 10 38 ]
podwójnie 8 0.0 Zbiór liczb [−1797 693 134 862 315 70 × 10 308 .. -4 940 656 458 412 465 44 × 10 -324 ], 0, [4940 656 458 412 465 44 × 10 -324 .. 1797 693 134 862 315 70 × 10308 ]
Obiekt Zależna od maszyny wirtualnej null

Powyższa tabela zawiera podstawowe typy, jednak w Javie istnieją inne typy, które są obiektami i mają być używane jako takie. Na przykład do zdefiniowania liczby całkowitej możemy użyć typu „Integer”, którego domyślną wartością inicjującą będzienull

Aby utworzyć instancję zmiennej, składnia (tutaj taka sama jak w C) jest następująca:

NomDuType maVariable;

myVariable jest następnie alokowana na stosie.

Kolekcje obiektów

Często konieczne jest przechowywanie wielu danych w kolekcjach: listy zakupów, notatek studenckich itp. Zbiory można przeglądać, modyfikować, sortować, kopiować, usuwać itp. Mogą mieć stałą lub zmienną wielkość.

Kolekcje o stałym rozmiarze są lżejsze niż kolekcje o zmiennym rozmiarze.

Kolekcje o stałym rozmiarze
  • Stoły :
Podobnie jak w C, indeksy tablicy o rozmiarze n mieszczą się w zakresie od 0 do n-1. Jedną z największych zalet tablic jest stały czas O (1) dostępu do każdej komórki tablicy. Tablice to obiekty w Javie. Aby zainicjalizować tablicę tabliczb całkowitych po 10 komórek, możemy napisać (między innymi): int[] tab = new int[10]; lub :int tab[] = new int[10]; lub :int tab[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Indeksy tabmieszczą się w zakresie od 0 do 9 i nie można ich zmieniać. Każdy element tabjest inicjowany do wartości domyślnej, tutaj 0, ponieważ jest to tablica liczb całkowitych ( int). Domyślna wartość obiektu to null, wartość logiczna to false. Aby odczytać lub zmodyfikować element o tabindeksie i , dla 0 ≤ i ≤ 9, używamy tab [i] . Przykład: Aby przypisać wartość 2 do komórki tab, piszemy:tab[i] = 2; Właściwość length (przykład :)tab.length podaje liczbę elementów w tablicy. Jeśli spróbujemy zmodyfikować element, który nie istnieje, na przykład za pomocą tab [10] = 4;, zostanie zgłoszony wyjątek IndexOutOfBoundsException (nasza tablica tabzawiera tylko 10 pól, ponumerowanych od 0 do 9 włącznie).Kolekcje o zmiennej wielkości

Klasa abstrakcyjna AbstractListjest dostarczana do implementacji kolekcji o zmiennym rozmiarze.

Aby zainicjować ArrayList, musisz zaimportować klasę java.util.ArrayListi napisać liste = new ArrayList<T>();lub liste = new ArrayList<>(); z JDK 7.0.

Od JDK 1.5 mamy możliwość wskazania typu elementów zawartych w ArrayList: liczby całkowite, ciągi znaków lub inne obiekty.

  • Ta kolekcja jest pusta po wywołaniu konstruktora;
  • Możesz dodać tyle elementów, ile chcesz.

Aby dodać element piszemy liste.add(Objet);

Aby uzyskać dostęp do elementu ArrayList: liste.get(index);

Aby dowiedzieć się, ile elementów zawiera lista: liste.size();

Aby usunąć element: liste.remove(index);elementy następujące po usuniętym elemencie zostaną przesunięte w lewo.

Struktury kontrolne

Klamry

Chociaż wszystkie pełnią podobną rolę, każda pętla jest jednak dostosowana do sytuacji:

  • Struktura while (odpowiednia do wykonywania operacji, o ile spełniony jest warunek):
while (<expression booléenne>) { instruction(s) }
  • Structure do ... while (podobnie jak struktura while, ale pierwsza iteracja jest wykonywana niezależnie od warunku, dla pozostałych iteracji warunek musi być spełniony):
do { instruction(s) } while (<expression booléenne>);
  • Struktura dla (odpowiednie, gdy kolekcja musi być całkowicie przeszukana w celu przetworzenia):
for (<initialisation> ; <condition de poursuite> ; <expression dincrémentation>) { instruction(s) }
  • Struktura for each (uproszczenie for to for each, gdzie wyrażenie musi być tablicą lub kolekcją):
for (type variable : <expression>) { instruction(s) }
  • Struktura dla (Java 1.5):
for (<Objet récupérant loccurrence suivante de la collection> : <collection dobjets>) { instruction(s) } Struktury warunkowe
  • Struktura, jeśli  : prosty warunek
if (<expression booléenne>) { instruction(s) }


Uwaga  : możliwe jest łączenie warunków (wyrażeń logicznych) za pomocą dodatkowych operatorów: logicznego "AND" && (instrukcja wykonywana jeśli wszystkie warunki są spełnione):

if (<condition 1> && <condition 2>) { instruction(s) si les conditions 1 et 2 sont vraies }

Jest też logiczne „LUB” || (instrukcja wykonywana, jeśli przynajmniej jeden z warunków jest spełniony):

if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }

Wreszcie logiczne „NIE” ! co pozwala odwrócić wynik warunku.

Możliwe jest łączenie tych operacji w celu uzyskania złożonych struktur warunkowych. Możesz dodać nawiasy, aby zdefiniować priorytety warunków (jak w obliczeniach). W innych przypadkach maszyna JVM wykonuje różne kontrole od lewej do prawej.


  • Struktura, jeśli ... w przeciwnym razie  : warunek z unikalną alternatywą
if (<expression booléenne>) { instruction(s) } else { instruction(s) }
  • Struktura if… lub if… lub if…  : warunek z wieloma alternatywami
if (<expression booléenne>) { instruction(s) } else if (<expression booléenne>) { instruction(s) } else if (<expression booléenne>) { instruction(s) } else { instruction(s) }
  • Struktura zasięg… case x… ​​case y…  : gałąź do wyliczonego bloku instrukcji.
switch (<expression>) { case <constante>: instruction(s) break; case <constante>: instruction(s) break; [...] default: instruction(s) break; }

O wyborze wykonania instrukcji decyduje wyrażenie następujące po przełączniku, którego typem może być liczba całkowita ( int , char , byte lub short lub odpowiednie klasy koperty), wyliczona ( enum ) lub String (łańcuch znaków, od wersji tylko Java 7 ).

Uwaga: " warunkowy operatora lub trójskładnikowych operatora ? : może służyć do uniknięcia użycia instrukcji warunkowej. Wyrażenie warunkowe będzie miało dowolną wartość po przetestowaniu warunku logicznego:

<expression booléenne> ? <valeur si vrai> : <valeur si faux> Połączenia bezwarunkowe
  • Instrukcja break natychmiast opuszcza bieżącą pętlę ( for , while , do ), ale umożliwia również wyjście z klauzuli zawartej w przełączniku . Jeśli przerwa zostanie pominięta, wykonanie przełączenia będzie kontynuowane od pudełka do pudełka .
  • Instrukcja continue kończy bieżącą iterację i przechodzi do następnej. Jego użycie, podobnie jak użycie pętli break in, jest kontrowersyjne (podobnie jak goto w innych ustrukturyzowanych językach). Miałoby tendencję do faworyzowania typu programowania niestrukturalnego ( programowanie spaghetti ).
  • Instrukcja return kończy metodę. Z return aValue , aValue zostanie zwrócona do metody wywołującej.
Obsługa wyjątków try { instruction(s) } catch (<type exception> <variable>) { instruction(s) } [...] finally { instruction(s) }

Blok finalnego kodu zostanie wykonany niezależnie od wyniku, gdy program wyjdzie z bloku try-catch .

Oto przykład złapania wyjątku:

FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }

Ten przykład ilustruje mechanizm wyjątków w Javie. W przypadku błędu wejścia/wyjścia w bloku try wykonanie jest wznawiane w bloku catch odpowiadającym tej sytuacji (wyjątek typu IOException ).

W tym bloku catch zmienna e odwołuje się do wyjątku, który wystąpił. W tym miejscu wywołujemy metodę printStackTrace() , która wyświetla w konsoli informacje o wystąpieniu wyjątku: nazwę, przyczynę, stan stosu wywołań w momencie zgłoszenia wyjątku oraz opcjonalnie numer wiersza, w którym wystąpił błąd.

Wreszcie blok jest następnie wykonywany (tutaj, aby zamknąć zasoby używane). To tylko przykład, akcja, którą należy podjąć w przypadku wystąpienia wyjątku, zależy od ogólnego działania aplikacji i charakteru wyjątku.

Typy ogólne

Typ ogólny jest inaczej nazywany szablonem, przyjmuje jeden lub więcej innych typów jako argumenty. Typ przekazany jako parametr jest określany podczas tworzenia instancji.

Umożliwia to w szczególności w kontekście ArrayLists unikanie rzutowania.

public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }

Te typy ogólne są używane tylko podczas kompilacji, a nie bezpośrednio w kodzie bajtowym.

Różnica z C ++: Szablony w C ++ powielają klasę dla każdego typu. Z drugiej strony Java działa w czasie kompilacji tak, jakbyśmy powielili klasy tych wewnętrznych typów, ale w rzeczywistości zajmuje się tylko jedną klasą.

Kodowanie kodu źródłowego

Specyfikacje języka Java określają, że tworzą go znaki w formacie UTF-16 , co pozwala na użycie w kodzie źródłowym wszystkich znaków istniejących na świecie:

public class HelloWorld { private String text = "hello world"; }

Aby zapewnić przenośność między platformami, nazwy klas powinny jednak składać się wyłącznie ze znaków ASCII .

Operator porównania

Operator Znaczenie
== Równe (nie mylić z =, który jest operatorem przypisania)
! = Różne
< Gorszy
> Lepszy
<= Mniejsze lub równe
> = Większe bądź równe

Środowiska programistyczne

JavaStyle

JavaStyle to konwencje programowania w języku Java zdefiniowane przez firmę Sun. Przestrzeganie ścisłych konwencji zapewnia jednorodność kodu źródłowego aplikacji opracowanej przez cały zespół i promuje dystrybucję kodu źródłowego do społeczności dzielącej te same konwencje kodowania.

Niższy przypadek wielbłąd służy do nazw metod i zmiennych.

Frameworki i API

Firma Sun udostępnia dużą liczbę frameworków i interfejsów API, które umożliwiają korzystanie z języka Java w wielu różnych zastosowaniach.

Zasadniczo istnieją cztery główne struktury  :

  • Java SE (dawniej J2SE): Ten framework jest przeznaczony dla aplikacji stacji roboczych;
  • Java EE (dawniej J2EE): Ten framework specjalizuje się w aplikacjach serwerowych. Zawiera dużą liczbę interfejsów API i rozszerzeń, które to umożliwiają;
  • Java ME (dawniej J2ME): Ten framework specjalizuje się w aplikacjach mobilnych;
  • JavaFX (nie mylić z JavaFX ): Ten framework specjalizuje się w aplikacjach związanych z kartami inteligentnymi i innymi kartami inteligentnymi. W szczególności obejmuje starą kartę Java Card .

Trwałość opiera się na standardach:

  • JDBC ( Łączność z bazą danych Java );
  • JDO ( obiekty danych Java );
  • EJB ( Enterprise Java Beans ).

Istnieje jednak wiele innych technologii, interfejsów API i opcjonalnych rozszerzeń dla Javy:

narzędzia programistyczne

Programowanie można wykonać z wiersza poleceń , uruchamiając kompilator Java (często nazywany javac ), ale dla większej wygody lepiej jest użyć zintegrowanego środowiska programistycznego lub IDE (które pozwala na automatyczną kompilację), niektóre są bezpłatne. Na przykład :

Automatyzacja

Program w języku Java może być wytwarzany przy użyciu narzędzi automatyzujących proces budowania (tj. automatyzacja niektórych zadań obejmujących potencjalnie dużą liczbę zależności, takich jak wykorzystanie bibliotek, kompilacja, generowanie archiwów, dokumentacja, wdrażanie itp.). Najczęściej używane to:

  • Apache Ant (generacja przenośna, opisana w XML);
  • Apache Maven (generacja przenośna, opisana w XML);
  • Gradle (generacja przenośna, używająca języka Groovy );
  • SCons (generacja przenośna, przy użyciu języka Python ). Przykład:
Java(target = 'classes', source = 'src') Jar(target = 'test.jar', source = 'classes')

Wyniki:

 % scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes

Uwagi i referencje

  1. „  Skonsolidowane informacje o wydaniu JDK 16  ” ,20 kwietnia 2021(dostęp 21 kwietnia 2021 )
  2. w Jawa 5,0, kilka cech (The zwiększona pętli , autoboxing , varargs , opisów i teksty stałe ) wprowadzono po okazuje się użyteczne w podobne (a konkurencyjnych) języka [1] [2], [3]
  3. "  PEP 318 - Dekoratorzy na funkcje i metody  " na Python.org (dostęp na 1 st sierpnia 2020 ) .
  4. "  Dlaczego więc zdecydowali się nazwać to Javą?  » , na JavaWorld ,4 października 1996 r.
  5. Podstawowe programowanie internetowe , Marty Hall, Larry Brown
  6. Programowanie obiektowe w Javie , Barry J. Holmes, Daniel T. Joyce
  7. (w) Technologia Java: wczesne lata .
  8. (w) Sun Microsystems ogłasza utworzenie Javasoft .
  9. http://riastats.com/
  10. MicroEJ
  11. Java na STM32
  12. Apple Java 6 dla Mac OS X — często zadawane pytania http://www.java.com/en/download
  13. Uwagi techniczne TN2110 developer.apple.com
  14. (w) "P: Jakie komponenty oprogramowania JDK pozyskujecie dzisiaj? O: Otwieramy dostęp do kompilatora języka programowania Java ("javac") i wirtualnej maszyny Java HotSpot." Często zadawane pytania dotyczące darmowej i otwartej technologii Java ; źródło jest udostępniane za pośrednictwem projektu OpenJDK .
  15. „  Sun Open Sources Java Platform  ” , Sun Microsystems,13 listopada 2006(dostęp 13 listopada 2006 )
  16. http://blog.softwhere.org/archives/196
  17. (w) „  Oracle w celu wsparcia Java od stycznia 2019  ” , na itassetmanagement.net
  18. (w) Program Java Community Process (SM) - JSR: Żądania specyfikacji Java - szczegóły JSR # 901
  19. Nazewnictwo Java http://www.java.com .
  20. Wersje Java i poprawki bezpieczeństwa .
  21. (w) Plik JavaFX GA  " .
  22. http://www.oracle.com/technetwork/java/javaee/downloads/index.html
  23. Oracle ogłasza dostępność platformy Java Enterprise Edition 7 Komunikat prasowy Oracle z 12 czerwca 2013 r.
  24. (w) Pobieranie Java ME SDK  " .
  25. Oracle Java SE Commercial Offer Releases oracle.com Java Commercial Offers
  26. Mapa drogowa wsparcia Oracle Java SE, 13 maja 2013 r., http://www.oracle.com/technetwork/java/eol-135779.html
  27. Oracle wypuszcza Javę 7u25, nr 6u51
  28. http://www.oracle.com/technetwork/java/javase/7u79-relnotes-2494161.html
  29. https://jdk8.java.net „Kopia archiwalna” (wersja z 29.08.2014 w Internet Archive )
  30. http://www.oracle.com/technetwork/java/javase/8u77-relnotes-2944725.html
  31. 18.03.2014
  32. (w) „  Java SE 9 Platform Umbrella JSR (379)  ” na openjdk.java.net ,25 września 2017(dostęp 25 maja 2018 )
  33. (w) informacja prasowa
  34. (w) informacja prasowa
  35. (w) informacja prasowa
  36. (w) informacja prasowa - (w) pełna lista zmian
  37. (en) JSR 59
  38. (w) informacja prasowa - (w) pełna lista zmian
  39. (en) JSR 41
  40. (w) wersji 1.5.0 czy 5.0?
  41. (w) informacja prasowa
  42. Co to jest oprogramowanie Java Web Start http://www.java.com
  43. (w) JSR 270
  44. (w) Nazewnictwo Java
  45. http://docs.oracle.com/javase/7/docs/api
  46. Oracle aktualizuje Java SE i JavaFX dla OS X, ARM i Linux Le Monde Informatique
  47. Informacje i minimalne wymagania systemowe dotyczące instalacji i używania Java 7 for Mac http://www.java.com
  48. Powiadomienie o automatycznej aktualizacji i koniec publicznych aktualizacji Oracle JDK 7 oracle.com, 14 maja 2015 r.
  49. JDK ™ 8 Wczesne wersje dostępu java.net.
  50. Harmonogram JDK8 i status OpenJDK.
  51. Wszystko o Javie 8
  52. [4]
  53. Mickael Baron , „  Java 9 jest dostępna, platforma zaczyna się z modułami: przegląd nowych funkcji  ”, Developpez.com ,21 września 2017 r.( przeczytaj online , skonsultowano 3 stycznia 2018 )
  54. Java 9: ​​​​Co wiemy Journal du net - 16 czerwca 2015 r.
  55. "  JDK 10  " na openjdk.java.net (dostęp na 1 st kwietnia 2018 )
  56. "  EHD 286: Local-Typ zmiennej Wnioskowanie  " na openjdk.java.net (dostęp na 1 st kwietnia 2018 )
  57. "  EHD 310: Zastosowanie klasy Sharing danych  " na openjdk.java.net (dostęp na 1 st kwietnia 2018 )
  58. "  EHD 317: Experimental Java Kompilator JIT-Based  " na openjdk.java.net (dostęp na 1 st kwietnia 2018 )
  59. „  JDK 11  ” na openjdk.java.net (dostęp 7 listopada 2018 )
  60. "  JDK 12  " , na openjdk.java.net (dostęp 7 listopada 2018 )
  61. (w) „  JDK 13  ” na openjdk.java.net (dostęp 25 kwietnia 2019 )
  62. "  JDK 14  " , na openjdk.java.net (dostęp 26 kwietnia 2020 )
  63. "  Przybycie Java 15!  " , wyrocznia ,15 września 2020 r.(dostęp 15 września 2020 r. )
  64. „  Oracle ogłasza Javę 16  ”, Oracle Francja ,16 kwietnia 2021( przeczytaj online , skonsultowano 22 kwietnia 2021 r. )
  65. (w) Cele projektowe języka programowania Java .
  66. Zobacz na przykład szczegóły operacyjne i opis opcji -XX: + UseParallelGC i -XX : + UseConcMarkSweepGC z Sun JRE (en) Java SE Virtual Machine Garbage Collection Tuning
  67. Microsoft zachęcał do rozmowy o wydaniu Javy - 26.12.2002

Zobacz również

Bibliografia

  • Ken Arnold, James Gosling i David Holmes, Język Java , 2001 ( ISBN  978-2-7117-8671-8 )
  • (en) Bruce Eckel , Thinking in Java , Prentice-Hall, 2002 ( ISBN  978-0-13-100287-6 ) . wersja do pobrania online wersja elektroniczna tłumaczenie na francuski: think in java
  • Alexandre Brillant, Java 5 , 2006 ( ISBN  978-2-7460-3170-8 )
  • Jean Brondeau, Wprowadzenie do programowania obiektowego w Javie , Dunod, Paryż, 1999 ( ISBN  978-2-10-004106-0 )
  • Annick Fron, architektury rozproszone w Javie , 2007 ( ISBN  978-2-10-051141-9 )
  • Samouczek online Jak programować w JAVA [ czytaj online ]

Powiązane artykuły

Linki zewnętrzne