Java
Z CHWiki
Obsah |
[editovat] Historie
Historie programovacího jazyka Java se začala psát někdy na přelomu let 1990 a 1991. Vše začalo ve společnosti Sun Microsystems, kde vznikl projekt pod názvem Stealth Project (později označován jako Green Project). Cílem tohoto projektu bylo provést výzkum na poli malých zařízení pro spotřební elektroniku a vývoje aplikací pro tato zařízení (toustovače, televizní set-top boxi, video rekordéry, PDA, apod.). Vizí projektu bylo vytvořit systém, který by umožnil vytvářet rozsáhlé, distribuované, heterogenní síťe z takovýchto zařízení, a který by jim umožnil navzájem spolu komunikovat.
Tento projekt měl několik členů. Mezi ně patřili Bill Joy, James Gosling, Patrick Naughton a mnoho dalších. Každý z nich měl svoji roli a své úkoli. Úkolem Jamese Goslinga bylo najít/vytvořit vhodný programovací jazyk pro tento projekt. James začal u C++, ale brzy došel k závěru, že tento jazyk není pro projekt vhodný. Začal ho rozšiřovat a modifikovat, až postupně vznikl nový jazyk, kterému James v ranných fazích vývoje říkal Greentalk (zřejmě podle jazyka Smalltalk). Tento název však dlouho nevydržel. Několik let se tento nově vyvíjený jazyk jmenoval Oak - podle stromu (dubu), který stál před oknem jeho kanceláře. Později při hledání patentů zatěžujících název Oak bylo zjištěno, že tento název už nese jiný programovací jazyk. Bylo tedy zapotřebí název změnit. Vybrat vhodný a zajímavý název je obvykle ten nejtěžší úkol a dlouho na ním diskutoval i celý tým z Green Project. Padlo mnoho návrhů a nakonec se do finále dostali tři možné názvy: Java, DNA a Silk. Z nich byl vybrát název Java. Tento název byl údajně odvozen od kávy (Peet's Java), kterou pili v jedné z tamních kaváren. Proto taky u názvu Java často vídáme šálek kávy, ze které stoupá dým. Faktem však je, že ani samotní členové Green Project se zcela neshodují v tom, kdo a jak přišel na název Java.
Vzhledem k tomu, že tento jazyk byl původně určen pro vývoj aplikací pro trh se spotřební elektronikou, bylo na něj kladeno mnoho požadavků. Shrňme si ty nejdůležitější z nich v několika následujících bodech.
- Nezávislost na cílové platformě (platform independence)
- Spolehlivost (reliability)
- Bezpečnost (security)
[editovat] Druh jazyka
Java je objektově orientovaný programovací jazyk. To však neznamená, že v Javě je vše objektem. Dále je to silně typový jazyk. To znamená, že každá proměnná a každý výraz má svůj typ, který je znám už v době kompilace. Silná typovost usnadňuje detekci některých chyb už v době kompilace. Datové typy v Javě jsou dvojího druhu: primitivní a referenční.
Programy napsané v Javě jsou překládány pomocí kompilátoru do mezikódu, tzv. Java bajt kódu (byte code). Tento mezikód je následně interpretován (spouštěn) pomocí Java Virtual Machine (JVM). Tím je zajištěna jeho nezávislost na cílové platformě. Program stačí zkompilovat jednou a o jeho správné vykonání na různých platformách se postará implementace JVM pro danou platformu. K tomuto principu se vztahuje slogan "Write once, run everywhere." (Napiš jednou, spusť všude.), se kterým přišla společnost Sun Microsystems.
[editovat] Použití
Používá se na programování podnikových systémů, výukových programů atd. J2ME je velmi rozšířená platforma pro vývoj her na mobilní telefony. Pokud chcete dělat hry pro mobilní telefony, toto je Vaše volba. J2ME se také používá na Blu-ray discích.
[editovat] Programy v něm napsané
To, že i v Javě se dají programovat hry, dokazuje projekt Jake2, což je port Quake 2 do Javy. Zpomalení oproti nativní verzi je jen asi 15%.
[editovat] Přenositelnost
Jedním z cílů při tvorbě tohoto jazyka byla snadná přenositelnost. Tento cíl byl splněn a JVM nyní existuje pro mnoho platforem. Programy beze změny běží na všech podporovaných platformách.
[editovat] Co nabízí
[editovat] Knihovny
[editovat] Příklady
Hello World!
Zde máme klasický Hello World! (Ahoj světe!) příklad napsaný v Javě.
// HelloWorld.java
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Kompilace programu v příkazové řádce.
$ javac HelloWorld.java
Spuštění a výstup programu v příkazové řádce.
$ java HelloWorld Hello World!
Demonstrace předání argumentů metodě hodnotou
Tento příklad demonstruje, že v Javě jsou argumenty do metod předávány vždy hodnotou.
Nejdříve je nutné si říci, že proměnná primitivního datového typu v sobě uchovává přímo hodnotu toho typu a proměnná referenčního datového typu v sobě uchovává odkaz (ukazatel) na objekt.
V příkladu níže v metodě main() máme definovánu proměnnou x. Tato proměnná je primitivního datového typ int a inicializovali jsme ji na hodnotu 1. Poté poměnnou x předáme jako argument metodě priradNovouHodnotu(). Obsah proměnné x je do metody předán hodnotou. To znaméná, že hodnota 1 proměnné x je zkopírována do lokální proměnné a v metodě priradNovouHodnotu(). Pokusíme-li se tedy v této metodě přiřadit proměnné a novou hodnotu 666, toto přiřazení se nijak nepromítne na hodnotu proměnné x. To je vidět ve výstupu programu.
V další části metody main() jsme si definovali proměnnou b, která je referenčního datového typu Bod, a přiřadili jsme ji nový bod, který má souřadnice [1,1]. V proměnné b je tedy uložen odkaz (ukazatel, adresa) na objekt typu Bod. Nyní se proměnnou b pokusíme předat jako argument metodě priradNovyBod(). Obsah proměnné b je opět předán hodnotou. To znamená, že odkaz (adresa) v proměnné b je zkopírován do lokální proměnné a. Pokusíme-li se v metodě priradNovyBod() přiřadit proměnné a nový bod o souřadnicích [666,666], toto přiřazení se opět nijak nepromítne do proměnné b. To je vidět ve výstupu programu.
V poslední části metody main() opět využijeme naši proměnnou b, která stále odkazuje na bod o souřadnicích [1,1]. Nyní ji však předáme metodě priradNoveSouradniceBodu(). Jak už víme, obsah proměnné b je do metody předán hodnotou, odkaz na bod [1,1] je zkopírován do lokální proměnné a. Zde je důležité si uvědomit, že obě proměnné b i a tedy ukazují na stejný objekt, na stejný bod o souřadnicích [1,1]! Změníme-li tedy v metodě priradNoveSouradniceBodu() souřadnice bodu na [666,666], tato změna se nám promítne i na proměnnou b po ukončení provádění metody priradNoveSouradniceBodu()! To je vidět ve výstupu programu.
Ať už v Javě předáváme to metody argument libovolného typu, vždy jsou tyto argumenty předány hodnotou. U referečních typů je však touto předávanou hodnotou ukazatel (adresa) na objekt. Změníme-li tedy v metodě stav tohoto objektu, změna se nám promítne i mimo volání metody.
// TestPredaniHodnotou.java
public class TestPredaniHodnotou {
static void priradNovouHodnotu(int a) {
a = 666; // nastaveni nove hodnoty primitivnimu datovemu typu
}
static void priradNovyBod(Bod a) {
a = new Bod(666, 666); // vytvoreni a prirazeni noveho objektu
}
static void priradNoveSouradniceBodu(Bod a) {
a.x = 666; // prirazeni nove hodnoty clenske promenne objektu
a.y = 666;
}
public static void main(String[] args) {
// test predani hodnoty primitivniho datoveho typu
int x = 1;
System.out.println("volani metody priradNovouHodnotu()...");
System.out.println("pred: x=" + x);
priradNovouHodnotu(x);
System.out.println("po: x=" + x);
// test predani hodnoty referencniho datoveho typu
Bod b = new Bod(1, 1);
System.out.println("volani metody priradNovyBod()...");
System.out.println("pred: b.x=" + b.x + ", b.y=" + b.y);
priradNovyBod(b);
System.out.println("po: b.x=" + b.x + ", b.y=" + b.y);
// test predani hodnoty referencniho datoveho typu a zmeny odkazovaneho objektu
System.out.println("volani metody priradNoveSouradniceBodu()...");
System.out.println("pred: b.x=" + b.x + ", b.y=" + b.y);
priradNoveSouradniceBodu(b);
System.out.println("po: b.x=" + b.x + ", b.y=" + b.y);
}
}
// Trida reprezentujici bod.
class Bod {
int x;
int y;
Bod(int x, int y) {
this.x = x;
this.y = y;
}
}
Kompilace, spuštění a výstup programu.
$ javac TestPredaniHodnotou.java $ java TestPredaniHodnotou volani metody priradNovouHodnotu()... pred: x=1 po: x=1 volani metody priradNovyBod()... pred: b.x=1, b.y=1 po: b.x=1, b.y=1 volani metody priradNoveSouradniceBodu()... pred: b.x=1, b.y=1 po: b.x=666, b.y=666
ActionScript – BASIC – C – C++ – C# – Delphi – Java – JavaScript – Pascal - Python - PHP - Ruby - SmallTalk – Visual Basic
