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 v try-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 ✔️