Java (programovací jazyk)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Java
Logo
Paradigma: objektově orientovaný, multiparadigmatický, strukturovaný, imperativní, reflexivní
Vznikl v: 1995
Autor: James Gosling, Sun Microsystems
Vývojář: Oracle Corporation
Poslední verze: 8 / 19.3.2014[1]
Typová kontrola: silná, statická, bezpečná
Hlavní implementace: OpenJDK
Ovlivněn jazyky: C, C++, C#, Smalltalk
Ovlivnil jazyky: JavaScript, Groovy, Clojure, C#, Scala
OS: multiplatformní
Licence: GNU General Public License, Java Community Process
Web: oracle.com/technetwork/java/
Duke – maskot jazyka Java

Java je objektově orientovaný programovací jazyk, který vyvinula firma Sun Microsystems a představila 23. května 1995.

Jde o jeden z nejpoužívanějších programovacích jazyků na světě. Podle Tiobe indexu je Java druhý nejpopulárnější programovací jazyk.[2] Díky své přenositelnosti je používán pro programy, které mají pracovat na různých systémech počínaje čipovými kartami (platforma JavaCard), přes mobilní telefony a různá zabudovaná zařízení (platforma Java ME), aplikace pro desktopové počítače (platforma Java SE) až po rozsáhlé distribuované systémy pracující na řadě spolupracujících počítačů rozprostřené po celém světě (platforma Java EE). Tyto technologie se jako celek nazývají platforma Java. Dne 8. května 2007 Sun uvolnil zdrojové kódy Javy (cca 2,5 miliónů řádků kódu) a Java bude dále vyvíjena jako open source.

Zásady[editovat | editovat zdroj]

Při vývoji jazyku Java vývojáři se drželi pěti hlavních principů:[3]

  1. Mělo by to být „jednoduché, objektově orientované a povědomé“
  2. Mělo by to být „robustní a bezpečné“
  3. Mělo by to být „nezávislé na architektuře a přenositelné“
  4. Mělo by to být „výkonné“
  5. Mělo by to být „interpretované, vícevláknové a dynamické“

Základní vlastnosti[editovat | editovat zdroj]

  • jednoduchý – jeho syntaxe je zjednodušenou (a drobně upravenou) verzí syntaxe jazyka C a C++. Odpadla většina nízkoúrovňových konstrukcí. Součástí jazyka nejsou například ukazatelé, bezznaménkové číselné datové typy, příkaz goto nebo preprocesor.
  • objektově orientovaný – s výjimkou osmi primitivních datových typů jsou všechny ostatní datové typy objektové.
  • distribuovaný – je navržen pro podporu aplikací v síti (podporuje různé úrovně síťového spojení, práce se vzdálenými soubory, umožňuje vytvářet distribuované klientské aplikace a servery.
  • interpretovaný – místo skutečného strojového kódu se vytváří pouze tzv. mezikód (bajtkód). Tento formát je nezávislý na architektuře počítače nebo zařízení. Program pak může pracovat na libovolném počítači nebo zařízení, který má k dispozici interpret Javy, tzv. virtuální stroj Javy - Java Virtual Machine (JVM).
V pozdějších verzích Javy nebyl mezikód přímo interpretován, ale před prvním svým provedením dynamicky zkompilován do strojového kódu daného počítače (tzv. just in time compilation - JIT). Tato vlastnost zásadním způsobem zrychlila provádění programů v Javě ale výrazně zpomalila start programů.
V současnosti se převážně používají technologie zvané HotSpot compiler, které mezikód zpočátku interpretují a na základě statistik získaných z této interpretace později provedou překlad často používaných částí do strojového kódu včetně dalších dynamických optimalizací (jako je např. inlining krátkých metod atp.).
Některé platformy nabízejí přímou hardwarovou podporu pro Javu. Existují též mikroprocesory, které dokáží spustit Javu hardwarově namísto softwarové emulace Java Virtual Machine. ARM procesory mohou mít přímou hardwarovou podporu pro spuštění binárního kódu Javy.
  • robustní – je určen pro psaní vysoce spolehlivého softwaru – z tohoto důvodu neumožňuje některé programátorské konstrukce, které bývají častou příčinou chyb (např. správa paměti, příkaz goto, používání ukazatelů). Používá tzv. silnou typovou kontrolu – veškeré používané proměnné musí mít definovaný svůj datový typ.
  • generační správa paměti – správa paměti je realizována pomocí automatického garbage collectoru, který automaticky vyhledává již nepoužívané části paměti a uvolňuje je pro další použití. To bylo v prvních verzích opět příčinou pomalejšího běhu programů. V posledních verzích běhových prostředí je díky novým algoritmům pro garbage collection a tzv. generační správě paměti (paměť je rozdělena na více částí, v každé se používá jiný algoritmus pro garbage collection a objekty jsou mezi těmito částmi přesunovány podle délky svého života) tento problém ze značné části eliminován.
  • bezpečný – má vlastnosti, které chrání počítač v síťovém prostředí, na kterém je program zpracováván, před nebezpečnými operacemi nebo napadením vlastního operačního systému nepřátelským kódem.
  • nezávislý na architektuře – vytvořená aplikace běží na libovolném operačním systému nebo libovolné architektuře. Ke spuštění programu je potřeba pouze to, aby byl na dané platformě instalován správný virtuální stroj. Podle konkrétní platformy se může přizpůsobit vzhled a chování aplikace.
  • přenositelný – vedle zmíněné nezávislosti na architektuře je jazyk nezávislý i co se týká vlastností základních datových typů (je například explicitně určena vlastnost a velikost každého z primitivních datových typů). Přenositelností se však myslí pouze přenášení v rámci jedné platformy Javy (např. J2SE). Při přenášení mezi platformami Javy je třeba dát pozor na to, že platforma určená pro jednodušší zařízení nemusí podporovat všechny funkce dostupné na platformě pro složitější zařízení a kromě toho může definovat některé vlastní třídy doplňující nějakou speciální funkčnost nebo nahrazující třídy vyšší platformy, které jsou pro nižší platformu příliš komplikované.
  • výkonný – přestože se jedná o jazyk interpretovaný, není ztráta výkonu významná, neboť překladače mohou pracovat v režimu „just-in-time“ a do strojového kódu se překládá jen ten kód, který je opravdu zapotřebí.
  • víceúlohový – podporuje zpracování vícevláknových aplikací
  • dynamický – Java byla navržena pro nasazení ve vyvíjejícím se prostředí. Knihovna může být dynamicky za chodu rozšiřována o nové třídy a funkce, a to jak z externích zdrojů, tak vlastním programem.
  • elegantní – velice pěkně se v něm pracuje, je snadno čitelný (např. i pro publikaci algoritmů), přímo vyžaduje ošetření výjimek a typovou kontrolu.

Historie[editovat | editovat zdroj]

James Gosling, hlavní tvůrce
  • 1991James Gosling, Bill Joy, Mike Sheradin a Patrick Naughton započali Stealth Project (Tajný projekt), který měl za cíl vytvořit systém pro domácí spotřebiče. Projekt se později přejmenoval na Green Project (Zelený projekt), a tým vývojářů dostal název Green Team (Zelený tým). Vedoucím projektu se stal James Gosling.
Green Team zpočátku používal programovací jazyk C++, který ovšem pro jejich cíl nebyl vhodný. Nakonec James Gosling začal pracovat na novém jazyku, který pojmenoval Oak (dub) podle stromu, jež rostl před okny jeho kanceláře.[4][5]
  • 1995 – Přejmenování jazyka z Oak na Java. Jazyk s názvem Oak totiž již existoval. Java je americké slangové označení pro kávu.[5]
První oficiální verze vyšla 26. srpna 1996.
V prvních verzích Javy a JDK bylo možné použít klíčová slova private a protected k vytvoření dalšího modifikátoru přístupu, a sice k omezení přístupu k metodám a proměnným výhradně na podtřídy dané třídy. Tato funkčnost byla z jazyka odebrána ve verzi 1.0.2.
  • 1997 – JDK 1.1
Další významná verze JDK vyšla 19. února 1997. Do jazyka byla přidána podpora vnořených tříd, reflexe (bez podpory modifikace za běhu) a Unicode verze 2.0. JDK obsahovalo následující novinky: JavaBeans, JDBC, Java RMI, rozšíření AWT a JIT kompilátor pro Microsoft Windows.[6]
Verze s kódových označením Playground byla vydána 8. prosince 1998. Pojmenování se změnilo na Java 2 a název verze J2SE. Část SE z názvu J2SE (Java 2 Platform, Standard Edition) slouží k rozlišení základní platformy od J2EE (Java 2 Platform, Enterprise Edition) a J2ME (Java 2 Platform, Micro Edition).
Do jazyka přibylo klíčové slovo strictfp. Velikost platformy Java se v této verzi ztrojnásobila na 1520 tříd v 59 balíčcích. Nejvýznamnější změny: knihovna Swing pro sestavení grafického rozhraní, Java 2D API, Java collections framework (JSR 166), Accessibility API, JDBC 2.0, Java Plug-in, Java IDL - pro podporu technologie CORBA, absolutní podpora Unicode včetně psání v japonštině, čínštině a korejském jazyce, lepší výkon JIT-kompilátoru.[7]
  • 2000 – J2SE 1.3
Verze s kódových označením Kestrel byla vydána 8. května 2000. Do jazyka byly přidány syntetické proxy třídy. Další změny: přidání JavaSound, Java Naming and Directory Interface (JNDI) - dříve dostupné jako rozšíření, Java Platform Debugger Architecture (JPDA), modifikace Java RMI pro podporu technologie CORBA a přidání HotSpot JVM.[8]
  • 2002 – J2SE 1.4
  • 2004 – J2SE 5.0
Specifikovaná verze Java 5.0 vyšla v září roku 2004. Od té doby byla změněna oficiální indexace Javy. Java 1.5 se správně jmenuje Java 5.0. Vnitřní indexace přesto zůstala stejná, tj. 1.x. Daná verze obsahuje celou řadu změn: přidané výčtové typy, anotace, generics, autoboxing/anboxing, cyklus foreach (interátor), Javadoc komentáře, povolen import statických polí a metod, přidané metody s neurčitým počtem parametrů a další.
Výčtové typy (angl. enum) jsou plnohodnotnou třídou, což znamená že mohou mít pole a metody, a to dokonce skryté i abstraktní.
Anotace umožňují přidávat do kódu neovlivňující programová data, která například popisují nějakou část kódu a jeho účel.
  • 2006 – Java SE 6
Java 6 byla zveřejněna 11. prosince 2006. Oficiální indexace se změnila, místo očekávané verze 6.0 byla Java 6 představena pod tímto názvem. Menší změny (stejně jako v Java 5.0) se přidali pomocí aktualizací.
  • 2011 – Java SE 7
Java 7 byla zveřejněna 28. července roku 2011. Finální verze Java Standard Edition 7 neobsahuje všechny naplánované změny, ty se objeví v Java Standard Edition 8.
  • 2014 – Java SE 8

Implementace[editovat | editovat zdroj]

Společnost Oracle je současným vlastníkem oficiální implementace Java SE platformy, po její akvizici firmou Sun Microsystems 27. ledna 2010. Tato implementace je založena na původní od Sunu. Je dostupná pro Mac OS X, Windows a Solaris. Vzhledem k tomu, že Java postrádá jakékoliv formální standardizace uznané Ecma International, ISO/IEC, ANSI, nebo jinými standardizačními organizacemi třetích stran, implementace Oraclu je de facto standard.

Implementace Oraclu je rozdělena do dvou různých distribucí: Java Runtime Environment (JRE), která obsahuje části Java SE platformy potřebné pro běh programů v jazyce Java a je určena pro koncové uživatele. Druhým balíkem je Java Development Kit (JDK), který je určen pro softwarové vývojáře a obsahuje vývojové nástroje jako je Java kompilátor, Javadoc, Jar a debugger.

OpenJDK je další významnou implementací Javy SE pod licencí GPL. Ta začala, když Sun začal vydávat zdrojový kód Javy pod licencí GPL. Od Javy verze SE 7 je tedy OpenJDK oficiální referenční implementací Javy.

Cílem Javy je, aby byly všechny její implementace kompatibilní. To vyústilo v právní spor se společností Microsoft poté, co Sun prohlásil, že implementace Microsoftu (Microsoft Java Virtual Machine) nepodporují RMI nebo JNI, a že si Microsoft přidal funkce specifické pro jejich vlastní platformu. Sun podal žalobu v roce 1997 a v roce 2001 získal vyrovnání v hodnotě 20 miliónů dolarů, stejně jako nařízení soudu přikazující Microsoftu dodržování licenčních podmínek Sunu.[9] V důsledku toho Microsoft nadále neprodává žádné svoje Windows s Javou (Windows XP SP2, Windows Server 2003 a novější).[10]

Automatická správa paměti[editovat | editovat zdroj]

Java používá automatickou správu paměti pro řízení paměti v object lifecycle. Programátor určuje kdy bude objekt vytvořen a Java runtime zodpovídá za obnovu paměti jakmile se objekty přestanou používat. Když nezůstanou žádné odkazy na objekt, nepřístupná paměť se stává přistupnou pro garbage collector, který ji automaticky uvolní. Něco podobné úniku paměti pořad může vzniknout, jestliže programátorův kód obsahuje referenci na objekt, který již není potřeba.

Jedním z účelů pro automatickou správu paměti Java bylo zbavit programátora nutnosti lámat si hlavu nad manuální správou paměti. V některých programovacích jazycích je paměť nutná pro vytvoření objektů implicitně přidělena do zásobníku, anebo explicitně přidělena a uvolněna. V takovém případě odpovědnost za správu paměti padá na programátora. Pokud program objekt neuvolní, může dojit k úniku paměti. Pokud se program pokusí uvolnit paměť která jíž byla uvolněna, výsledek není definován a je obtížné ho odhadnout, takže program se pravděpodobně stane nestabilní a/nebo spadne. To může být částečně odstraněno použitím chytrých ukazatelů, ale to také zvětšuje náročnost a složitost.

Syntaxe[editovat | editovat zdroj]

Syntaxe Javy je do značné míry odvozena z C++. Na rozdíl od C++, které kombinuje syntaxi pro strukturované, generické, a objektově-orientované programování, Java byla postavena téměř výhradně jako objektově orientovaný jazyk. Veškerý kód je napsán uvnitř třídy a všechno je objekt, s výjimkou primitivních datových typů (tj. celá čísla, desetinná čísla, logické hodnoty a znaky), které nejsou třídy z výkonnostních důvodů.

Na rozdíl od C++ Java nepodporuje přetěžování operátorů nebo vícenásobnou dědičnost pro třídy. To zjednodušuje jazyk a pomáhá při prevenci potenciálních chyb.

Java používá podobné komentovací metody jako C++. Existují tři různé styly komentářů: jednořádkový uvozený dvěma lomítky (//), víceřádkový uvozený /* a uzavřený s */ a Javadoc dokumentační styl komentování uvozený /** a uzavřený */. Komentář typu Javadoc umožňuje uživateli sestavit dokumentaci k programu.

Ukázka použití komentářů:

// Toto je příklad jednořádkového komentáře pomocí dvou lomítek
 
/* Toto je příklad víceřádkového komentáře pomocí lomítka a hvězdičky. Tento
 typ komentáře může obsahovat velké množství informací nebo může deaktivovat
 část kódu, ale je velice důležité komentář uzavřít. */
 
/**
 * Toto je komentář Javadoc; Javadoc slouží pro generování
 * dokumentace k programu.
 */

Ukázka kódu[editovat | editovat zdroj]

Tradiční program „Hello world“ vypadá takto:

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

Netradiční verze „Hello world“ s malou ukázkou objektového přístupu:

public class HelloWorld {
    public static void main(String[] args) {
        Pozdrav pozdrav = new Pozdrav("Ahoj světe!");
        pozdrav.print();
    }
}
 
class Pozdrav {
    private String text;
 
    public Pozdrav(String pozdrav) {
        text = pozdrav;
    }
 
    private String getText() {
        return text;
    }
 
    public void print() {
        System.out.println(getText());
    }
}

Použití jinými společnostmi[editovat | editovat zdroj]

Android (operační sytém) umožňuje rozsáhlé použití Javy

Google[editovat | editovat zdroj]

Společnosti Google a Android si zvolily použití Javy jako klíčový pilíř při tvorbě stejnojmenného open source mobilního operačního systému určeného pro chytré telefony a tablety. I přesto, že je Android postaven na Linuxovém jádře a byl napsán převážně v programovacím jazyce C, tak SDK Androidu používá jazyk Java jako základ pro svoje aplikace. Java je však používána pouze pro syntaxi, nikoliv pro svoji knihovnu tříd. Namísto vytváření instance třídy ze standardní Java Class Library Android poskytuje svoji vlastní kníhovní třídu. Aplikace pro Android jsou kompilovány přes bajtkód Javy jako mezistupeň do formátu Dalvik Executables (přípona .dex) spustitelného ve vlastní Dalvik Virtual Machine Androidu. Některé třídy v Dalvikově knihovně se podobají jejím protějškům v Jazyce Java. Rozdíly se staly hlavním bodem sporu mezi Sun/Oracle a Google/Android.

Dne 7. května 2012 soud v San Francisku shledal, že pokud by API bylo chráněno copyrightem pak by společnost Google porušila autorská práva společnosti Oracle použitím Javy v zařízeních s Androidem.[11] Oracle vznesl ve svém postoji otázky týkající se legálnosti používání Javy v Androidu. Nicméně, americký okresní soudce William Haskell Alsup rozhodl dne 31. května 2012, že API nemůže být chráněno autorskými právy. [12]

Spor dále pokračuje.

Vývojová prostředí[editovat | editovat zdroj]

Seznam vybraných IDE pro vývoj v jazyce Java (řazeno abecedně):

  • BlueJ – multiplatformní vývojové prostředí (volně šiřitelné)
  • Eclipse – multiplatformní vývojové prostředí pro programování v jazyzích Java, C++ a dalších (volně šiřitelné)
  • IntelliJ IDEA – vývojové prostředí pro programování v jazycích Java, Groovy a dalších (komerční)
  • JDeveloper – vývojové prostředí firmy Oracle (volně šiřitelné)

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. Oracle Technology Network > Java [online]. Oracle, [cit. 2014-03-19]. Dostupné online.  
  2. TIOBE Programming Community Index for May 2013 [online]. TIOBE Software BV, květen 2013, [cit. 2013-05-10]. Dostupné online.  
  3. 1.2 Design Goals of the Java™ Programming Language [online]. Oracle, 1999-01-01, [cit. 2013-01-14]. Dostupné online. (anglicky) 
  4. NOVOTNÝ, Luděk. Historie a vývoj jazyka Java [online]. 2003, [cit. 2013-08-21]. Dostupné online.  
  5. a b FALTÝNEK, Lukáš. Java – dnes při šálku dobré kávy [online]. linuxexpres.cz, 2007-04-26, [cit. 2013-08-21]. Dostupné online.  
  6. SUN SHIPS JDK 1.1 [online]. Sun Microsystems, Inc., 1997-02-19, [cit. 2014-07-13]. Dostupné online. (anglicky) 
  7. SUN DELIVERS NEXT VERSION OF THE JAVA PLATFORM [online]. Sun Microsystems, Inc., 1998-12-08, [cit. 2014-07-14]. Dostupné online. (anglicky) 
  8. SUN MICROSYSTEMS RELEASES FASTEST CLIENT-SIDE JAVA PLATFORM TO DATE [online]. Sun Microsystems, Inc., 2000-05-08, [cit. 2014-07-14]. Dostupné online. (anglicky) 
  9. Niccolai, James."Sun, Microsoft settle Java lawsuit", JavaWorld, IDG, January 23, 2001. Ověřeno k 2013-01-24. 
  10. MSJVM Transition FAQ
  11. MULLIN, Joe. Google guilty of infringement in Oracle trial; future legal headaches loom [online]. Ars Technica, [cit. 2012-05-08]. Dostupné online. (anglicky) 
  12. Joe Mullin. Google wins crucial API ruling, Oracle’s case decimated [online]. May 31, 2012, [cit. 2014-01-14]. Dostupné online. (anglicky) 

Literatura[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

Logo Wikimedia Commons
Wikimedia Commons nabízí obrázky, zvuky či videa k tématu

(anglicky)

(česky)