java exceptions exception handling with examples
Tento videonávod o výjimkách Java vysvětluje vše o zpracování výjimek v Javě. Dozvíte se o hierarchii výjimek, typech, metodách tříd a dalších:
Když provádíme programy Java, je normální chování nebo normální tok programu přerušeno kvůli neočekávaným událostem.
Například, otevřeme soubor pro čtení dat. Když je spuštěno volání Otevřít soubor, zjistíme, že chybí soubor, který se pokoušíme otevřít. To má za následek přerušení normálního toku programu.
Tato událost, která ovlivňuje nebo přerušuje normální průběh programu, se nazývá „ Výjimka “.
=> Navštivte zde a prozkoumejte sérii školení Java pro všechny.
Zde je video tutoriál o zpracování výjimek Java:
Co se naučíte:
Zpracování výjimek v Javě
Když v programu dojde k výjimce, je provádění programu ukončeno. Jelikož se jedná o náhlé ukončení, systém vygeneruje zprávu a zobrazí ji. Zpráva generovaná systémem může být záhadná, jako některé kódy, nebo nečitelná.
Normální uživatel by tedy měl pochopit, proč program náhle zastavil jeho provádění, měl by znát důvod. Zprávy generované systémem v důsledku výjimky nemusí být užitečné. V Javě můžeme zpracovat výjimku a poskytnout uživateli smysluplné zprávy o problému.
Toto zpracování výjimky, běžně známé jako „Zpracování výjimek“ je jednou z hlavních funkcí programování v Javě.
Důvody pro výjimku
Můžeme mít různé důvody, kvůli kterým mohou nastat výjimky. Pokud jde o výjimku související se vstupem, může být důvodem to, že vstupní data jsou nesprávná nebo nečitelná.
Pokud dostaneme výjimku pro vstupně-výstupní soubory, je docela možné, že soubory, se kterými máme co do činění, neexistují. Někdy mohou nastat chyby, jako jsou problémy se sítí, tiskárna není k dispozici nebo nefunguje atd.
V programu kromě výjimek dostáváme také chyby. Abychom mohli výjimky zpracovávat efektivně, musíme si být vědomi rozdílů mezi chybou a výjimkou.
Chyba označuje závažnější problém s aplikací a aplikace by se ji neměla pokoušet zachytit. Výjimkou je naopak podmínka, kterou se pokusí chytit jakákoli rozumná aplikace.
Chyba v aplikaci je tedy závažnější a aplikace by při chybě narazily. Výjimky na druhé straně se vyskytují v kódu a mohou být zpracovány programátorem poskytnutím nápravných akcí.
Co je zpracování výjimek?
Zpracování výjimek v Javě je mechanismus, pomocí kterého je udržován normální tok aplikace. K tomu využíváme výkonný mechanismus pro zpracování běhových chyb nebo výjimek v programu.
Sekvence kódu, která se používá ke zpracování výjimky, se nazývá obslužná rutina výjimky. Obslužná rutina výjimky dotazuje kontext v okamžiku, kdy došlo k výjimce. To znamená, že načte hodnoty proměnných, které byly v oboru, zatímco došlo k výjimce, a poté obnoví program Java tak, aby pokračoval v normálním toku.
Výhody zpracování výjimek
Hlavní výhodou zpracování výjimek je to, že udržuje normální tok aplikace navzdory výskytu výjimky. Když dojde k výjimce, program se obvykle náhle ukončí.
Mít obslužnou rutinu výjimky v programu nezpůsobí náhlé ukončení programu. Místo toho obslužná rutina výjimky zajistí, že všechny příkazy v programu jsou prováděny normálně a tok programu se nenaruší náhle.
Hierarchie výjimek v Javě
Níže uvedený diagram ukazuje hierarchii výjimek v Javě. Třída java.lang.Throwable (potomek třídy Object) je kořenovou třídou výjimky Java. Třídy Exception a Error jsou odvozeny z této třídy.
Třída výjimek je základní třídou pro všechny ostatní výjimky.
Níže je uvedena hierarchie třídy výjimek v Javě, která vyjmenuje všechny hlavní výjimky, kterých by si programátor v Javě měl být vědom.
Třída výjimek v Javě
Jak je vidět v hierarchickém diagramu, třída Throwable má dvě přímé podtřídy, tj. Výjimku a chybu. Výjimky vyplývající z externího zdroje jsou popsány ve třídě Exception.
Třída Exception deklaruje konstruktory stejně jako Throwable třída a vyvolání každého konstruktoru také vyvolá jeho Throwable protějšek. Třída výjimky nedeklaruje své metody, dědí metody třídy Throwable.
Konstruktory a metody, které třída Exception používá, jsou uvedeny níže.
Konstruktéři
Stavitel Popis veřejná výjimka () Výchozí konstruktor, který vytvoří novou výjimku se zprávou jako null. veřejná výjimka (řetězcová zpráva) Konstruktor k vytvoření nové výjimky s danou zprávou. V tomto případě není příčina inicializována a k inicializaci příčiny lze použít následné volání Throwable.initCause (java.lang.Throwable). veřejná výjimka (řetězcová zpráva, hoditelná příčina) Vytvoří novou výjimku pomocí dané zprávy a příčiny. veřejná výjimka (hoditelná příčina) Vytvoří novou výjimku s danou příčinou a zprávou danou od (Cause == null? Null: Cause.toString ()) (která obvykle obsahuje třídu a podrobnou zprávu o příčině). Protected Exception (String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) Vytvoří novou výjimku s danou zprávou, příčinou, potlačením (povoleno nebo zakázáno) a zapisovatelným sledováním zásobníku (povoleno nebo zakázáno).
Metody
Metoda Prototyp | Popis |
---|---|
public String getMessage () | Získejte podrobnou zprávu o výjimce, ke které došlo. |
public Throwable getCause () | Získejte příčinu výjimky představované vrhatelným objektem |
public String toString () | Zřetězí název třídy s výsledkem getMessage () a vrátí výsledný řetězec. |
public void printStackTrace () | Vytiskne výsledek toString () a obsah trasování zásobníku do výstupního proudu chyby System.err. |
public StackTraceElement () getStackTrace () | Získejte každý prvek v trasování zásobníku ve formě pole. |
public Throwable fillInStackTrace () | Naplňte trasování zásobníku aktuálním trasováním zásobníku. |
Příklad výjimky
Dále představujeme program Java, který demonstruje příklad základní výjimky. Zde poskytujeme řetězcovou proměnnou inicializovanou na nulovou hodnotu. Když se pokusíme tuto proměnnou vytisknout, je vyvolána výjimka, protože String hodnota nemůže být null.
class Main { public static void main(String args()){ //declare a String variable and initialize it to null String myStr = null; //print the string System.out.println(myStr.length()); } }
Výstup
Typy výjimek v Javě
Java podporuje tři typy výjimek:
- Zaškrtnutá výjimka
- Nezaškrtnutá výjimka
- Chyba
V této části probereme všechny tři výše uvedené typy.
# 1) Zaškrtnutá výjimka
Některé výjimky se kontrolují v době kompilace při kompilaci kódu. Jedná se o „zaškrtnuté výjimky“. Program Java hodí chybu kompilace, když zjistí, že kód uvnitř programu je náchylný k chybám.
Můžeme se postarat o chyby kompilace vyvolané kontrolovanou výjimkou zpracováním výjimek buď uzavřením kódu v bloku try-catch, nebo pomocí klíčového slova throws.
V hierarchii výjimek jsou všechny třídy, které přímo dědí třídu Throwable, jako je IOException, ClassNotFoundException atd., Všechny kontrolované výjimky kromě tříd RuntimeException a Error. Jedná se o nezaškrtnuté výjimky.
Následující program Java demonstruje zaškrtnuté výjimky, FileNotFoundException a IOException. V tomto programu se pokusíme otevřít neexistující soubor a číst z něj.
Protože soubor neexistuje, metoda otevřeného souboru vyvolá FileNotFoundException. Dále, když se pokusíme přečíst obsah souboru a zavřít soubor, volání metod vyvolá IOException.
import java.io.*; class Main { public static void main(String args()) { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Výstup
Ve výše uvedeném výstupu, protože chybí obslužná rutina výjimky, dostaneme chyby kompilace pro kontrolované výjimky.
Nyní pro tento program poskytneme doložku o hodech. Jelikož nadřazený objekt FileNotFoundException je IOException, zadáme po klauzuli throws pouze IOException.
import java.io.*; class Main { public static void main(String args()) throws IOException { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Výstup
Jak je patrné z výstupu, když zpracováváme výjimku, poskytuje namísto chyb kompilace smysluplnější výstup.
# 2) Nezaškrtnutá výjimka
Nekontrolované výjimky jsou výjimky, které se kontrolují za běhu. I přes výjimky bude tedy kompilace programů úspěšná. Většina nekontrolovaných výjimek je vyvolána kvůli špatným datům použitým v programu.
Třídy, které dědí „RuntimeException“, jsou nezaškrtnuté výjimky. Výjimky jako ArrayIndexOutofBounds Exception, ArithmeticException, NullPOinterException atd. Jsou příklady nekontrolovaných výjimek.
Následující program ukazuje nekontrolovanou výjimku za běhu, která je způsobena dělením čísla nulou.
class Main { public static void main(String args()) { int num1=10; int num2=0; //divide both numbers and print the result int result=num1/num2; System.out.println(result); } }
Výstup
Vidíme, že program je úspěšně zkompilován a poté je za běhu vyvolána ArithmeticException.
Příklady nekontrolované výjimky:
- ArrayIndexOutOfBoundsException
- NullPointerException
- IllegalArgumentException
- NumberFormatException
Kromě výše uvedených dvou výjimek existuje několik dalších kontrolovaných výjimek, včetně:
- SQLException
- InvocationTargetExecption
# 3) Omyl
Chyba je obvykle nevratná a neopravitelná situace v programu a když dojde k chybě, dojde k selhání programů. Některé z příkladů chyb v programu jsou OutOfMemoryError, AssertionError a VirtualMachineError atd.
Chybová třída dědí z Throwable třídy. Chyba popisuje situaci, kterou nelze vyřešit, a má za následek selhání programu.
Podívejme se na chybu OutOfMemory v této části jako příklad chyby.
Víme, že všechny objekty v Javě jsou alokovány pomocí nového operátoru a jsou uloženy na haldě. Když haldě dojde paměť, nemůže virtuální počítač Java (JVM) přidělit objekt. Sběratel odpadu zároveň nemůže uvolnit žádnou paměť. Tato situace vede k chybě OutOfMemory.
OutOfMemoryError v Javě bude vypadat takto:
'exception in thread 'main' java.lang.outofmemoryerror: java heap space'
Přítomnost OutOfMemoryError v programu znamená, že je zpracováváno buď příliš mnoho dat, nebo jsou objekty drženy příliš dlouho. Někdy to může být také knihovna jiného výrobce, která využívá paměť.
Příčiny OutOfMemoryError
# 1) Java haldy prostor
Pokud má aplikace příliš mnoho finalizátorů, pak objekty třídy, které mají Finalize metodu, nejsou okamžitě uvolněny garbage collectorem, ale jsou zařazeny do fronty pro finalizaci později. Někdy finalizace nemůže držet krok s časem a hromada paměti se zaplní, což má za následek OutOfMemoryError.
Dalším důvodem OutOfMemoryError je, že zadaná velikost haldy může být pro aplikaci nedostatečná.
Následující kód ukazuje OutOfMemoryError, ke kterému může dojít z důvodu velké velikosti dat deklarované pro pole.
import java.util.*; public class Main { static List list = new ArrayList(); public static void main(String args()) throws Exception { Integer() array = new Integer(100000 * 100000); } }
Výstup
# 2) Permgen Space
Trvalá oblast generování v paměti může být také vyčerpána a může generovat chybu OutOfMemory.
Velikost oblasti PermGen je nastavena během spuštění JVM. Pokud uživatel nenastaví velikost, použije se výchozí velikost specifická pro konkrétní platformu.
Ačkoli výše uvedené dva jsou obvykle hlavní příčiny výskytu OutOfMemoryError, mohou existovat i jiné příčiny, jako je velikost pole překračující limit VM atd.
Seznam výjimek v Javě
Níže je uveden seznam hlavních výjimek, ke kterým dochází v prostředí Java. Pro některé z těchto výjimek jsme poskytli příklady programování. Všimněte si, že se jedná o integrované výjimky podporované prostředím Java.
# 1) Aritmetická výjimka: Aritmetické abnormality jako dělení nulou mají za následek ArithmeticException.
Níže uvedený program demonstruje výskyt ArithmeticException.
class Main { public static void main(String args()) { try { //define two numbers int num1 = 100, num2 = 0; int result = num1 / num2; // divide by zero //print the result System.out.println('Result = ' + result); } catch (ArithmeticException e) { System.out.println('ArithmeticException:Division by Zero'); } } }
Výstup
# 2) ArrayIndexOutOfBoundsException: ArrayIndexOutOfBoundsException je vyvolána při přístupu k prvku pole pomocí neplatného indexu. Použitý index je buď nad velikost pole, nebo je záporný.
# 3) ClassNotFoundException: Pokud definice třídy není nalezena, vyvolá se ClassNotFoundException.
# 4) FileNotFoundException: FileNotFoundException se dává, když soubor neexistuje nebo se neotevře.
# 5) IOException: IOException je vyvolána, když operace vstupu a výstupu selže nebo je přerušena.
# 6) Přerušená výjimka: Kdykoli vlákno zpracovává, spí nebo čeká, je přerušeno vyvoláním InterruptedException.
# 7) NoSuchFieldException: Pokud třída neobsahuje zadané pole nebo proměnnou, hodí NoSuchFieldException.
# 8) NoSuchMethodException: Když není přístupná metoda nalezena, NoSuchMethodException se vyvolá.
# 9) NullPointerException: NullPointerException je vyvolána, když je odkazován na null objekt. Toto je nejdůležitější a nejběžnější výjimka v Javě.
# 10) NumberFormatException: Tato výjimka je vyvolána, když metoda nemohla převést řetězec do číselného formátu.
# 11) RuntimeException: Jakákoli výjimka, ke které dojde za běhu, je RuntimeException.
# 12) StringIndexOutOfBoundsException: StringIndexOutOfBoundsException je vyvolána String třídou a označuje, že index přesahuje velikost String objektu nebo je záporný.
# 13) EOFException: EOFException je součástí balíčku java.io a je vyvolána po dosažení konce souboru a čtení souboru.
# 14) IllegalArgumentException: IllegalArgumentException je vyvolána, když jsou metodě předány nelegální nebo neplatné argumenty. Například, nesprávný datový formát, nulová hodnota, když je požadována nenulová hodnota, nebo argumenty mimo rozsah.
Níže uvedený program Java demonstruje IllegalArgumentException.
public class Main { int m; public static void setMarks(int marks) public static void main(String() args) { setMarks(45); setMarks(101); } }
Výstup
Ve výše uvedeném programu je IllegalArgumentException vyvolána ve druhém volání funkce setMarks, kde zadáme značky, které jsou mimo rozsah (> 45).
# 15) InputMismatchException: InputMismatchException je vyvolána, když vstupní čtení neodpovídá zadanému vzoru. Například, pokud program očekává celé číslo a přečte float, pak je vyvolána InputMismatchException.
# 16) NoSuchElementException: NoSuchElementException je vyvolána, když další přístupový prvek neexistuje.
Například, v Enumeration se metoda nextElement () používá pro přístup k dalšímu prvku ve výčtu. Pokud prvek neexistuje, je vyvolána NoSuchElementException. Většinou tuto kolekci vyvolává kolekce Java.
Níže uvedený program to ukazuje.
import java.util.*; public class Main { public static void main(String() args) { Set hash_Set = new HashSet(); //create an empty hashSet. //This throws NoSuchElementException since hashSet is empty hash_Set.iterator().next(); } }
Výstup
# 17) ConcurrentModificationException: ConcurrentModificationException je obvykle vyvolána třídami Collection. Tato výjimka je vyvolána, když se objekty pokusí souběžně upravit prostředek.
Například, vlákno nemůže upravit kolekci, když k ní přistupuje jiné vlákno. Pokud povolíme dvě vlákna, budou tyto dvě současně přistupovat ke kolekci a budou existovat nekonzistence.
Následující příklad ukazuje ConcurrentModificationException.
import java.awt.List; import java.util.*; public class Main { public static void main(String() args) { ArrayList A_list = new ArrayList<>(); //add elements to the ArrayList A_list.add(10); A_list.add(20); A_list.add(30); Iterator it = A_list.iterator(); while (it.hasNext()) { Integer value = it.next(); System.out.println('ArrayList Value:' + value); if (value.equals(30)) A_list.remove(value); } } }
Výstup
Ve výše uvedeném programu, zatímco se tiskne ArrayList, se snažíme odstranit prvek současně. Jedná se o souběžný přístup, a proto je vyvolána výjimka.
Vlastní výjimky v Javě
Zatím jsme diskutovali o všech výjimkách, které jsou vestavěné nebo poskytované jazykem Java. Kromě těchto výjimek můžeme definovat i naše vlastní výjimky. Tito se nazývají vlastní výjimky nebo uživatelem definované výjimky.
Pomocí vlastních výjimek můžeme definovat naše výjimky podle našich potřeb.
Následující příklad ukazuje vlastní výjimku, kterou jsme definovali pro hodnotu Integer.
//custom exception definition class InvalidValueException extends Exception{ InvalidValueException(String s){ super(s); } } class Main{ static void validate(int int_val)throws InvalidValueException{ if(int_val<10) //value is valid if> 10 else throw exception throw new InvalidValueException('Invalid value'); else System.out.println('This is valid integer'); } public static void main(String args()){ try{ validate(9); }catch(Exception m){System.out.println('Exception occured: '+m);} System.out.println('Code after Exception'); } }
Výstup
Často kladené otázky
Otázka č. 1) Co máte na mysli výjimkou?
Odpovědět: Událost, která nastane během provádění programu a naruší normální průběh provádění programu, se nazývá Výjimka. Výjimka je nežádoucí a neočekávaná a může nastat v důsledku vnějších faktorů nebo chyb při programování.
Otázka 2) Jaký je rozdíl mezi chybou a výjimkou?
Odpovědět: Výjimkou jsou události, které narušují normální průběh programu. V našem programu můžeme zpracovat výjimky a pokračovat v programu normálně. Chyba je neodstranitelná událost, kterou nelze zpracovat a ukončí program.
Otázka č. 3) Co máte na mysli pod pojmem Zpracování výjimek?
Odpovědět: Proces zadávání posloupnosti kroků v programu pro zpracování výjimky se nazývá zpracování výjimek. Poskytnutím obslužných rutin výjimek v programu můžeme zajistit normální tok programu.
Otázka č. 4) Jaké jsou výhody zpracování výjimek v Javě?
Odpovědět: Pomocí zpracování výjimek můžeme udržovat normální tok provádění aplikace. Když poskytneme obslužné rutiny výjimek, můžeme také šířit chyby do zásobníku volání.
Otázka č. 5) Jaké je použití zpracování výjimek?
Odpovědět: Neukončení normálního toku provádění aplikace je hlavní použití mít obslužné rutiny výjimek v programu. Bez obslužných rutin výjimek se program ukončí a normální průběh provádění se přeruší, když dojde k výjimce.
S výjimkou správně zpracovanou v programu může pokračovat v normálním provádění, i když dojde k výjimce.
Další příklady výjimek
Výjimkou je událost, ke které dochází za běhu programu a narušuje provádění programu. Kvůli tomu softwarový produkt náhle skončí.
Když dojde k této výjimce, Java vytvoří objekt s chybovou zprávou a informacemi o třídě. Toto je objekt výjimky.
Proč potřebujeme výjimku v Javě?
Třída ExcepDemo bez výjimky:
public class ExcepDemo { public static void main(String() args) { int i=5; int j=0; System.out.println(i/j); System.out.println('statement after division'); } }
VÝSTUP:
Třída ExcepDemo s manipulací s výjimkami:
public class ExcepDemo { public static void main(String() args) { // TODO Auto-generated method stub int i=5; int j=0; try { System.out.println(i/j); } catch(ArithmeticException ae) { System.out.println('wrong input'); } System.out.println('statement after division'); } }
VÝSTUP:
Vyzkoušejte, chyťte a nakonec zablokujte:
co je jednostránková aplikace v angularjs
- Výjimku řeší blok try, catch.
- Příkazy, které mohou vést k výjimkám, se zapisují do bloku try.
- Když dojde k výjimce, budou provedeny příkazy uvnitř bloku catch. Pokud nedojde k výjimce, blok catch nebude proveden.
- Bez ohledu na to, zda došlo nebo nedošlo k výjimce, bude proveden poslední blok.
Typy výjimek
Nekontrolovaná výjimka:
Protože nekontrolovaným výjimkám se lze vyhnout správným programováním ( Např. null pointer Exception, Arithmetic Exception) nebude zkontrolován kompilátorem. Zaškrtnutá výjimka bude vyvolána za běhu.
Zkontrolovaná výjimka:
- Kontrolovaná výjimka bude zkontrolována kompilátorem a je povinná k vyvolání nebo zpracování výjimky.
- Tato výjimka se používá k oddělení kódu pro zpracování chyb od běžného kódu.
- Všechny kontrolované výjimky jsou seskupeny a je to užitečné pro rozlišení problémů.
Příklad: java.io
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class DemoExpChecked { public static void main(String() args) { try { File file=new File('input.txt'); BufferedReader br = new BufferedReader(new FileReader(file)) ; String content; while ((content=br.readLine())!=null) { System.out.println(content); } br.close(); } catch(IOException e) { e.printStackTrace(); } } }
Chyby
Může dojít k chybě v důsledku logických chyb programu nebo jakékoli paměti související s problémem JVM.
Příklad: Paměť je mimo vázanou chybu nebo chyba přetečení zásobníku.
Házet a házet
Klíčové slovo „Vyhodit“ se používá k vyvolání výjimky, zatímco klíčové slovo „vyvolá“ se používá k deklaraci výjimky.
Ukázkový program hodu:
public class Demothrow { String content ; public void driving(String c) { this.content=c; if (content.isEmpty()) { throw new NullPointerException('content is empty'); } else { System.out.println('content=='+content); } } public static void main(String() args) { Demothrow dt=new Demothrow(); dt.driving(''); } }
Hodí ukázkový program:
Hody se používají k poskytnutí informací, že tato metoda vyvolá tuto konkrétní výjimku. Když voláte tuto konkrétní metodu, musíte tuto výjimku zpracovat.
public class DemoThrows { int i=2,j=0; public void checkmethod () throws ArithmeticException{ System.out.println(i/j); } public static void main(String() args) { DemoThrows d =new DemoThrows(); try { d.checkmethod(); } catch (ArithmeticException ae) { ae.printStackTrace(); } } }
Klíčové body, které je třeba poznamenat:
- Výjimky jsou abnormální události, ke kterým došlo během provádění programu, a ovlivní to průběh provádění.
- Chyba se liší od výjimek. Příklad chyby: Chyba paměti.
- Zkontrolované výjimky se kontrolují během kompilace a je nutné se s touto kontrolovanou výjimkou vypořádat.
- Během běhu dojde k nezaškrtnuté výjimce.
Závěr
Tento kurz zpracování výjimek v Javě představil definici výjimek, zpracování výjimek a hierarchii výjimek v Javě. Také jsme diskutovali o třídě výjimek v Javě, která poskytuje různé konstruktory a metody pro přístup k výjimkám.
Prozkoumali jsme seznam běžných výjimek, ke kterým dochází v Javě, a viděli jsme příklady programování pro hlavní výjimku. Také jsme diskutovali o hlavních chybách, ke kterým dochází v programu Java, spolu s typy výjimek a vlastních výjimek.
=> Zkontrolujte VŠECHNY výukové programy Java zde.
Doporučené čtení
- Top 10 selenových výjimek a jak s nimi zacházet (přesný kód)
- Zpracování výjimek JDBC - Jak zacházet s výjimkami SQL
- Jak zpracovat výjimku v SoapUI Groovy skriptech - SoapUI Tutorial # 11
- Výukový program Java String s funkcí String Buffer a String Builder
- Implementace Java: Vytvoření a spuštění souboru Java JAR
- Java vlákna s metodami a životním cyklem
- Virtuální stroj Java: Jak JVM pomáhá při spouštění aplikace Java
- Modifikátory přístupu v Javě - výuka s příklady