Jawa | ||
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 .
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.
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.
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 JavaNazwa „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 JavyW 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.
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.
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 serweraW 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 roboczejNatywne 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órkowymiOracle 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/LinuxMicrosoft 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 source11 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 OracleFirma 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.
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 wersjiMusimy odróżnić wersję języka Java od wersji platform i JRE:
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.4Wydano 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:
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 6Wydano 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 7Wydano 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:
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 9Pierwotnie 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:
Ta wersja została wydana dnia 20 marca 2018 r..
Ta nowa wersja zawiera w szczególności:
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:
Ta wersja została wydana dnia 19 marca 2019 r..
Ta wersja integruje 8 ewolucji:
Ta wersja została wydana dnia 17 września 2019 r..
Ta wersja została wydana 17 marca 2020 r.
Ta wersja została wydana 15 września 2020 r.
Java SE 16Ta wersja została wydana 16 marca 2021 r.
Kiedy powstawał język Java, zdecydowano, że język ten musi spełniać pięć celów:
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.
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 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:
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 kompilacjiWczesne 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:
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 .
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:
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.
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 HelloWorldWiersz „ 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. HelloWorldUwagi:
( źródło )
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ść:
Atrybut definiuje się poprzez nadanie jej typ, a następnie swoją nazwę, i ewentualnie część inicjalizacji.
Widoczność:
Sposób jest określony przez:
Widoczność:
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.
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 rozmiarzeKlasa 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.
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.
Chociaż wszystkie pełnią podobną rolę, każda pętla jest jednak dostosowana do sytuacji:
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):
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.
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 bezwarunkoweBlok 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ólneTyp 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łowegoSpecyfikacje 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 | 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 |
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.
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 :
Trwałość opiera się na standardach:
Istnieje jednak wiele innych technologii, interfejsów API i opcjonalnych rozszerzeń dla Javy:
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 :
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:
Wyniki:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes