Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| statnice:bakalar:b0b36pjv [2025/05/31 22:50] – zapleka3 | statnice:bakalar:b0b36pjv [2026/05/23 21:14] (current) – [GC] fix syntax mates1n | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== Programování v jazyce JAVA: vlastnosti a koncepce jazyka. Principy objektového programování. ==== | + | ====== Programování v jazyce JAVA: vlastnosti a koncepce jazyka. Principy objektového programování. |
| [[https:// | [[https:// | ||
| Line 14: | Line 14: | ||
| ==== JDK, JRE, JVM ==== | ==== JDK, JRE, JVM ==== | ||
| Většinu programovacích jazyků je možné rozdělit do dvou kategorií: | Většinu programovacích jazyků je možné rozdělit do dvou kategorií: | ||
| - | * **kompilované** - program je zkompilovaný do spustitelného souboru, skládá se z nativních procesorových instrukcí, které přímo vykonává procesor a musí být tedy kompilován pro konkrétní architekturu a systém. Mezi tyto jazyky patří například C/C++. | + | * **kompilované** - program je zkompilovaný do spustitelného souboru, skládá se z nativních procesorových instrukcí, které přímo vykonává procesor a musí být tedy kompilován pro konkrétní architekturu a systém. Mezi tyto jazyky patří například C/< |
| * **interpretované** - program není zkompilovaný, | * **interpretované** - program není zkompilovaný, | ||
| Line 64: | Line 64: | ||
| Garbage Collector běží na pozadí **JVM**. Běží ve vlastním vlákně (nebo i více vláknech), takže neblokuje běh samotného programu (asynchronní). Drží si seznam všech referencí na data na **heap** a jakmile zjistí, že už žádné reference neexistují, | Garbage Collector běží na pozadí **JVM**. Běží ve vlastním vlákně (nebo i více vláknech), takže neblokuje běh samotného programu (asynchronní). Drží si seznam všech referencí na data na **heap** a jakmile zjistí, že už žádné reference neexistují, | ||
| - | Garbage Collector sice nebude nikdy tak efektivní jako korektní manuální dealokace jako např. v C/C++, ale zjednodušuje psaní programu, jeho udržitelnost a značně snižuje riziko memory leaků kvůli špatným manuálním dealokacím. | + | Garbage Collector sice nebude nikdy tak efektivní jako korektní manuální dealokace jako např. v C/< |
| ==== Profilování a optimalizace ==== | ==== Profilování a optimalizace ==== | ||
| Line 491: | Line 491: | ||
| </ | </ | ||
| - | * `catch` může být více, podle typu výjimky. | + | |
| - | * `finally` se vždy vykoná – i když dojde k výjimce nebo `return`. | + | * `finally` se vždy vykoná – i když dojde k výjimce nebo `return`. |
| ==== Try-with-resources ==== | ==== Try-with-resources ==== | ||
| Line 522: | Line 522: | ||
| ==== Best practices ==== | ==== Best practices ==== | ||
| - | * Zachytávej co nejkonkrétnější typy výjimek, až poté obecné (`Exception`, | + | |
| - | * Nepoužívej prázdné `catch` bloky – vždy loguj nebo informuj uživatele. | + | * Nepoužívej prázdné `catch` bloky – vždy loguj nebo informuj uživatele. |
| - | * Uvolňuj prostředky pomocí `finally` nebo `try-with-resources`. | + | * Uvolňuj prostředky pomocí `finally` nebo `try-with-resources`. |
| - | * Přidávej popisné chybové zprávy (`new IOException(" | + | * Přidávej popisné chybové zprávy (`new IOException(" |
| - | * Vlastní výjimky používej pro specifické, | + | * Vlastní výjimky používej pro specifické, |
| ==== Shrnutí podle typu výjimky ==== | ==== Shrnutí podle typu výjimky ==== | ||
| Line 576: | Line 576: | ||
| </ | </ | ||
| - | * **``FileReader``** čte **znaky** (automaticky použije defaultní kódování platformy, nebo explicitně zadej např. ``StandardCharsets.UTF_8``). | + | * **``FileReader``** čte **znaky** (automaticky použije defaultní kódování platformy, nebo explicitně zadej např. ``StandardCharsets.UTF_8``). |
| - | * **``BufferedReader``** obalí čtení do větších bloků → méně systémových volání, vyšší výkon. | + | * **``BufferedReader``** obalí čtení do větších bloků → méně systémových volání, vyšší výkon. |
| - | * Konstrukce **try-with-resources** (Java 7+) zavře reader i v případě výjimky. | + | * Konstrukce **try-with-resources** (Java 7+) zavře reader i v případě výjimky. |
| ==== Textové vs. binární soubory ==== | ==== Textové vs. binární soubory ==== | ||
| - | * **Textové** – čitelné pro člověka, pracujeme se znaky pomocí Reader/ | + | |
| - | * **Binární** – rychlejší, | + | * **Binární** – rychlejší, |
| ==== Serializace objektů ==== | ==== Serializace objektů ==== | ||
| Line 660: | Line 660: | ||
| ==== Primitiva soketu ==== | ==== Primitiva soketu ==== | ||
| - | * **create** – vytvoření nového soketu | + | |
| - | * **bind** – přiřazení lokální adresy a portu | + | * **bind** – přiřazení lokální adresy a portu |
| - | * **connect** – navázání spojení (klient) | + | * **connect** – navázání spojení (klient) |
| - | * **listen** – čekání na spojení (server) | + | * **listen** – čekání na spojení (server) |
| - | * **accept** – přijetí spojení | + | * **accept** – přijetí spojení |
| - | * **send / receive** – odeslání a příjem dat | + | * **send / receive** – odeslání a příjem dat |
| - | * **shutdown / close** – uzavření spojení | + | * **shutdown / close** – uzavření spojení |
| ==== Best practices ==== | ==== Best practices ==== | ||
| Line 758: | Line 758: | ||
| * synchronized – zajišťuje, | * synchronized – zajišťuje, | ||
| - | * volatile – proměnná může být měněna z více vláken, JVM nezachová její hodnotu v cache | + | * volatile – proměnná může být měněna z více vláken, JVM nezachová její hodnotu v cache (když se změní na false - informuje to ostatní vlákna, ale ne jako counter) |
| * join() – čeká na dokončení jiného vlákna | * join() – čeká na dokončení jiného vlákna | ||
| * wait() / notify() – vlákna čekají a signalizují si mezi sebou (pouze uvnitř synchronized bloku) | * wait() / notify() – vlákna čekají a signalizují si mezi sebou (pouze uvnitř synchronized bloku) | ||