programovací jazyk From Wikipedia, the free encyclopedia
Java (výslovnost [ˈdʒaːvə]IPA) je objektově orientovaný programovací jazyk, který vyvinula firma Sun Microsystems a představila 23. května 1995.
Duke, maskot Javy | |
Paradigma | objektově orientovaný, multiparadigmatický, strukturovaný, imperativní, reflexivní |
---|---|
Vznik | 1995 |
Autor | James Gosling, Sun Microsystems, Oracle Corporation |
Vývojář | Oracle Corporation |
Poslední verze | 19 (20. září 2022[1][2][3][4]) |
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/ |
Jde o jeden z nejpoužívanějších programovacích jazyků na světě. Podle TIOBE indexu byla Java nejpopulárnější programovací jazyk.[5] V roce 2020 jazyk Java v žebříčku TIOBE index předběhly jazyky C a Python.[6] 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.
Při vývoji jazyka Java se vývojáři drželi pěti hlavních principů:[7]
goto
nebo preprocesor.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.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.strictfp
. Velikost platformy Java se v této verzi ztrojnásobila na 1 520 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ě psaní v japonštině, čínštině a korejském jazyce, lepší výkon JIT-kompilátoru.[11]Společnost Oracle je současným vlastníkem oficiální implementace Java SE platformy, po její akvizici firmy Sun Microsystems 27. ledna 2010. Tato implementace je založena na původní od Sunu. Je dostupná pro macOS, 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.[14] V důsledku toho Microsoft nadále neprodává žádné svoje Windows s Javou (Windows XP SP2, Windows Server 2003 a novější).[15]
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řístupnou pro garbage collector, který ji automaticky uvolní. Něco podobného úniku paměti přesto 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 dojít 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 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.
// 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.
*/
Tradiční program „Hello world“ vypadá takto:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Výpočet mediánu:
public class SortLinefOfTextFile {
void sortAtextFile(String fileName, String toFileame){
}
public static void main(String[] args){
File file = new File("C:\\"); //načtení souboru
Scanner sc = null; //scanner =třída, která umí načítat vstupy, sc = null definice vstupu, která nemá žádnou hodnotu null= rovná se ničemu nulová
try {
sc = new Scanner(file); //načte soubor "file" který má v sobě data(čísla)
}
catch (FileNotFoundException e) //osetreni načteni souboru
{
System.out.println("Soubor nebyl nalezen.");
return; //když vyskočí chyba "soubor nebyl nalezen tak se znovu program opakuje
}
ArrayList<Float> list = new ArrayList<Float>(); //float = desetinné číslo(může být i double liší se velikostí),vytvoreni seznamu
while (sc.hasNextFloat()) //zapsani čisel do seznamu
list.add(sc.nextFloat()); //přidá další hodnotu (číslo)
int size = list.size(); //načtení velikosti pole
if (size == 0) { //osetreni prazdneho souboru
System.out.println("Prázdný soubor"); //vypíše
return; //program se opakuje
}
Collections.sort(list); //seřazeni seznamu
for (int i = 0; i < size; i++) { //vypsání čísel
System.out.print(list.get(i) + " ");
}
System.out.println(); //prázdný řádek
//median
float median; //typ proměnné
if (size % 2 == 0) {
float x1 = list.get(size / 2 - 1);
float x2 = list.get(size / 2);
median = (x1 + x2) / 2;
} else {
median = list.get(size / 2);
}
System.out.println("Median=" + median);
}
}
Řazení slov menších jak 5 ze souboru
public class Priklad_1 { //třída
public static void main(String[] args) { //deklarace typu proměnné string = deklarace slov
File soubor = splitFiles("C:\\", "C:\\"); //načteni vstupniho a vystupniho souboru
}
public static File splitFiles(String input, String output) { //metody, sting = typ promenné, split = rozdělení souborů
try (BufferedReader br = new BufferedReader(new FileReader(input))) { //načteni souboru
String line; // definice proměnné line
ArrayList<String> results = new ArrayList<>(); //vytvoření seznamu
while ((line = br.readLine()) != null) { //čteni radku
String[] parts = line.split(" "); //rozděleni slov po "mezeře"
for (String part : parts) { //nahrazeni znaků
part = part.replace("*", ""); //nahrazení hvězdičky mezerou atd...
if (part.length() > 5) { //vybrani slov větších jak 5 znaků
results.add(part); //tak se to vypíše do toho dalšího souboru
}
}
}
Collections.sort(results); //serazeni vysledku podle abecedy může se to použít i pro čísla
try (BufferedWriter bwr = new BufferedWriter(new FileWriter(output))) { //zapsani vysledku do souboru
for (String result : results) {
bwr.write(result);//zapsání nového slova
bwr.newLine(); //vytvoření nové řádky
}
}
} catch (Exception e) { //pro zachycení chyby aby program nespadl.
System.err.println("Chyba při četení ze souboru."); //osetreni vstupu souboru
}
return new File(output); //musí být je to návrácení do metody main
}
Pohyb auta po stisknuti klávesy
public class Car2 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//vytvoreni obrázku
Pane pane = new Pane(); //kontejner, ve kterém se vytváří obrázek
Image carImage = new Image(new FileInputStream("E:\\auto.jpg"));
//načteni obrazku z disku
ImageView cImage = new ImageView(carImage); //zobrazení obrázku
cImage.setFitWidth(120); //nastaveni velikosti obrázku, šířka obrázku
cImage.setFitHeight(80); //výška obrázku
pane.getChildren().addAll(cImage); //
Scene scene = new Scene(pane, 800, 500); //nastaveni velikost okna
scene.setOnKeyPressed(new EventHandler<KeyEvent>() { //příkaz pro stlačení tlačítka
@Override
public void handle(KeyEvent e) { //nadefinované
//Automaticke posouvani s přerušenim po stlačení mezerniku
/*if (e.getCode() == KeyCode.RIGHT) {
int times = 1;
while (times < 10) {
cImage.setLayoutX(cImage.getLayoutX() + 10);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
if (e.getCode() == KeyCode.SPACE) {
break; //po stihnutí mezerníku se obrázek zastaví
}
times++;
}
}*/
if (e.getCode() == KeyCode.RIGHT) { //posunuti doprava
cImage.setLayoutX(cImage.getLayoutX() + 10); //x= souřadnice posunutí o 10px
}
if (e.getCode() == KeyCode.LEFT) { //posunuti doleva
cImage.setLayoutX(cImage.getLayoutX() - 10);
}
if (e.getCode() == KeyCode.UP) { //posunuti nahoru
cImage.setLayoutY(cImage.getLayoutY() - 10);
}
if (e.getCode() == KeyCode.DOWN) { //posunuti dolu
cImage.setLayoutY(cImage.getLayoutY() + 10);
}
}
});
//zobrazeni
primaryStage.setTitle("Car");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
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());
}
}
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í knihovní 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.[16] 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.[17]
Spor dále pokračuje.
Seznam vybraných IDE pro vývoj v jazyce Java (řazeno abecedně):
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.