Domů » Informatika » Programovací jazyk » Jazyk Java

Jazyk Java

Java je programovací jazyk, který byl už od počátku navržen jako přenositelný, objektově orientovaný, robustní, výkonný, interpretovaný a dynamický. V Javě lze jednoduše implementovat i paralelní výpočty s využitím vláken a monitorů. Vývoj Javy zahájil v roce 1991 James Gosling a původně byl jazyk určen pro set-top boxy.

Syntakticky je Java podobná jazyku C++, ale v mnoha rysech je mnohem jednodušší (má například automatickou správu paměti). Právě jednoduchost Javy možná stojí za její rostoucí oblibou ve školství. A co se člověk ve škole naučí, v praxi jako když najde.

Tipy a triky

Základní rysy jazyka

Java je jazyk interpretovaný – to znamená, že jsou programy předloženy virtuálnímu stroji – JVM (Java Virtual Machine) – který se postará o jejich konkrétní provedení na dané platformě. Program v Javě lze tedy spustit na jakémkoliv zařízení, pro které existuje implementace virtuálního stroje. Pro nejrozšířenější platformy, jako je Windows, Linux, Solaris a MacOS, jsou tyto virtuální stroje samozřejmostí.

Zdrojový kód každé třídy se nachází v souboru s příponou .java. Tyto soubory se nejprve zkompilují do tzv. bytekódu (instrukce pro virtuální zásobníkově orientovaný procesor), který je zapsán do stejnojmenných souborů s příponou .class. Tyto soubory v bytekódu už lze spustit pomocí JVM. Obvykle se však zkompilované soubory spolu s dalšími „zabalí“ do balíčku s příponou .jar a až tento balík se distribuuje mezi konečné uživatele.

Každá aplikace vytvořená v Javě se skládá z jedné nebo více tříd, které jsou organizovány v balíčcích (příslušnost třídy k danému balíčku se definuje příkazem package NÁZEV na začátku zdrojového kódu třídy).

Program v Javě tedy obsahuje:

  • Třídy (class) = schéma (plán) pro vytváření objektů (instancí této třídy)
  • Balíčky (package) = adresář (modul) s třídami, které patří logicky k sobě

Aby byl program samostatně spustitelný, musí alespoň jedna z veřejně viditelných tříd (tzv. hlavní třída) obsahovat metodu main() s následující hlavičkou:

kód v jazyce Java - Zobrazit

  1. public class SomeClass {
  2.         public static void main (String[] args) {
  3.                 // kód hlavní metody
  4.         }
  5. }

Tuto speciální metodu zavolá virtuální stroj (JVM) v okamžiku spuštění vaší aplikace.

Každá třída by se měla nacházet ve stejnojmenném souboru. Třída Pes by se tedy měla nacházet v souboru Pes.java. Kromě názvu třídy existuje ještě tzv. kvalifikovaný název, který kromě názvu třídy obsahuje i její přesné umístění v balíčcích (jednotlivé vnořené balíčky se oddělují tečkou).

Příklady kvalifikovaných názvů:

  • třída Pes = zvirata.savci.Pes
  • třída Editor = formulare.Editor
  • třída JButton = javax.swing.JBut­ton
  • třída List = java.util.List

Chceme-li ve zdrojovém kódu použít třídu, která se nachází v jiném balíčku, musíme to kompilátoru sdělit pomocí příkazu import KVALIFIKOVANÝ NÁZEV.

Datové typy

Primitivní datové typy

I když je jazyk Java objektově orientovaný, přesto z výkonnostních důvodů obsahuje primitivní datové typy, které nejsou samy o sobě objekty. Existují k nim však tzv. obalové třídy, které jsou s nimi za určitých podmínek zaměnitelné a nabízí užitečné metody pro práci s nimi.

Datový typ Typ Velikost Kódování
byte celočíselný 8 bitů dvojkový doplněk, se znaménkem
short celočíselný 16 bitů dvojkový doplněk, se znaménkem
int celočíselný 32 bitů dvojkový doplněk, se znaménkem
long celočíselný 64 bitů dvojkový doplněk, se znaménkem
float reálný 32 bitů IEEE 754
double reálný 64 bitů IEEE 754
boolean logický N/A, počítá se jako 1 bit N/A
char znakový 16 bitů N/A
Objekty

Jazyk Java je založen na objektech a vše (kromě primitivních datových typů) je objekt. Všechny třídy, které nemají uvedeného předka, jsou potomky univerzální třídy Object a dědí od ní několik užitečných metod, například pro převod na řetězec (toString()), zjištění identity (equals(), hashcode()) a metody pro synchronizaci vláken (wait(), notify(), notifyAll()). Existuje i speciální hodnota null, která je také „potomkem“ třídy Object a znamená „nic“ nebo „nedefinováno“.

Obalové třídy

Pro práci s primitivními datovými lze pro každý primitivní datový použít tzv. obalovou třídu. I tyto obalové třídy jsou potomky třídy Object. Java nabízí tyto obalové třídy: Byte, Short, Integer, Long, Float, Double, Boolean, Character.

Vlastní třídy

Základem programování v Javě je vytváření vlastních tříd. Každá třída obsahuje atributy (třídní proměnné) a metody (třídní funkce).

Dále mají třídy tzv. konstruktor, což je speciální metoda se stejným názvem jako třída (bez návratového typu), kterou virtuální stroj (JVM) zavolá při vytváření nové instance dané třídy. Konstruktor má za úkol především incializovat počáteční stav objektu, např. inicializovat proměnné.

Pro přístup k proměnným a metodám dané instance třídy se používá speciální klíčové slovo this. Tento konstrukt v sobě nese referenci na aktuální instanci třídy (tedy tu, se kterou procesor právě pracuje).

Následuje jednoduchý příklad vlastní třídy.

kód v jazyce Java - Zobrazit

  1. package example;
  2.  
  3. public class Dog
  4. {
  5.   private String name;
  6.   private String status;
  7.  
  8.   public Dog (String name)
  9.   {
  10.     this.name = name;
  11.     this.status = "čeká";
  12.   }
  13.  
  14.   public void goEat ()
  15.   {
  16.     this.status = "jí";
  17.   }
  18.  
  19.   public void goPlay ()
  20.   {
  21.     this.status = "si hraje";
  22.   }
  23.  
  24.   @Override
  25.   public String toString ()
  26.   {
  27.     return "Tvůj pejsek '" + this.name + "' " + this.status + ".";
  28.   }
  29.  
  30.   public static void main (String[] args)
  31.   {
  32.     Dog myDog = new Dog ("Astra");
  33.     System.out.println (myDog.toString ());
  34.     myDog.goEat ();
  35.     System.out.println (myDog.toString ());
  36.     myDog.goPlay ();
  37.     System.out.println (myDog.toString ());
  38.   }
  39. }

Další příklad ukazuje použití pole a generování náhodných čísel.

kód v jazyce Java - Zobrazit

  1. package example;
  2.  
  3. public class Cube
  4. {
  5.   private int counts[];
  6.  
  7.   public Cube ()
  8.   {
  9.     this.counts = new int[6];
  10.     this.reset ();
  11.   }
  12.  
  13.   private void reset ()
  14.   {
  15.     for (int i = 0; i < this.counts.length; i ++)
  16.     {
  17.       this.counts[i] = 0;
  18.     }
  19.   }
  20.  
  21.   public void throwCube ()
  22.   {
  23.     int number = this.getRandomNumber (1, 6);
  24.     this.counts[number - 1] ++;
  25.   }
  26.  
  27.   public void printStats ()
  28.   {
  29.     for (int i = 1; i <= this.counts.length; i ++)
  30.     {
  31.       System.out.println ("Počet hodů čísla " + i + ": " + this.counts[i - 1]);
  32.     }
  33.   }
  34.  
  35.   private int getRandomNumber (int min, int max)
  36.   {
  37.     return min + (int) (Math.random () * (double) max);
  38.   }
  39.  
  40.   public static void main (String[] args)
  41.   {
  42.     Cube myCube = new Cube ();
  43.  
  44.     for (int i = 0; i < 1000; i ++)
  45.     {
  46.       myCube.throwCube ();
  47.     }
  48.  
  49.     myCube.printStats ();
  50.   }
  51. }
Modifikátory přístupu

Přístup k proměnným, metodám je možné omezit pomocí tzv. modifikátorů. Jsou to klíčová slova jazyka Java, která umožňují „skrýt“ proměnnou před vnějším světem či ostatními třídami. Není-li proměnná či metoda dostupná, nelze k ní přístupovat (číst, zapisovat, volat). Seznam všech modifikátorů a jejich efekt na viditelnost proměnných a metod uvádí následující tabulka:

Modifikátor Třída Balíček Potomek Okolní svět
public Ano Ano Ano Ano
protected Ano Ano Ano Ne
(bez modifikátoru) Ano Ano Ne Ne
private Ano Ne Ne Ne
Kvalifikátory
  • final
    • u třídy: tato třída nemůže mít potomky
    • u metody: tuto metodu již nelze v podtřídách dále upravovat
    • u atributu: do tohoto atributu lze přiřadit hodnotu pouze jednou
    • u proměnné: do této proměnné lze přiřadit hodnotu pouze jednou
    • u parametru metody: tento parametr nebude v těle metody změněn
  • volatile
    • u atributu: atribut může být současně modifikován více vlákny a tak je zakázáno jej uchovávat ve vyrovnávací paměti (cache)
  • transient
    • u atributu: tento atribut nebude uložen při serializaci (převod objektu na tok bytů, který lze uložit do souboru nebo přenést přes síť)
  • synchronized
    • u bloku: do tohoto bloku může najednou vstoupit pouze jedno vlákno (mutex)
    • u metody: do této metody může najednou vstoupit pouze jedno vlákno (mutex)
  • native
    • u metody: metoda je implementována v jiném jazyce než Java (např. C, C++)

Edice Javy

Java přichází v několika edicích, které se liší knihovnou tříd a podporou některých funkcí.

  • Java Card – pro „chytré“ čipové karty
  • Java Platform Micro Edition (Java ME) — platformy s omezenými prostředky (mobilní telefony, GPS)
  • Java Platform Standard Edition (Java SE) — standardní desktopové aplikace
  • Java Platform Enterprise Edition (Java EE) — internetové aplikace a distribuované prostředí

Reference