Java (programovací jazyk) - Java (programming language)

Jáva
Java programming language logo.svg
Paradigma Multi-paradigma : generické , objektově orientované (na základě tříd ), funkční , imperativní , reflexní , souběžné
Navrhl James Gosling
Vývojář Oracle Corporation
Poprvé se objevil 23. května 1995 ; Před 26 lety (1995-05-23)
Stabilní uvolnění
Java SE  Edit this on Wikidata 17/14 . Září 2021 ; Před 33 dny (14 September 2021)
Kázeň při psaní Statický, silný, bezpečný , nominativní , manifestní
Rozšíření názvu souboru .java, .class , .jar , .jmod
webová stránka oracle .com /java /
Ovlivněn
CLU , Simula67 , Lisp , Smalltalk , Ada 83 , C ++ , C# , Eiffel , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Object Pascal
Ovlivněn
Ada 2005 , BeanShell , C# , Kaple , Clojure , ECMAScript , Fantom , Gambas , Groovy , Hack , Haxe , J# , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript

Java je na vysoké úrovni , class-založené , objektově orientovaný programovací jazyk , který je navržen tak, aby co nejméně implementační závislosti jak je to možné. Jedná se o univerzální programovací jazyk, jehož cílem je nechat programátory jednou napsat, spustit kdekoli (WORA), což znamená, že zkompilovaný kód Java lze spustit na všech platformách, které podporují Javu, aniž by bylo nutné rekompilaci. Java aplikace jsou typicky kompilovány do bytecode, který lze spustit na jakémkoli virtuálním stroji Java (JVM) bez ohledu na základní počítačovou architekturu . Syntax Javy je podobná C a C ++ , ale má méně nízkoúrovňové zařízení, než jeden z nich. Modul runtime jazyka Java poskytuje dynamické funkce (například reflexi a úpravu kódu za běhu), které obvykle nejsou k dispozici v tradičních kompilovaných jazycích. Od roku 2019 byl Java jedním z nejpopulárnějších programovacích jazyků používaných podle GitHub , zejména pro webové aplikace klient-server , s hlášeným 9 miliony vývojářů.

Java byla původně vyvinuta Jamesem Goslingem ve společnosti Sun Microsystems ( kterou od té doby získala společnost Oracle ) a byla vydána v roce 1995 jako hlavní součást platformy Java společnosti Sun Microsystems . Původní a referenční implementační kompilátory Java , virtuální počítače a knihovny tříd byly původně vydány společností Sun pod proprietárními licencemi . V květnu 2007, v souladu se specifikacemi komunitního procesu Java , společnost Sun relicencovala většinu svých technologií Java na základě licence pouze pro GPL-2.0 . Oracle nabízí svůj vlastní virtuální stroj HotSpot Java, nicméně oficiální referenční implementací je OpenJDK JVM, což je bezplatný software s otevřeným zdrojovým kódem, který používá většina vývojářů a je výchozím JVM pro téměř všechny distribuce Linuxu.

V říjnu 2021 je Java 17 nejnovější verzí. Java 8, 11 a 17 jsou aktuální verze dlouhodobé podpory (LTS). Společnost Oracle vydala poslední veřejnou aktualizaci s nulovými náklady pro starší verzi Java 8 LTS v lednu 2019 pro komerční použití, i když jinak bude nadále podporovat Java 8 s veřejnými aktualizacemi pro osobní použití na neurčito. Jiní prodejci začali nabízet sestavení OpenJDK 8 a 11 s nulovými náklady, která stále dostávají zabezpečení a další upgrady.

Společnost Oracle (a další) důrazně doporučuje odinstalovat zastaralé a nepodporované verze Javy z důvodu vážných rizik způsobených nevyřešenými problémy se zabezpečením. Společnost Oracle doporučuje svým uživatelům, aby okamžitě přešli na podporovanou verzi, například na jednu z verzí LTS (8, 11, 17).

Dějiny

Duke, maskot Java
James Gosling , tvůrce Javy, v roce 2008
TIOBE programovací jazyk popularita index graf od roku 2002 do roku 2018. Javy byl stále na vrcholu v období od poloviny roku 2015 do počátku roku 2020.

James Gosling , Mike Sheridan a Patrick Naughton zahájili projekt jazyka Java v červnu 1991. Java byla původně navržena pro interaktivní televizi, ale v té době byla pro průmysl digitální kabelové televize příliš vyspělá. Jazyk se původně nazýval Dub podle dubu, který stál před Goslingovou kanceláří. Později se projekt přejmenoval na Green a nakonec byl přejmenován na Java , z kávy Java , druhu kávy z Indonésie . Gosling navrhl Javu se syntaxí ve stylu C / C ++, kterou programátoři systému a aplikací považují za známou.

Sun Microsystems vydal první veřejnou implementaci jako Java 1.0 v roce 1996. Sliboval funkci jednou zapsat, spustit kdekoli (WORA), což poskytuje bezplatné běhy na populárních platformách . Poměrně bezpečný a s konfigurovatelným zabezpečením umožňoval omezení přístupu k síti a souborům. Velké webové prohlížeče brzy začlenily schopnost spouštět Java aplety na webových stránkách a Java se rychle stala populární. Java 1.0 kompilátor byl re-psaný v Javě by Arthur van Hoff striktně dodržovat specifikace jazyka Java 1.0. S příchodem Javy 2 (původně vydané jako J2SE 1.2 v prosinci 1998 - 1999) měly nové verze několik konfigurací vytvořených pro různé typy platforem. Technologie a API zahrnutá v J2EE pro podnikové aplikace obvykle běží v serverovém prostředí, zatímco J2ME představovala API optimalizovaná pro mobilní aplikace. Verze pro stolní počítače byla přejmenována na J2SE. V roce 2006 společnost Sun pro marketingové účely přejmenovala nové verze J2 na Java EE , Java ME a Java SE .

V roce 1997 se společnost Sun Microsystems obrátila na normalizační orgán ISO/IEC JTC 1 a později na Ecma International, aby formalizovala Javu, ale brzy se z procesu stáhla. Java zůstává de facto standardem , ovládaným prostřednictvím komunitního procesu Java . Najednou společnost Sun zpřístupnila většinu svých implementací Java bezplatně, a to navzdory jejich stavu proprietárního softwaru . Sun generoval příjmy z Javy prodejem licencí na specializované produkty, jako je Java Enterprise System.

Dne 13. listopadu 2006 společnost Sun vydala velkou část svého virtuálního stroje Java (JVM) jako bezplatný a open-source software (FOSS) za podmínek licence pouze pro GPL-2.0 . 8. května 2007 společnost Sun proces dokončila, čímž zpřístupnila veškerý základní kód svého JVM za podmínek distribuce svobodného softwaru /open-source, kromě malé části kódu, na který Sun nedržel autorská práva.

Viceprezident společnosti Sun Rich Green uvedl, že ideální role Sunu v oblasti Javy byla jako evangelista . Po akvizici společnosti Sun Microsystems společností Oracle Corporation v letech 2009–10 se společnost Oracle označila za správce technologie Java s neúnavným závazkem podporovat komunitu účasti a transparentnosti. To nezabránilo společnosti Oracle podat žalobu na společnost Google krátce poté za používání Javy v sadě Android SDK (viz část Android ).

Dne 2. dubna 2010, James Gosling odstoupil z Oracle .

V lednu 2016 společnost Oracle oznámila, že běhová prostředí Java založená na JDK 9 přestanou používat plugin prohlížeče.

Software Java běží na všem, od notebooků po datová centra , herní konzole až po vědecké superpočítače .

Zásady

Při vytváření jazyka Java bylo pět hlavních cílů:

  1. Musí to být jednoduché, objektově orientované a známé.
  2. Musí být robustní a bezpečný.
  3. Musí být neutrální vůči architektuře a přenosný.
  4. Musí se spouštět s vysokým výkonem.
  5. Musí být interpretováno , vlákno a dynamické .

Verze

Od září 2021 jsou Java 8, 11 a 17 podporovány jako verze pro dlouhodobou podporu (LTS). Hlavní verze vydání Java spolu s daty jejich vydání:

Verze datum
JDK Beta 1995
JDK 1,0 23. ledna 1996
JDK 1.1 19. února 1997
J2SE 1.2 08.12.1998
J2SE 1.3 08.05.2000
J2SE 1.4 06.02.2002
J2SE 5.0 30. září 2004
Java SE 6 11. prosince 2006
Java SE 7 28. července 2011
Java SE 8 (LTS) 18. března 2014
Java SE 9 21. září 2017
Java SE 10 20. března 2018
Java SE 11 (LTS) 25. září 2018
Java SE 12 19. března 2019
Java SE 13 17. září 2019
Java SE 14 17. března 2020
Java SE 15 15. září 2020
Java SE 16 16. března 2021
Java SE 17 (LTS) 14. září 2021
Java SE 18 Března 2022

Edice

Sun definoval a podporuje čtyři edice Java zaměřené na různá aplikační prostředí a segmentoval mnoho svých API tak, aby patřily k jedné z platforem. Platformy jsou:

Tyto třídy v Java API jsou uspořádány do samostatných skupin nazývaných balíčky . Každý balíček obsahuje sadu souvisejících rozhraní , tříd, dílčích balíčků a výjimek .

Společnost Sun také poskytla edici nazvanou Personal Java , která byla nahrazena pozdějšími párováními konfiguračních profilů Java ME založených na standardech.

Popravní systém

Java JVM a bytecode

Jedním z návrhových cílů Javy je přenositelnost , což znamená, že programy napsané pro platformu Java musí běžet podobně na jakékoli kombinaci hardwaru a operačního systému s odpovídající podporou běhu. Toho je dosaženo kompilací kódu jazyka Java do mezilehlé reprezentace zvané Java bytecode , namísto přímo do strojového kódu specifického pro architekturu . Pokyny pro bajtový kód Java jsou analogické strojovému kódu, ale jsou určeny k provedení pomocí virtuálního počítače (VM) napsaného speciálně pro hostitelský hardware. Koncoví uživatelé běžně používají prostředí Java Runtime Environment (JRE) nainstalované na svém počítači pro samostatné aplikace Java nebo ve webovém prohlížeči pro aplety Java .

Standardní knihovny poskytují obecný způsob přístupu k funkcím specifickým pro hostitele, jako je grafika, vytváření vláken a vytváření sítí .

Použití univerzálního bajtkódu usnadňuje přenos. Avšak režie interpretace bajtkódu do strojových instrukcí způsobila, že interpretované programy běží téměř vždy pomaleji než nativní spustitelné soubory . Kompilátory Just-in-time (JIT), které kompilují bajtové kódy do strojového kódu za běhu, byly zavedeny od rané fáze. Kompilátor Java Hotspot je ve skutečnosti dva překladače v jednom; a s GraalVM (zahrnuto např. v Javě 11, ale odstraněno od Javy 16) umožňující stupňovitou kompilaci . Samotná Java je nezávislá na platformě a je přizpůsobena konkrétní platformě, na které pro ni běží virtuální stroj Java (JVM), který překládá bajtový kód Java do strojového jazyka platformy.

Výkon

Programy napsané v Javě mají pověst pomalejší a vyžadují více paměti než programy napsané v C ++ . Rychlost provádění programů Java se však výrazně zlepšila zavedením kompilace just-in-time v letech 1997/1998 pro Java 1.1 , přidáním jazykových funkcí podporujících lepší analýzu kódu (jako jsou vnitřní třídy, třída StringBuilder, volitelná tvrzení atd.) .) a optimalizace ve virtuálním strojem Javy, jako HotSpot stávají Sunu výchozí JVM v roce 2000. Díky Javě 1.5, výkon byl vylepšen přidáním balíčku java.util.concurrent, včetně zámků bez implementací těchto ConcurrentMaps a další vícejádrové kolekce a byla dále vylepšena v Javě 1.6.

Non-JVM

Některé platformy nabízejí přímou hardwarovou podporu pro Javu; existují mikrořadiče, které mohou spouštět bytecode Java v hardwaru namísto softwarového virtuálního stroje Java, a některé procesory založené na ARM by mohly mít hardwarovou podporu pro provádění Java bytecode prostřednictvím jejich možnosti Jazelle , ačkoli podpora byla v současných implementacích ARM většinou zrušena.

Automatická správa paměti

Java ke správě paměti v životním cyklu objektu používá automatický sběrač odpadků . Programátor určuje, kdy se vytvářejí objekty, a Java runtime je zodpovědný za obnovu paměti, jakmile se objekty již nepoužívají. Jakmile nezůstanou žádné odkazy na objekt, nedosažitelná paměť se stane způsobilým k automatickému uvolnění uvolňovačem odpadků. Něco podobného úniku paměti může stále nastat, pokud kód programátora obsahuje odkaz na objekt, který již není potřeba, obvykle když objekty, které již nejsou potřebné, jsou uloženy v kontejnerech, které jsou stále používány. Pokud jsou volány metody pro neexistující objekt, je vyvolána výjimka nulového ukazatele .

Jednou z myšlenek modelu automatické správy paměti Java je, že programátoři mohou být ušetřeni břemene nutnosti provádět ruční správu paměti. V některých jazycích je paměť pro vytváření objektů implicitně alokována v zásobníku nebo explicitně přidělena a uvolněna z haldy . V druhém případě je odpovědnost za správu paměti na programátorovi. Pokud program nezruší přidělení objektu, dojde k nevracení paměti . Pokud se program pokusí získat přístup nebo uvolnit paměť, která již byla uvolněna, výsledek je nedefinovaný a obtížně předvídatelný a program se pravděpodobně stane nestabilní nebo se zhroutí. To lze částečně napravit použitím chytrých ukazatelů , které ale zvyšují režii a složitost. Pamatujte, že uvolňování paměti nebrání logickým únikům paměti , tj. Těm, kde je paměť stále odkazována, ale nikdy nebyla použita.

Svoz odpadu může nastat kdykoli. V ideálním případě k tomu dojde, když je program nečinný. Je zaručeno, že se spustí, pokud na haldě není dostatek volné paměti pro přidělení nového objektu; to může způsobit, že se program na okamžik zastaví. Správa explicitní paměti není v Javě možná.

Java nepodporuje aritmetiku ukazatelů ve stylu C/C ++ , kde lze s adresami objektů aritmeticky manipulovat (např. Přidáním nebo odečtením ofsetu). To umožňuje sběrateli odpadků přemístit odkazované objekty a zajišťuje bezpečnost a zabezpečení typu.

Stejně jako v C ++ a některých dalších objektově orientovaných jazycích jsou proměnné primitivních datových typů Javy buď uloženy přímo v polích (pro objekty), nebo v zásobníku (u metod), nikoli na hromadu, jak je tomu běžně u neprimitivních dat typů (ale viz úniková analýza ). Toto bylo vědomé rozhodnutí návrhářů Javy z důvodů výkonu.

Java obsahuje více typů sběračů odpadků. Od verze Java 9 používá HotSpot jako výchozí nástroj Garbage First Garbage Collector (G1GC). Existuje však také několik dalších sběračů odpadu, které lze použít ke správě haldy. Pro většinu aplikací v Javě stačí G1GC. Dříve byl Parallel Garbage Collector používán v Javě 8.

Vyřešení problému se správou paměti nezbavuje programátora zátěže správně zacházet s jinými druhy zdrojů, jako jsou síťová nebo databázová připojení, popisovače souborů atd., Zejména za přítomnosti výjimek.

Syntax

Graf závislosti tříd Java Core (vytvořeno pomocí jdeps a Gephi )

Syntaxe Javy je do značné míry ovlivněn tím, C ++ a C . Na rozdíl od C ++, který kombinuje syntaxi pro strukturované, generické a objektově orientované programování, byla Java postavena téměř výhradně jako objektově orientovaný jazyk. Veškerý kód je zapsán uvnitř tříd a každá datová položka je objekt, s výjimkou primitivních datových typů (tj. Celá čísla, čísla s plovoucí desetinnou čárkou, logické hodnoty a znaky), které nejsou objekty z důvodu výkonu. Java znovu používá některé populární aspekty C ++ (například printfmetodu).

Na rozdíl od C ++ Java nepodporuje přetížení operátorů ani vícenásobnou dědičnost pro třídy, ačkoli pro rozhraní je podporována vícenásobná dědičnost .

Java používá komentáře podobné těm z C ++. Existují tři různé styly komentářů: styl jedné řádky označený dvěma lomítky ( //), styl více řádků otevřený /*a zavřený */a styl komentování Javadoc otevřený /**a zavřený */. Styl komentování Javadoc umožňuje uživateli spustit spustitelný soubor Javadoc k vytvoření dokumentace k programu a lze jej přečíst v některých integrovaných vývojových prostředích (IDE), jako je Eclipse , což vývojářům umožní přístup k dokumentaci v rámci IDE.

Ahoj světe příklad

Tradiční program Hello world lze v Javě napsat jako:

public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

Všechny zdrojové soubory musí být pojmenovány podle veřejné třídy, kterou obsahují, .javanapříklad s příponou HelloWorldApp.java. Nejprve musí být zkompilován do bytecode pomocí kompilátoru Java , který vytvoří soubor s .classpříponou ( HelloWorldApp.classv tomto případě). Teprve poté může být spuštěn nebo spuštěn. Zdrojový soubor Java může obsahovat pouze jednu veřejnou třídu, ale může obsahovat více tříd s neveřejným modifikátorem přístupu a libovolný počet veřejných vnitřních tříd . Pokud zdrojový soubor obsahuje více tříd, je nutné jednu třídu (zavedenou classklíčovým slovem) nastavit jako veřejnou (před ní publicklíčové slovo) a pojmenovat zdrojový soubor tímto veřejným názvem třídy.

Třída, která není deklarována jako veřejná, může být uložena v jakémkoli .javasouboru. Kompilátor vygeneruje soubor třídy pro každou třídu definovanou ve zdrojovém souboru. Název souboru třídy je název třídy s připojeným .class . Při generování souborů třídy se s anonymními třídami zachází, jako by jejich jméno bylo zřetězením názvu jejich uzavírající třídy, $ a celého čísla.

Mezi klíčové slovo public označuje, že způsob může být volána z kódu do jiných tříd, nebo, že třída mohou být použity podle tříd mimo hierarchii tříd. Hierarchie tříd souvisí s názvem adresáře, ve kterém je umístěn soubor .java. Toto se nazývá modifikátor úrovně přístupu. Mezi další modifikátory úrovně přístupu patří klíčová slova private(metoda, ke které lze přistupovat pouze ve stejné třídě) a protected(která umožňuje přístup kódu ze stejného balíčku). Pokud se část kódu pokusí o přístup k soukromým metodám nebo chráněným metodám, JVM vyvolá aSecurityException

Klíčové slovo staticpřed metodou označuje statickou metodu , která je přidružena pouze ke třídě a ne k žádné konkrétní instanci této třídy. Bez odkazu na objekt lze vyvolat pouze statické metody. Statické metody nemají přístup ke všem členům třídy, kteří nejsou také statičtí. Metody, které nejsou označeny jako statické, jsou instančními metodami a k ​​provozu vyžadují konkrétní instanci třídy.

Klíčové slovo voidoznačuje, že hlavní metoda nevrací volajícímu žádnou hodnotu. Pokud má program Java skončit s kódem chyby, musí volat System.exit()explicitně.

Název metody mainnení klíčovým slovem v jazyce Java. Je to prostě název metody, kterou zavaděč Java volá, aby předal řízení programu. Třídy Java, které běží ve spravovaných prostředích, jako jsou aplety a Enterprise JavaBeans , nepoužívají ani nepotřebují main()metodu. Program Java může obsahovat více tříd, které mají mainmetody, což znamená, že virtuálnímu počítači musí být výslovně řečeno, ze které třídy má spustit.

Hlavní metodou je nutné přijmout řadu z Stringobjektů. Podle konvence se na něj odkazuje, argsi když lze použít jakýkoli jiný název zákonného identifikátoru. Od Javy 5 může hlavní metoda také používat proměnné argumenty ve formě public static void main(String... args), což umožňuje vyvolání hlavní metody s libovolným počtem Stringargumentů. Účinek této alternativní deklarace je sémanticky shodný (s argsparametrem, který je stále polem Stringobjektů), ale umožňuje alternativní syntaxi pro vytváření a předávání pole.

Spouštěč Java spouští Javu načtením dané třídy (zadané na příkazovém řádku nebo jako atribut v JAR ) a spuštěním její public static void main(String[])metody. Samostatné programy musí tuto metodu explicitně deklarovat. String[] argsParametr je pole Stringobjektů, které obsahují všechny argumenty předané do třídy. Parametry, které mají mainbýt často předávány pomocí příkazového řádku .

Tisk je součástí standardní knihovny Java: SystemTřída definuje veřejné statické pole s názvem out. outObjekt je instancí PrintStreamtřídy a poskytuje mnoho metod pro tisk dat na standardní výstup , včetně println(String)který rovněž připojí nový řádek do prošel řetězec .

Řetězec "Hello World!"je automaticky převeden na objekt String kompilátorem.

Příklad s metodami

// This is an example of a single line comment using two slashes

/*
 * This is an example of a multiple line comment using the slash and asterisk.
 * This type of comment can be used to hold a lot of information or deactivate
 * code, but it is very important to remember to close the comment.
 */

package fibsandlies;

import java.util.Map;
import java.util.HashMap;

/**
 * This is an example of a Javadoc comment; Javadoc can compile documentation
 * from this text. Javadoc comments must immediately precede the class, method,
 * or field being documented.
 * @author Wikipedia Volunteers
 */
public class FibCalculator extends Fibonacci implements Calculator {
    private static Map<Integer, Integer> memoized = new HashMap<>();

    /*
     * The main method written as follows is used by the JVM as a starting point
     * for the program.
     */
    public static void main(String[] args) {
        memoized.put(1, 1);
        memoized.put(2, 1);
        System.out.println(fibonacci(12)); // Get the 12th Fibonacci number and print to console
    }

    /**
     * An example of a method written in Java, wrapped in a class.
     * Given a non-negative number FIBINDEX, returns
     * the Nth Fibonacci number, where N equals FIBINDEX.
     * 
     * @param fibIndex The index of the Fibonacci number
     * @return the Fibonacci number
     */
    public static int fibonacci(int fibIndex) {
        if (memoized.containsKey(fibIndex)) return memoized.get(fibIndex);
        else {
            int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
            memoized.put(fibIndex, answer);
            return answer;
        }
    }
}

Speciální třídy

Applet

Aplety Java byly programy, které byly vloženy do jiných aplikací, obvykle na webovou stránku zobrazenou ve webovém prohlížeči. Rozhraní API apletu Java je od verze Java 9 v roce 2017 již zastaralé.

Servlet

Technologie servletů Java poskytuje webovým vývojářům jednoduchý a konzistentní mechanismus pro rozšiřování funkcí webového serveru a pro přístup ke stávajícím podnikovým systémům. Servlety jsou komponenty Java EE na straně serveru, které generují odpovědi na požadavky od klientů . Většinou to znamená generování stránek HTML v reakci na požadavky HTTP , ačkoli je k dispozici řada dalších standardních tříd servletů, například pro komunikaci WebSocket .

Rozhraní API servletu Java bylo do určité míry nahrazeno (ale stále používáno pod pokličkou) dvěma standardními technologiemi Java pro webové služby:

Typické implementace těchto API na aplikačních serverech nebo servletových kontejnerech používají standardní servlet pro zpracování všech interakcí s požadavky a odpověďmi HTTP, které delegují metody webové služby pro skutečnou obchodní logiku.

Stránky JavaServer

JavaServer Pages (JSP) jsou komponenty Java EE na straně serveru, které generují odpovědi, obvykle stránky HTML , na požadavky HTTP od klientů . JSP vkládají kód Java do stránky HTML pomocí speciálních oddělovačů <% a %>. Při prvním přístupu je JSP kompilován do servletu Java , což je samostatná aplikace Java. Poté generovaný servlet vytvoří odpověď.

Aplikace Swing

Swing je grafická knihovna uživatelského rozhraní pro platformu Java SE. Prostřednictvím zásuvného systému Swing je možné určit jiný vzhled a dojem . Klony Windows , GTK+ a Motif dodává Sun. Apple také poskytuje vzhled a dojem Aqua pro macOS . Tam, kde předchozí implementace těchto vzhledů mohla být považována za chybějící, řeší Swing v jazyce Java SE 6 tento problém pomocí více nativních rutin kreslení widgetů GUI na podkladových platformách.

Aplikace JavaFX

JavaFX je softwarová platforma pro vytváření a poskytování desktopových aplikací a také bohatých webových aplikací, které lze provozovat na celé řadě zařízení. JavaFX má nahradit Swing jako standardní GUI knihovnu pro Java SE , ale protože JDK 11 JavaFX nebyl v jádru JDK a místo toho v samostatném modulu. JavaFX podporuje stolní počítače a webové prohlížeče v systémech Microsoft Windows , Linux a macOS . JavaFX nepodporuje vzhled a chování nativního OS.

Generika

V roce 2004 byla do jazyka Java přidána generika jako součást J2SE 5.0. Před zavedením generik musela být každá deklarace proměnné určitého typu. U tříd kontejnerů je to například problém, protože neexistuje snadný způsob, jak vytvořit kontejner, který přijímá pouze konkrétní typy objektů. Buď kontejner funguje na všech podtypech třídy nebo rozhraní, obvykle Object, nebo musí být pro každou obsaženou třídu vytvořena jiná třída kontejneru. Generika umožňují kontrolu typu při kompilaci, aniž byste museli vytvářet mnoho tříd kontejnerů, z nichž každá obsahuje téměř identický kód. Kromě povolení efektivnějšího kódu je zabráněno vzniku určitých výjimek za běhu vydáním chyb při kompilaci. Pokud by Java zabránila ClassCastExceptionvýskytu všech chyb typu runtime , bylo by to bezpečné .

V roce 2016 se typový systém Javy ukázal jako nevyhovující .

Kritika

Kritiky namířené proti Javě zahrnují implementaci generik, rychlost, zpracování nepodepsaných čísel, implementaci aritmetiky s pohyblivou řádovou čárkou a historii bezpečnostních chyb v primární implementaci HotSpot Java VM .

Knihovny tříd

Class Library Java je standardní knihovna , vyvinutý pro podporu vývoje aplikací v Javě. Je řízen společností Oracle ve spolupráci s ostatními prostřednictvím programu Java Community Process . Společnosti nebo jednotlivci účastnící se tohoto procesu mohou ovlivnit návrh a vývoj API. Tento proces byl během 2010s předmětem kontroverzí. Knihovna tříd obsahuje funkce jako:

Dokumentace

Javadoc je komplexní dokumentační systém vytvořený společností Sun Microsystems . Poskytuje vývojářům organizovaný systém pro dokumentaci jejich kódu. Komentáře Javadoc mají na začátku další hvězdičku, tj. Oddělovače jsou /**a */, zatímco normální víceřádkové komentáře v Javě jsou nastaveny na oddělovače /*a */, a jednořádkové komentáře začínají na řádku //.

Implementace

Oracle Corporation je současným vlastníkem oficiální implementace platformy Java SE po akvizici společnosti Sun Microsystems 27. ledna 2010. Tato implementace vychází z původní implementace jazyka Java společností Sun. Implementace Oracle je k dispozici pro Microsoft Windows (stále funguje pro XP, zatímco oficiálně jsou podporovány pouze novější verze), macOS , Linux a Solaris . Protože Java postrádá jakoukoli formální standardizaci uznávanou Ecma International , ISO/IEC, ANSI nebo jinými normalizačními organizacemi třetích stran, je implementace Oracle de facto standardem .

Implementace Oracle je zabalena do dvou různých distribucí: Java Runtime Environment (JRE), který obsahuje části platformy Java SE potřebné ke spouštění programů Java a je určen pro koncové uživatele, a Java Development Kit (JDK), který je určen pro vývojáře softwaru a obsahuje vývojové nástroje, jako je kompilátor Java , Javadoc , Jar a debugger . Oracle také vydal GraalVM , vysoce výkonný dynamický kompilátor a interpret Java.

OpenJDK je další pozoruhodná implementace Java SE, která je licencována pod GNU GPL. Implementace začala, když Sun začal uvolňovat zdrojový kód Java pod GPL. Od verze Java SE 7 je OpenJDK oficiální referenční implementací jazyka Java.

Cílem Javy je zajistit kompatibilitu všech implementací Javy. Historicky licence ochranných známek společnosti Sun na používání značky Java trvá na tom, aby byly všechny implementace kompatibilní . To vyústilo v soudní spor se společností Microsoft poté, co Sun tvrdil, že implementace Microsoftu nepodporovala RMI ani JNI a že přidala vlastní funkce specifické pro platformu. Sun zažaloval v roce 1997 a v roce 2001 vyhrál urovnání ve výši 20 milionů USD a také soudní příkaz prosazující podmínky licence od společnosti Sun. V důsledku toho společnost Microsoft již nedodává Javu s Windows .

Java nezávislá na platformě je pro Java EE zásadní a pro certifikaci implementace je zapotřebí ještě přísnější validace. Toto prostředí umožňuje přenosné aplikace na straně serveru.

Používejte mimo platformu Java

Aby mohl být kompilovaný program spuštěn, vyžaduje programovací jazyk Java přítomnost softwarové platformy.

Oracle dodává platformu Java pro použití s ​​Javou. Android SDK je alternativní softwarová platforma, který se používá především pro vývoj aplikací pro Android s vlastním GUI systému.

Android

Jazyk Java je klíčovým pilířem Androidu , open source mobilního operačního systému . Přestože je Android postavený na jádře Linuxu napsán převážně v jazyce C, Android SDK používá jazyk Java jako základ pro aplikace pro Android, ale nepoužívá žádné ze svých standardních GUI, SE, ME ani jiných zavedených standardů Java. Jazyk bytecode podporovaný sadou Android SDK není kompatibilní s bytecode Java a běží na vlastním virtuálním počítači, optimalizovaném pro zařízení s malou pamětí, jako jsou chytré telefony a tablety . V závislosti na verzi systému Android je bytecode interpretován virtuálním počítačem Dalvik nebo kompilován do nativního kódu pomocí Android Runtime .

Android neposkytuje úplnou standardní knihovnu Java SE, ačkoli sada Android SDK obsahuje nezávislou implementaci její velké podmnožiny. Podporuje Java 6 a některé funkce Java 7 a nabízí implementaci kompatibilní se standardní knihovnou ( Apache Harmony ).

Kontroverze

Použití technologie související s jazykem Java v systému Android vedlo k soudnímu sporu mezi společnostmi Oracle a Google. Dne 7. května 2012 porota v San Francisku zjistila, že pokud by API mohla být chráněna autorskými právy, pak Google porušil autorská práva společnosti Oracle používáním Javy v zařízeních Android. Okresní soudce William Alsup dne 31. května 2012 rozhodl, že API nelze chránit autorskými právy, ale to bylo zrušeno odvolacím soudem USA pro federální obvod v květnu 2014. 26. května 2016 okresní soud rozhodl ve prospěch společnosti Google , rozhodnutí o porušení autorských práv rozhraní Java API v systému Android představuje spravedlivé použití. V březnu 2018 toto rozhodnutí zrušil odvolací soud, který případ určení náhrady škody poslal federálnímu soudu v San Francisku. Společnost Google podala v lednu 2019 u Nejvyššího soudu Spojených států žádost o vydání certiorari, aby zpochybnila dvě rozhodnutí, která odvolací soud učinil ve prospěch společnosti Oracle. Dne 5. dubna 2021 rozhodl Soud ve prospěch společnosti 6-2 ve prospěch společnosti Google, že její používání rozhraní Java API by mělo být považováno za spravedlivé použití . Soud však odmítl rozhodnout o autorských právech API a rozhodl se místo toho určit jejich rozhodnutí zvážením autorského práva API Java „čistě kvůli argumentu“.

Viz také

Porovnání Javy s jinými jazyky

Reference

Citované práce

externí odkazy

  • Slovníková definice Javy na Wikislovníku
  • Média související s Javou na Wikimedia Commons
  • Programování Java na Wikibooks
  • Učební materiály týkající se Javy na Wikiversity