Java FAQ
1. Co je objektově orientované programování (OOP)?
OOP je programovací paradigma založené na objektech a třídách. Hlavní principy OOP:
- Encapsulation (zapouzdření) – Skrytí implementace, přístup přes metody.
- Inheritance (dědičnost) – Možnost zdědit vlastnosti a metody z jiné třídy.
- Polymorphism (polymorfismus) – Schopnost volat stejnou metodu různými způsoby.
- Abstraction (abstrakce) – Skrývání složitostí, poskytování pouze důležitých detailů.
2. Jaký je rozdíl mezi == a equals() v Javě?
==
porovnává referenci objektu (kontroluje, zda dvě proměnné ukazují na stejný objekt),
zatímco equals()
porovnává obsah objektu (například hodnoty dvou stringů).
String a = new String("text");
String b = new String("text");
System.out.println(a == b); // false (různé objekty)
System.out.println(a.equals(b)); // true (stejný obsah)
3. Jaký je rozdíl mezi ArrayList a LinkedList?
ArrayList je založen na poli → rychlejší pro čtení, pomalejší pro vkládání/smazání.
LinkedList je obousměrně vázaný seznam → rychlejší pro vkládání/smazání, pomalejší pro čtení.
List arrayList = new ArrayList<>();
List linkedList = new LinkedList<>();
4. Co je to výjimka (exception) v Javě?
Výjimky jsou neočekávané chyby v programu. Dělí se na:
- Checked exceptions – musí být ošetřeny (IOException, SQLException).
- Unchecked exceptions – dědí z RuntimeException (NullPointerException, ArrayIndexOutOfBoundsException).
try {
int result = 10 / 0; // ArithmeticException
} catch (ArithmeticException e) {
System.out.println("Chyba: dělení nulou!");
} finally {
System.out.println("Tento blok se vždy provede.");
}
5. Co je to interface a abstract class v Javě?
Abstraktní třída – může obsahovat jak abstraktní, tak konkrétní metody.
Interface – obsahuje pouze abstraktní metody (od Javy 8 může obsahovat defaultní metody).
abstract class Animal {
abstract void makeSound();
void sleep() { System.out.println("Spí..."); }
}
interface Animal {
void makeSound();
}
6. Co je to multithreading v Javě?
Multithreading umožňuje spouštění více úloh současně. Lze jej vytvořit dvěma způsoby:
- Rozšířením třídy
Thread
- Implementací
Runnable
class MyThread extends Thread {
public void run() {
System.out.println("Thread běží...");
}
}
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
7. Jak funguje HashMap v Javě?
HashMap
ukládá klíč-hodnota páry a používá hashovací tabulku.
- Klíče jsou unikátní.
- Umožňuje rychlé vyhledávání (
O(1)
).
Map map = new HashMap<>();
map.put("Jan", 25);
map.put("Petr", 30);
System.out.println(map.get("Jan")); // 25
8. Co je to Optional v Javě a proč se používá?
Optional
je wrapper pro prevenci NullPointerException
.
Optional name = Optional.ofNullable(null);
System.out.println(name.orElse("Defaultní hodnota")); // Defaultní hodnota
9. Jaký je rozdíl mezi final, finally a finalize?
final
– klíčové slovo, které znamená neměnnost (třída, metoda nebo proměnná).finally
– blok vtry-catch
, který se vždy provede.finalize
– metoda volaná garbage collectorem před zničením objektu.
final int x = 10; // x nelze změnit
10. Jak funguje garbage collection v Javě?
Garbage Collector automaticky odstraňuje nepoužívané objekty z paměti (heap
).
System.gc();
11. Jak funguje synchronizace vláken?
Použití synchronized
zajišťuje, že vlákna nebudou přistupovat ke kritické sekci současně.
12. Jaký je rozdíl mezi protected, private a public v Javě?
V Javě se modifikátory přístupu (public, protected, private a výchozí – "default" bez modifikátoru) používají ke kontrole viditelnosti tříd, metod a proměnných.
1. public
Přístup odkudkoliv – z jakékoliv třídy, balíčku nebo jiného modulu.
public class Example {
public int number;
public void show() {
System.out.println("Public method");
}
}
2. protected
Přístupný ve stejném balíčku a v podtřídách (i když jsou v jiném balíčku).
class Parent {
protected int value = 10;
protected void display() {
System.out.println("Protected method");
}
}
class Child extends Parent {
void access() {
System.out.println(value); // Funguje
display(); // Funguje
}
}
3. private
Přístupné pouze uvnitř stejné třídy.
class Example {
private int secret = 42;
private void showSecret() {
System.out.println("Secret value: " + secret);
}
void accessSecret() {
showSecret(); // Funguje, protože voláme z téže třídy
}
}
4. Výchozí (default, bez modifikátoru)
Přístupný pouze ve stejném balíčku.
class Example {
int packageLevel = 99; // Defaultní přístup
void show() { // Defaultní přístup
System.out.println("Default access");
}
}
5. Shrnutí v tabulce:
Modifikátor | Stejná třída | Stejný balíček | Podtřídy v jiném balíčku | Ostatní třídy |
---|---|---|---|---|
public | ✔️ | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ✔️ | ❌ |
(default) | ✔️ | ✔️ | ❌ | ❌ |
private | ✔️ | ❌ | ❌ | ❌ |