Jáva | ||
Datum první verze | 1995 | |
---|---|---|
Paradigma | Objektově orientovaný , strukturovaný , imperativní , funkční | |
Autor | Sun Microsystems | |
Vývojáři | Oracle Corporation | |
Poslední verze | Java SE 16.0.1 (20. dubna 2021) | |
Psaní na stroji | Statický , silný , bezpečný , nominovaný | |
Ovlivněno | Objective-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Ovlivněno | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , zpracování | |
Implementace | Seznam JVM | |
Operační systém | Multiplatformní | |
Licence | GNU GPLV2 + CPE | |
webová stránka | www.oracle.com/java/technologies | |
Přípona souboru | java, class, jar, jad a jmod | |
Java je objektově orientovaný programovací jazyk vytvořený Jamesem Goslingem a Patrickem Naughtonem , zaměstnanci společnosti Sun Microsystems , s podporou Billa Joy (spoluzakladatele společnosti Sun Microsystems v roce 1982 ), oficiálně představeného dne23. května 1995ve společnosti SunWorld .
Společnost Sun poté koupila v roce 2009 společnost Oracle, která nyní vlastní a udržuje Javu .
Zvláštností Javy je, že software napsaný v tomto jazyce je kompilován do prostřední binární reprezentace, kterou lze spustit v prostředí Java Virtual Machine (JVM) bez ohledu na operační systém .
Jazyk Java do značné míry přebírá syntaxi jazyka C ++ . Nicméně, Java byl zbaven většiny jemných pojmy C ++ a zároveň nejvíce matoucí, jako jsou ukazatele a referencí, nebo vícenásobné dědičnosti odpojených od plnění z rozhraní . Podobně od verze 8 přináší příchod funkčních rozhraní vícenásobnou dědičnost (bez správy atributů) s výhodami a nevýhodami, jako je dědičnost diamantů . Návrháři upřednostňovali objektově orientovaný přístup, takže v Javě je všechno objekt kromě primitivních typů ( celá čísla , čísla s plovoucí desetinnou čárkou atd.), Které však mají své varianty, které dědí z objektu Object. (Integer, Float, ...).
Java vám umožňuje vyvíjet aplikace typu klient-server . Na straně klienta jsou applety původem proslulosti jazyka. Zejména na straně serveru se Java v obchodním světě prosadila díky servletům , serverové straně appletů a nověji JSP ( JavaServer Pages ), které mohou nahradit PHP , ASP a ASP.NET .
Java zrodila operační systém ( JavaOS ), vývojová prostředí ( zatmění / JDK ), virtuální stroje ( MSJVM (en) , JRE ) multiplatformní aplikaci ( JVM ), variaci pro mobilní zařízení / vestavěnou ( J2ME ), grafický knihovna návrhů rozhraní ( AWT / Swing ), těžké aplikace (Jude, Oracle SQL Worksheet atd.), webové technologie (servlety, applety) a variace pro společnost ( J2EE ). Přenositelnost na bytecode Java zajišťuje virtuální Java stroj a případně standardních knihoven obsažených v JRE. Tento virtuální stroj může interpretovat bytecode nebo jej kompilovat za běhu do jazyka stroje. Přenositelnost závisí na přenositelnosti JVM v každém operačním systému.
Jazyk Java pochází z projektu Sun Microsystems z roku 1990: inženýr Patrick Naughton nebyl spokojen s jazykem C ++ používaným v Sunu, jeho programovacími rozhraními v jazyce C a souvisejícími nástroji. Při zvažování migrace na NeXT mu byla nabídnuta práce na nové technologii, a tak se zrodil Project Stealth ( stealth ).
Stealth Project byla rychle přejmenována na zelenou projektu s příchodem James Gosling a Mike Sheridan. Společně s pomocí dalších inženýrů začali pracovat v kanceláři na Sand Hill Street v Menlo Parku v Kalifornii . Pokusili se vyvinout technologii pro vývoj aplikací nové generace a nabídli společnosti Sun vyhlídky na jedinečné příležitosti.
Tým původně plánoval použít jazyk C ++, ale opustil jej z různých důvodů. Nejprve se vyvíjeli na vestavěném systému s omezenými zdroji a měli pocit, že používání C ++ vyžaduje příliš mnoho investic a že tato složitost byla pro vývojáře zdrojem chyb. Nedostatek uvolňování paměti znamenal, že správa paměti musela být naprogramována ručně, což byla výzva, ale také zdroj chyb.
Tým byl také nespokojen s nedostatky jazyka C ++, pokud jde o zabezpečení, distribuované programování a vícevláknové zpracování . Kromě toho chtěli platformu, která by mohla být portována na jakýkoli typ zařízení nebo platformy.
Bill Joy si představil nový jazyk, kombinující nejlepší programovací jazyk Mesa (ne) a jazyk C . V článku nazvaném Další ( dále ) navrhl společnosti Sun, aby její inženýři vyvíjeli objektově orientované prostředí založené na C ++. Gosling původně plánoval upravit a vylepšit jazyk C ++, který nazýval C ++ ++ - ale od této myšlenky se brzy upustilo ve prospěch vývoje nového programovacího jazyka, který nazvali Oak. ( Oak ) , podle legendy na strom zasazený před oknem jejich kanceláře .
Tým tvrdě pracoval a v létě 1992 byli schopni předvést platformu zahrnující zelený operační systém , jazyk Oak (1992), knihovny a hardware. Jejich první úspěch, představený dne3. září 1992, byla konstrukce PDA s názvem Star7, která měla grafické rozhraní a inteligentního agenta jménem Duke, který uživateli pomáhal.
V listopadu téhož roku byl Zelený projekt ukončen, aby se stal společností FirstPerson, Inc. , kterou stoprocentně vlastní Sun Microsystems, a tým se přestěhoval do Palo Alto. Tým společnosti FirstPerson se zajímal o budování vysoce interaktivních nástrojů a když společnost Time Warner vyhlásila výběrové řízení na multifunkční dekodér, společnost FirstPerson změnila své zaměření a nabídla takovou platformu.
Průmysl kabelové televize však zjistil, že nabízí příliš mnoho možností pro uživatele, a FirstPerson ztratil trh pro Silicon Graphics . Společnost se nemohla zajímat o audiovizuální průmysl a byla obnovena v rámci společnosti Sun.
Června do Červenec 1994Po třech dnech brainstormingu s Johnem Gageem, Jamesem Goslingem, Joy, Naughtonem, Waynem Rosingem a Ericem Schmidtem tým znovu zaměřil platformu na web . Věřili, že s příchodem prohlížeče Mosaic byl internet místem pro vývoj stejného druhu interaktivního nástroje, jaký si představovali pro kabelový průmysl. Naughton vyvinul jako prototyp malého webového prohlížeče WebRunner, který se později stal HotJava .
Ve stejném roce byl jazyk přejmenován na Javu poté, co bylo zjištěno, že název Oak již výrobce grafické karty používal.
Původ názvu JavaNázev „Java“ není zkratka , byl vybrán během brainstormingu, aby nahradil původní název „Oak“ , kvůli konfliktu se stávající značkou, protože káva ( „java“ v americkém slangu) je oblíbeným nápojem mnoha programátorů . Logo zvolené společností Sun je také kouřící šálek kávy.
Veřejné spuštění Javav Říjen 1994, HotJava a platforma Java byly představeny pro Sun Executives . Java 1.0a byla k dispozici ke stažení v roce 1994, ale první veřejná verze prohlížeče HotJava dorazila23. května 1995na konferenci SunWorld .
Oznámil to John Gage, vědecký ředitel Sun Microsystems. Jeho oznámení bylo doprovázeno překvapivým oznámením Marca Andressena, viceprezidenta výkonného orgánu Netscape, že Netscape zahrne podporu Java do svých prohlížečů. The9. ledna 1996, za účelem vývoje této technologie byla společností Sun Microsystems vytvořena skupina Javasoft. O dva týdny později byla k dispozici první verze Javy.
Vzhled verze 1.2 jazyka představuje významný bod obratu: v roce 2000 se verze současně objevila na dvou platformách Java:
Sun je poté kvalifikuje jako platformu Java 2 na rozdíl od prvních generací 1.0 a 1.1. Všechny následující verze, od J2EE 1.2 po Java SE nebo Java EE 7, zůstávají označovány jako platformy Java 2, ačkoli ‚2 'byl od té doby oficiálně ukončen.
Applety
Historicky byla schopnost webových prohlížečů spouštět applety Java jediným řešením pro zobrazení bohatých klientských aplikací (RIA pro bohaté internetové aplikace ). Pak se objevily konkurenční technologie včetně Macromedia Flash , DHTML JavaScript , Silverlight na základě XAML nebo Xul .
Applety na klientské pracovní stanici mohou komunikovat s servlety na serveru, stejně jako Javascript může komunikovat se serverem prostřednictvím AJAX . Flex používá technologii Flash prostřednictvím aplikace Adobe Flash Player .
V době, kdy JavaScript trpěl problémy s kompatibilitou mezi prohlížeči, měly applety Java tu výhodu, že jsou přenositelné, protože přenášení komplexních rozhraní bylo obtížné pro všechny prohlížeče na trhu.
Kromě spadu z „módy“ v Javě vedl pokrok v technologiích konkurujících Javě k tomu, že se většina vývojářů odklonila od Java appletů a problémů spojených s touto technologií (nekompatibility mezi JVM, špatný výkon, špatné knihovny. Grafika, složitost ). A konečně, moderní prohlížeče již systematicky nezahrnují prostředí Java kvůli jeho velké velikosti a míra strojů schopných zobrazovat applety byla v roce 2010 pouze 70%, což je mnohem méně než například u Flash. V roce 2010 téměř všechny bohaté klientské aplikace používaly alternativní technologie; Flash z větší části, ale také GWT .
A konečně, příchod HTML5 , jehož cílem je vložit mnoho RIA a multimediálních funkcí , také činí applety zastaralými.
JavaFX
Se vzhledem Java 8 v Březen 2014„ JavaFX se stává oficiálním nástrojem pro vytváření sady nástrojů Java GUI pro všechny druhy aplikací (mobilní aplikace, desktopové aplikace, webové aplikace atd.), Přičemž vývoj jeho předchůdce Swing je ukončen (s výjimkou oprav chyb). JavaFX je čisté rozhraní Java API (konkrétní skriptovací jazyk, který s ním byl po určitou dobu spojen, je nyní opuštěn). JavaFX obsahuje širokou škálu nástrojů, včetně zvukových a obrazových médií, 2D a 3D grafiky, webového programování, paralelního programování a dalších.
Strana serveruU aplikačních serverů se EJB používají k zapouzdření dříve definovaných tříd. Tyto prvky se používají v architekturách J2EE pro vícevrstvé aplikace. Výhodou, kterou z této práce získáme, je schopnost skrýt implementaci kódu na straně serveru před klientem.
Použití pracovní staniceNativní použití jazyka Java pro aplikace na pracovní stanici zůstalo až dosud relativně vzácné kvůli jejich nedostatečné rychlosti. S rychlým nárůstem výkonu počítačů, zdokonalením virtuálního stroje Java v průběhu 2000. let a kvalitou překladačů se prosadilo několik technologií, například NetBeans a prostředí Eclipse , technologie sdílených souborů LimeWire , Vuze (ex Azureus) a I2P . Java se také používá v matematickém programu MATLAB , na úrovni rozhraní člověk-stroj a pro počítačovou algebru. Swingové aplikace se také objevují jako alternativa k technologii .NET.
Použití s mobilními telefonyOracle oznamuje zahájeníříjna 2012na konferenci JavaOne touha nabídnout řešení Java pro oblast vestavěného softwaru pro procesory méně výkonné než ty, které jsou obvykle k dispozici na PC. Oracle sdružuje celý ekosystém společností specializujících se na tyto tržní segmenty, jako je vydavatel MicroEJ nebo dokonce STMicroelectronics, který nabízí Javu na svých STM32, jejichž jádrem je CortexM3 / M4.
Java, zejména prostřednictvím Eclipse a NetBeans , již nabízí integrovaná vývojová prostředí pro mobilní zařízení. Java je hlavní jazyk používaný pro vývoj aplikací pro Google zdarma operačního systému pro mobily : Android .
JavaFX může také umožnit použití Java na mobilních telefonech, i když to není jeho primární účel.
Windows OS, Mac OS X a GNU / LinuxSpolečnost Microsoft poskytla v roce 2001 pracovní prostředí typu Java s názvem J ++ se svými operačními systémy před vydáním systému Windows XP . Na základě rozhodnutí soudu , a vzhledem k nerespektování specifikací tohoto jazyka musel Microsoft tento jazyk opustit a vytvořit nový jazyk s názvem C # (viz kapitola „ Nezávislost vůči platformě “ více nízká)
Mnoho výrobců počítačů nadále zahrnuje prostředí JRE do svých systémů Windows.
Java se také objevuje jako standard v systému Mac OS X od společnosti Apple i pro distribuce Linux . V dnešní době tedy může většina uživatelů bez problémů spouštět aplikace Java. Na počítačích Apple však distribuci prostředí Java 5 do prostředí Java 6 zajišťovala přímo společnost Apple, nikoli společnost Oracle. Tato zásada způsobila zpoždění a omezení verzí:
J2SE 1.4 tedy nebyl k dispozici dříve, než Mac OS X v10.2 ( krycí název Jaguar ), J2SE 5.0 z Mac OS X v10.4 ( Tiger ), Java SE 6 funguje pouze pod Mac OS X v10.5 ( Leopard ) vybaveným Intel procesor a Java 7 vyžaduje počítač Mac Intel se systémem Mac OS X v10.7 0,3 ( Lion ).Open-source licencováníThe November 11 , 2006, zdrojový kód kompilátoru javac a virtuální stroj HotSpot byly vydány jako Open Source pod GNU General Public License .
The 13. listopadu 2006, Sun Microsystems oznamuje přechod Java, tedy JDK (JRE a vývojové nástroje) a prostředí Java EE (již s licencí CDDL) a Java ME s licencí GPL odtudBřezen 2007, pod názvem projektu OpenJDK .
v Květen 2007„Sun vydává OpenJDK na základě bezplatné licence. OpenJDK však stále závisí na fragmentech nesvobodného kódu, který Sun nevlastní. To je důvod, proč společnost Redhat začínáčerven 2007projekt IcedTea (in), jehož cílem je nahradit fragmenty nesvobodného kódu a zajistit tak, aby byl OpenJDK použitelný bez jakéhokoli proprietárního softwaru. včerven 2008, projekt IcedTea prošel přísným testováním kompatibility Java (TCK). IcedTea je tedy implementací specifikací Java jako open source. Sun, poté Oracle, si však zachovává kontrolu nad technologií prostřednictvím katalogu patentů vztahujících se k Javě, jakož i udržováním TCK na základě proprietární licence.
Akvizice společností OracleSpolečnost Oracle získala v roce 2009 společnost Sun Microsystems . Nyní můžeme vidět logo Oracle v dokumentaci Java API.
The 12. dubna 2010, James Gosling , tvůrce programovacího jazyka Java, rezignuje na společnost Oracle z důvodů, které si nepřeje zveřejnit. Stal se technickým ředitelem divize klientského softwaru pro Oracle.
V roce 2018 společnost Oracle oznámila, že aktualizace její verze Java SE 8 pro profesionální použití budou podléhat placené licenci od společnostiledna 2019.
Jazyk Java prošel od JDK 1.0 ( Java Development Kit ) několika vývojovými změnami a do standardní knihovny bylo přidáno mnoho tříd a balíčků. Od J2SE1.4 je vývoj Javy veden JCP ( Java Community Process ), který používá JSR ( Java Specification Requests ) k navrhování doplňků a změn na platformě Java. Samotný jazyk je specifikován specifikací jazyka Java (JLS ), přičemž změny JLS jsou zpracovávány pod kódem JSR 901.
Je třeba poznamenat, že postupný vývoj jazyka stěží souvisí s jeho syntaxí - relativně stabilní od začátku - ale hlavně s obohacováním jeho funkcí, s nastupováním a optimalizací softwarových knihoven ( API ) v různých oborech. : databáze, správa XML, distribuované a webové výpočty, multimédia, zabezpečení atd.
Číslování verzíMusíme odlišit verzi jazyka Java od jazyků platforem a JRE:
Někdy mohou být nabízeny dvě verze současně, například 8u65 a 8u66: rozdíl se obvykle skládá z drobných oprav chyb (zejména bez dopadu na bezpečnost), pro které aktualizace na nejnovější verzi není kritická, a je tedy ponechána na volbě správců (JRE) nebo vývojáři (JDK).
Po veřejných verzích prostředí Java mohou následovat neveřejné verze s názvem Advanced, vyhrazené pro komerční použití; tedy Java 1.6u45 je poslední veřejná verze Java6, ale 6u113 poslední dostupná verze končíbřezna 2016.
Verze | Poslední verze | Jméno JSE / JRE | Krycí jméno | Specifikace | JDK | Postavení října 2018 | Období údržby | Rozšířená podpora |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Dub | JSR 52 | JDK 1.0.2 | Již není aktivně podporováno | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Již není aktivně podporováno | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Hřiště | JSR 52 | 1.2.2_11 | Již není aktivně podporováno | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Poštolka | JSR 58 | 1.3.1_29 | Zastaralý | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | Merlin | JSR 59 | 1.4.2_30 | Zastaralý | 2000-2008 | |
1.5 | 0_22 až 0_85 | J2SE 5.0 | Tygr | JSR 176 | 1.5.0_22 | Zastaralé, 5u51 až 5u85 k dispozici pouze se specifickou podporou Oracle | 2002-2009 | Květen 2015 |
1.6 | 0_45 až 0_111 | Java SE 6 | Mustang | JSR 270 | 6u113 | Zastaralé, 6u51 až 6u111 k dispozici pouze se specifickou podporou Oracle | 2005-2013 | Prosince 2018 |
1.7 | 0_79 až 0_80 | Java SE 7 | Delfín | JSR 336 | 1.7.0_79 | Stabilní, verze 1.7.0_79 | 2011-2015 | Červenec 2022 |
1.8 | 0_171 | Java SE 8 | Kenai pak Spider | JSR 337 | 1.8.0_171 | Stabilní, verze 1.8.0_171 nabízená uživatelům | 2014-září 2018 | Července 2019 |
9 | 9.0.4 | Java SE 9 | Deštník | JSR 379 | 9.0.4 | Stabilní | 2018-? | |
10 | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | podporováno 6 měsíců před dalším vydáním JDK Java11-LTS | 2018, nikoli verze LTS (dlouhodobá podpora) | ||
11 | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | Verze 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 |
Zde jsou uvedena pouze čísla nejnovějších verzí pro každé vydání. Podrobnosti o postupných úpravách podle verze a aktualizace najdete na wikipedia.en / java_history .
Obsah a vývoj Od JDK 1.0 do J2SE 1.4Vydáno dne 30. září 2004(3270 tříd a rozhraní), jeho krycí název je Tiger . Původně má číslo 1,5, které se vždy používá jako interní číslo verze. Vyvinutý (v) JSR 176 , Tiger přidal do jazyka významnou řadu nových funkcí:
Tento příklad prochází obsahem objektu widgetů třídy Iterable a obsahuje pouze odkazy na objekty třídy Widget, přiřazuje každý z těchto prvků k proměnné w a poté volá metodu display () na prvku w (určeném v JSR 201). Podobná syntaxe bude představena v roce 2011 v C ++ 11 .
Kromě jazykových změn došlo v průběhu let k významnějším změnám, které vedly od několika stovek tříd v JDK 1.0 k více než 3000 v J2SE 5.0. Byly přidány celé API, jako je Swing nebo Java2D a mnoho metod z původního JDK 1.0 bylo prohlášeno za zastaralé (tj. Zastaralé, mohly by být odstraněny v novější verzi Javy).
Java SE 6Vydáno dne 11. prosince 2006(3 777 tříd a rozhraní ve více než 20 balíčcích), jeho kódové označení je Mustang . Beta verze byla vydána dne15. února 2006, další beta verze červen 2006, verze „ kandidát na vydání “ vListopadu 2006a finální verze na 12. prosince 2006. S tímto vydáním Sun trvale změní název J2SE na Java SE a odstraní .0 z čísla verze.
Tato verze byla předmětem mnoha bezpečnostních chyb a jejich opravných aktualizací, které vedly k verzi 1.6.0_45 od společnosti Oracle a dokonce k 1.6.0_51 pro její verzi Mac OS. Toto je také poslední verze prostředí Java pro systém Mac OS X 10.6 a starší.
Java SE 7Vydáno dne July 7 , 2011(8000 tříd a rozhraní), jeho krycí název je Dolphin . Toto je první verze pod licencí GNU GPL .
Od aktualizace 6 (7u6), standardní edice Java pro Oracle opět plně podporuje Mac OS X, aktualizace pro tento OS již nepodporuje Apple, ale Oracle. Tato verze prostředí Java však není podporována v systému Mac OS X v10.6 : Ve skutečnosti některá rozhraní API vyžadovaná prostředím Java 7 zahrnovala společnost Apple v systému Mac OS X 10.7.3, ale neočekává se, že budou implementována v předchozích verzích Operační Systém Mac. Verze 7u90dubna 2015 je poslední veřejně dostupná aktualizace Java 7.
Java 7 nabízí mimo jiné následující nové funkce:
Krycí jméno Kenai. Od podzimu 2013 jsou k dispozici ke stažení různé verze vyvíjené JDK a Java 8 je vydána v poloviněBřezen 2014v souladu s plánem předloženým společností Oracle zKvěten 2013.
Jednou z hlavních nových funkcí této verze je přidání lambdas , což vede k redesignu části API, zejména kolekcí a pojmu stream . Mezi další pozoruhodné doplňky patří možnosti, výchozí implementace v rámci rozhraní, redesign datového rozhraní API a další. Na druhou stranu se verze Enterprise Edition (Java 8 EE) neočekává dříve než v roce 2017.
Modularizace JVM s projektem Jigsaw , původně plánovaná pro tuto verzi, je pro svou část odložena na verzi 9, zejména kvůli bezpečnostním zranitelnostem, s nimiž se setkává Java 6, jejichž opravu společnost Oracle v roce 2013 upřednostnila před vývojem Java .
Java SE 9Původně plánováno na rok 2015, ale částečně odloženo kvůli projektu Jigsaw, byla tato verze nakonec vydána 21. září 2017.
Java 9 integruje:
Tato verze byla vydána dne 20. března 2018.
Tato nová verze obsahuje zejména:
Tato verze byla vydána dne 25. září 2018.
Kromě změny v modelu dlouhodobé podpory verzí tato verze obsahuje zejména:
Tato verze byla vydána dne 19. března 2019.
Tato verze integruje 8 evolucí:
Tato verze byla vydána dne 17. září 2019.
Tato verze byla vydána 17. března 2020
Tato verze byla vydána 15. září 2020.
Java SE 16Tato verze byla vydána 16. března 2021.
Když byl vytvořen jazyk Java, bylo rozhodnuto, že tento jazyk musí splňovat pět cílů:
První charakteristika, objektově orientovaný („OO“) a hovorový znak, odkazuje na metodu programování a návrhu jazyka a na skutečnost, že program napsaný v Javě je docela podobný programu napsanému v C ++ .
Ačkoli existuje několik interpretací objektově orientovaného výrazu , klíčovou myšlenkou v tomto typu vývoje je, že různé typy dat musí být přímo spojeny s různými operacemi, které lze s těmito daty provádět. Výsledkem je, že data (zvaná Vlastnosti ) a kód, který s nimi manipuluje (zvaný Metody ), jsou kombinovány do jedné entity zvané Třída objektů. Kód se logicky dělí na malé koherentní entity a tím se stává jednodušší na údržbu a snadnější opětovné použití, přičemž je neodmyslitelně modulární.
Další mechanismy, jako je dědičnost , umožňují využívat všechny vlastnosti třídy dříve napsané v jejích vlastních programech, aniž byste museli znát její vnitřní fungování - pouze se zobrazí rozhraní (zde popsané rozhraní). Vlastnosti a metody bez poskytnutí souvisejících kód). Java zakazuje pojem dědičnosti od několika nadřazených tříd, pokud se nejedná o rozhraní.
Ve verzi 1.5 jazyka byla přidána generika , mechanismus polymorfismu podobný (ale odlišný) šablonám jazyka C ++ nebo funktorům OCaml . Generika umožňuje jednodušším a bezpečnějším způsobem (z hlediska psaní) vyjádřit vlastnosti objektů, jako jsou kontejnery (seznamy, stromy atd.): Typ seznamu je poté považován za obecně srovnatelný s typem d 'objekt obsažený v seznamu.
Tento prvek přispívá k robustnosti a výkonu programů, Garbage Collector je volán pravidelně a automaticky během provádění programu. Ve víceprocesorových a / nebo vícejádrových systémech to dokonce využívá několik podprocesů s nízkou prioritou, aby co nejméně narušilo provádění programu. Kromě toho může programátor v případě potřeby navrhnout spuštění garbage collectoru pomocí metody System.gc () .
Opakovaná stížnost na jazyky, jako je C ++, je obtížným úkolem, který je třeba k ručnímu naprogramování správy paměti. V C ++ je paměť přidělená programem k vytvoření objektu uvolněna, když je zničena (například explicitním voláním operátoru odstranění ). Pokud programátor zapomene kódovat uvolnění, bude to mít za následek „ únik paměti “ a program bude spotřebovávat stále více a více. Horší je, že pokud omylem program několikrát požádá o uvolnění, nebo po vyžádání jeho uvolnění použije oblast paměti, pravděpodobně se stane nestabilní a způsobí fatální chybu.
V Javě se mnoha z těchto problémů vyhne uvolňování paměti . Paměťový prostor potřebný pro každý vytvořený objekt je spravován v haldě paměti ( anglicky : heap paměti ) vyhrazené pro tento účel. Program přistupuje ke každému objektu prostřednictvím odkazu v haldě. Když už neexistuje žádný odkaz na dosažení objektu, uvolňovač paměti jej automaticky zničí - protože se stal nepřístupným - uvolní paměť a zabrání tak úniku paměti.
Garbage collector používá algoritmus značkování a uvolňování ( anglicky : mark and sweep ) pro správu složitých případů vzájemných odkazů objektů nebo odkazů na smyčky (pro příklad dvojitého řetězení seznamu ). V praxi stále existují případy programovací chyby, kdy garbage collector považuje objekt za stále užitečný, zatímco program k němu již nepřistupuje funkčně (ale zachovává odkaz na objekt), což představuje konkrétní případ „ úniku paměti “.
Díky uvolňování paměti je správa paměti výrazně snazší a bezpečnější. Návrháři a uživatelé programů nebo knihoven se nemusí starat o přidělení objektů (operátor mazání v C ++), s výjimkou případných výkonových důvodů.
Nezávislost na platformě znamená, že programy napsané v Javě fungují velmi podobně na různých hardwarových architekturách. Licence Sunu pro Javu tedy trvá na tom, že všechny implementace musí být kompatibilní. Teoreticky tedy můžeme provádět vývoj na dané architektuře a konečnou aplikaci spouštět na všech ostatních.
Tento výsledek je získán:
Všimněte si, že i když existuje výslovně první fáze kompilace, bajtový kód Java je buď za běhu interpretován nebo převeden do nativního kódu kompilátorem za běhu ( právě včas , JIT).
Druhy kompilacíDřívější implementace jazyka používaly k dosažení přenositelnosti interpretovaný virtuální stroj. Tyto implementace produkovaly programy, které se spouštěly pomaleji než programy psané v kompilovaném jazyce (C, C ++ atd.), Takže jazyk trpěl reputací špatného výkonu.
Novější implementace Java Virtual Machine (JVM) vytvářejí programy mnohem rychleji než dříve pomocí různých technik:
Poté, co společnost Sun zjistila, že implementace společnosti Microsoft nepodporovala rozhraní RMI a JNI , a ve srovnání s původní platformou měla prvky specifické pro platformu, podala společnost Sun žalobu na společnost Microsoft a získala náhradu škody (20 milionů USD). Tento akt spravedlnosti dále zpřísnil podmínky licence Sunu. V reakci na to společnost Microsoft ukončila podporu prostředí Java na svých platformách a v posledních verzích aplikace Windows Internet Explorer nepodporuje applety Java bez přidání modulů plug-in. Sun však poskytuje runtime prostředí Java zdarma k dispozici pro různé platformy Microsoft.
Přenositelnost je technicky nepolapitelný cíl a úspěch Javy v této oblasti byl smíšený. I když je skutečně možné psát programy pro platformu Java, které fungují dobře na mnoha cílových počítačích, velký počet platforem s malými chybami a nekonzistencemi vyústil ve zneužití sloganu společnosti Sun „ Write once, run anywhere “ ( „Write once, run anywhere “ , běžet kdekoli " ) na " psát jednou, ladit všude " ( " Psát jednou, ladit všude " )!
Nezávislost platformy Java je však úspěšná u aplikací na straně serveru, jako jsou webové služby, servlety a Java Beans, stejně jako vestavěné systémy na OSGi, pomocí prostředí Embedded Java .
Platforma Java byla jedním z prvních systémů, které nabízejí podporu pro provádění kódu ze vzdálených zdrojů. Applet může běžet uživatele webovém prohlížeči , spuštění kódu stažené z HTTP serveru . Kód appletu pracuje ve velmi omezujícím prostoru, který chrání uživatele před chybnými nebo škodlivými kódy. Tento prostor je ohraničen objektem zvaným správce zabezpečení . Takový objekt existuje také pro místní kód, ale ve výchozím nastavení je neaktivní.
Správce zabezpečení (třída SecurityManager ) umožňuje definovat určitý počet oprávnění pro používání prostředků místního systému (souborový systém, síť, vlastnosti systému atd.). Autorizace definuje:
Redaktoři appletů mohou požádat o certifikát, který jim umožní digitálně podepsat applet jako bezpečný, což jim (se správnou autorizací) dá oprávnění k opuštění omezujícího prostoru a přístupu k místním systémovým prostředkům.
Zde je příklad typického programu Hello world napsaného v Javě:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }Zdrojový soubor téměř vždy nese název třídy s příponou „.java“ (zde „HelloWorld.java“, byl by dokonce povinný, protože třída má ve své deklaraci atribut public - zpřístupňuje ji všem ostatním programům) . Tento příklad můžeme zkompilovat a poté spustit na terminálu pomocí následujících příkazů (v systému Linux ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldŘádek „ export CLASSPATH =. Používá se k tomu, aby řekla Javě, že by měla také hledat programy třídy v aktuálním adresáři. Tuto cestu lze také zadat při spuštění programu pomocí volby -classpath (nebo zkráceně -cp ):
java -cp. HelloWorldPoznámky:
( zdroj )
Třída je popis dat zvaných atributy, a operací s názvem metody. Toto je šablona definice pro objekty se stejnou sadou atributů a stejnou sadou operací. Z třídy můžeme vytvořit instanci jeden nebo více objektů; každý objekt je instancí jedné třídy.
Viditelnost:
Atribut je definován tím, že její typ, pak se jeho jméno a případně inicializační část.
Viditelnost:
Způsob je definován:
Viditelnost:
Příjmení | Velikost v bajtech během výpočtů | Výchozí hodnota | Možné hodnoty |
---|---|---|---|
booleovský | Stačí jeden bit, ale často si vyhrazujeme bajt, abychom je uložili. | false | true, false |
byte | 1 | 0 | celá čísla mezi -128 a +127 (-2 7 a 2 7 -1) |
šortky | 2 | 0 | celá čísla mezi -32 768 a 32 767 (-2 15 a 2 15 -1) |
int | 4 | 0 | celá čísla mezi −2 147 483 648 a +2 147 483 647 (-2 31 a 2 31 -1) |
dlouho | 8 | 0 | celá čísla mezi −9 223 372 036 854 775 808 a 9 223 372 036 854 775 807 (-2 63 a 2 63 -1) |
nádrž | 2 | '\u0000' | Všechny hodnoty Unicode (hodnoty U + U + 0000 až FFFF, 4 číslice nezbytné poté, co '\u') Prvních 128 znaků jsou ASCII kódy a poznámka apostrofy: 'a', '1', '\'', '\n'. |
plovák | 4 | 0.0 | Sada čísel [−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 ] |
dvojnásobek | 8 | 0.0 | Sada čísel [−1 797 693 134 862 315 70 × 10 308 .. −4 940 656 458 412 465 44 × 10 −324 ], 0, [4 940 656 458 412 465 44 × 10 −324 .. 1797 693 134 862 315 70 × 10 308 ] |
Objekt | Závisí na virtuálním počítači | null |
V tabulce výše jsou uvedeny základní typy, v Javě však existují i jiné typy, které jsou objekty a které se mají jako takové používat. Například k definování celého čísla můžeme použít typ „Integer“, jehož inicializační hodnota bude ve výchozím nastavenínull
Pro vytvoření instance proměnné je syntaxe (zde stejná jako v C) následující:
NomDuType maVariable;myVariable je poté přidělen na zásobník.
Často je nutné ukládat spoustu dat do sbírek: nákupní seznam, poznámky studentů atd. Sborníky lze prohlížet, upravovat, můžeme je třídit, překódovat, mazat atd. Mohou mít pevnou nebo proměnnou velikost.
Kolekce s pevnou velikostí jsou lehčí než kolekce s proměnnou velikostí.
Kolekce pevné velikostiAbstraktní třída AbstractListje poskytována k implementaci kolekcí proměnné velikosti.
Chcete-li inicializovat ArrayList, musíte importovat třídu java.util.ArrayLista zapsat liste = new ArrayList<T>();nebo liste = new ArrayList<>(); z JDK 7.0.
Vzhledem k tomu, JDK 1.5, máme možnost označit typ prvků obsažených v ArrayList: celá čísla, řetězce znaků nebo jiné objekty.
Pro přidání prvku píšeme liste.add(Objet);
Přístup k prvku ArrayList: liste.get(index);
Chcete-li zjistit počet prvků, které seznam obsahuje: liste.size();
Odstranění prvku: liste.remove(index);prvky následující za odstraněným prvkem budou posunuty doleva.
I když mají všechny podobnou roli, každá smyčka je přesto přizpůsobena situaci:
Poznámka : je možné kombinovat podmínky (logické výrazy) pomocí dalších operátorů: logické "AND" && (příkaz provedený, pokud jsou splněny všechny podmínky):
Existuje také logické „NEBO“ || (instrukce provedena, pokud je splněna alespoň jedna z podmínek):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Konečně je tu logické „NE“ ! což vám umožní zvrátit výsledek podmínky.
Je možné tyto operace kombinovat a získat složité podmíněné struktury. Můžete přidat závorky a definovat priority podmínek (jako ve výpočtu). V ostatních případech provádí JVM různé kontroly zleva doprava.
Volba provedení instrukcí je určena přepínačem následujícím výrazem, jehož typ může být celé číslo ( int , char , byte nebo krátké nebo odpovídající třídy obálek), výčet ( enum ) nebo String (řetězec znaků, pouze od Javy 7).
Poznámka: " podmíněný operátor nebo ternární operátor ? : lze použít, aby se zabránilo použití podmíněného příkazu. Podmíněný výraz bude mít po testování booleovské podmínky buď jednu z hodnot:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Bezpodmínečná spojeníNakonec bude blok kódu spuštěn bez ohledu na výsledek, když program opustí blok try-catch .
Zde je příklad zachycení výjimky:
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(); }Tento příklad ilustruje mechanismus výjimek v Javě. V případě chyby vstupu / výstupu v bloku try se obnoví provádění v bloku catch odpovídající této situaci (výjimka typu IOException ).
V tomto bloku zachycení odkazuje proměnná e na výjimku, ke které došlo. Zde vyvoláme metodu printStackTrace (), která v konzole zobrazí informace o výjimce, ke které došlo: název, důvod, stav zásobníku volání, když byla vyvolána výjimka, a volitelně číslo řádku, kde došlo k chybě.
Poté se provede konečný blok (zde se uzavírají použité zdroje). Toto je pouze příklad, akce, která se má provést, když dojde k výjimce, závisí na obecném fungování aplikace a povaze výjimky.
Obecné typyObecný typ se jinak nazývá Šablona, jako argumenty se bere jeden nebo více dalších typů. Typ předaný jako parametr je určen během vytváření instance.
To umožňuje zejména v kontextu ArrayLists vyhnout se obsazení.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Tyto obecné typy se používají pouze při kompilaci, nikoli přímo v bytecode.
Rozdíl v C ++: Šablony v C ++ duplikují třídu pro každý typ. Na druhou stranu Java funguje v době kompilace, jako kdybychom duplikovali třídy těchto vnitřních typů, ale ve skutečnosti se zabývá pouze jednou třídou.
Kódování zdrojového kóduSpecifikace jazyka Java specifikují, že je tvořen znaky ve formátu UTF-16 , což umožňuje použít ve zdrojovém kódu všechny znaky existující na světě:
public class HelloWorld { private String text = "hello world"; }Aby byla zajištěna přenositelnost mezi platformami, měly by se názvy tříd skládat pouze ze znaků ASCII .
Operátor | Význam |
---|---|
== | Rovné (nezaměňovat s = což je operátor přiřazení) |
! = | Odlišný |
< | Nižší |
> | Nadřízený |
<= | Méně nebo rovno |
> = | Větší nebo rovno |
JavaStyle jsou programovací konvence jazyka Java definované společností Sun. Respektování přísných konvencí zajišťuje homogenitu ve zdrojovém kódu aplikace vyvinuté celým týmem a podporuje distribuci zdrojového kódu do komunity sdílející stejné konvence kódování.
Nižší camelcase se používá pro názvy metod a proměnných.
Sun poskytuje velké množství rámců a API, které umožňují použití Javy pro nejrůznější použití.
V zásadě existují čtyři hlavní rámce :
Perzistence je založena na standardech:
Existuje však mnoho dalších technologií, API a volitelných rozšíření pro Javu:
Programování lze provést z příkazového řádku spuštěním kompilátoru Java (často se jmenuje javac ), ale pro větší pohodlí je lepší použít integrované vývojové prostředí nebo IDE (což umožňuje automatické kompilace), některé jsou zdarma. Například :
Program Java lze vytvořit pomocí nástrojů, které automatizují proces sestavení (tj. Automatizace určitých úkolů zahrnujících potenciálně velké množství závislostí, jako je použití knihovny, kompilace, generování archivů, dokumentace, nasazení atd.). Nejpoužívanější jsou:
Výsledek:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes