Java: co je to za jazyk, jeho vlastnosti a vývoj pro Android

Autor: IT Sectr Publikováno: 2026-02-10 Doba čtení: 11 min

Java — objektově orientovaný programovací jazyk, který byl více než deset let hlavním jazykem Android SDK. Navzdory oficiálnímu přechodu Google na Kotlin zůstává Java důležitou součástí ekosystému: starší projekty, podnikové aplikace a miliony řádků kódu v Google Play nadále pracují v Javě. Podle zprávy JetBrains Developer Ecosystem (2025) přibližně 35 % Android projektů stále používá Javu. Více o aktuálních trendech si přečtěte v oficiální zprávě JetBrains.

Hlavní body

  • Java — hlavní jazyk Androidu do roku 2019, starší kód tvoří ~35 % projektů
  • JVM — virtuální stroj zajišťující multiplatformnost Java bajtkódu
  • Android SDK — kompletní sada nástrojů zahrnující kompilátor, emulátor a profiler
  • Kotlin — nástupce Javy, ale oba jazyky se kompilují do stejného JVM bajtkódu
  • Gradle — sestavovací systém spravující závislosti a konfigurace v Android projektech

Co je Java?

Java — univerzální programovací jazyk vytvořený společností Sun Microsystems v roce 1995. Hlavní princip — «Write Once, Run Anywhere»: zkompilovaný Java bajtkód běží na jakékoli platformě, kde je nainstalován virtuální stroj JVM. V kontextu mobilního vývoje se Java stala prvním oficiálním jazykem Android SDK, vydaným Googlem v roce 2008.

Architektura Javy je založena na třech komponentách: JDK (Java Development Kit) — sada nástrojů pro vývojáře, JRE (Java Runtime Environment) — běhové prostředí a JVM (Java Virtual Machine) — virtuální stroj. Android používá vlastní implementaci JVM — Android Runtime (ART), která nahradila Dalvik ve verzi 5.0 (Lollipop). ART spouští DEX bajtkód, který je kompilován z Java bajtkódu pomocí nástroje dx/d8.

Klíčová vlastnost Javy — automatická správa paměti pomocí Garbage Collector (GC). Vývojář nemusí explicitně uvolňovat paměť — GC sleduje nepoužívané objekty a odstraňuje je. V Android ART se používají Concurrent Mark Sweep (CMS) a Generational GC, optimalizované pro omezené zdroje mobilních zařízení. To snižuje zátěž vývojáře, ale může způsobovat «lagy» při sběru odpadu ve vlákně UI.

Verze Javy a Android API

Android podporuje podmnožinu Java API, která se rozšiřuje s každou novou verzí OS. Android 12 (API 31) přidal podporu pro Java 11, včetně lambd se zachycením proměnných, modulárního systému JPMS a HTTP klienta java.net.http. Android 14 (API 34) zavedl experimentální podporu pro Java 17 prostřednictvím desugaringu D8/R8 — některé funkce (records, sealed classes) se překládají do kompatibilního kódu pro starší verze.

Verze JavyAndroid API (min)Verze AndroiduKlíčové funkce
Java 7API 194.4 KitKattry-with-resources, multi-catch
Java 8API 247.0 NougatLambdy, Stream API, Optional
Java 11API 3112HTTP Client, Local-Variable Syntax
Java 17API 3414Records, Sealed Classes (D8)

Java SDK a vývoj pro Android

Android SDK zahrnuje Java kompilátor, nástroj dex (d8), aapt (Asset Packaging Tool), emulátor a knihovny android.* a java.*. Vývojář píše kód v Javě, kompiluje jej do .class souborů (JVM bajtkód), poté d8 převádí soubory na .dex (Dalvik Executable), které jsou zabaleny do APK spolu se zdroji a AndroidManifest.xml.

Gradle — sestavovací systém Android projektu. Soubor build.gradle (Groovy) nebo build.gradle.kts (Kotlin DSL) popisuje závislosti, verze SDK, příchutě (product flavors) a podpisy. Android Gradle Plugin (AGP) verze 8.x automatizuje desugaring — překlad moderních Java funkcí do zpětně kompatibilního kódu. Například java.time.LocalDate se převádí na kód kompatibilní s API 21+ beze změn ve zdrojovém kódu vývojáře.

java
// Jednoduchá Android Activity v Javě
package com.example.myapp;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.textView);
        tv.setText("Ahoj z Javy!");
    }

    // Metoda pro zpracování kliknutí na tlačítko
    public void onButtonClick(View view) {
        TextView tv = findViewById(R.id.textView);
        tv.setText("Tlačítko stisknuto");
    }
}

Třída MainActivity dědí z AppCompatActivity — základní třídy z AndroidX pro zpětnou kompatibilitu. Metoda onCreate je volána při vytvoření Activity, v ní se nastavuje layout pomocí setContentView. findViewById propojuje Java proměnnou s prvkem z XML rozvržení. Metoda onButtonClick je propojena s tlačítkem pomocí atributu android:onClick v XML.

Práce s Activity a životní cyklus

Životní cyklus Activity v Javě — sekvence callbacků: onCreate → onStart → onResume (aktivní), onPause → onStop → onDestroy (ukončení). Vývojář přepisuje tyto metody pro správu zdrojů. onCreate — inicializace, onPause — ukládání dat, onDestroy — uvolňování zdrojů. Android volá tyto metody při otáčení obrazovky, přechodu na pozadí a přijetí hovoru.

java
// Životní cyklus Activity se správou stavu
public class DetailActivity extends AppCompatActivity {
    private String itemId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        itemId = getIntent().getStringExtra("ITEM_ID");
        loadData(itemId);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("item_id", itemId);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        itemId = savedInstanceState.getString("item_id");
        loadData(itemId);
    }

    private void loadData(String id) {
        // Načítání dat podle identifikátoru
    }
}

Metoda onSaveInstanceState ukládá stav Activity při otáčení obrazovky nebo přepínání úloh. Bundle obsahuje páry klíč-hodnota — jednoduché typy, Parcelable nebo Serializable objekty. onRestoreInstanceState obnovuje uložený stav. Tento vzor je kritický pro Android, protože systém může zničit Activity při nedostatku paměti a obnovit ji při návratu uživatele.

Syntaxe Javy: třídy, metody a typy

Syntaxe Javy — podobná C, silně typovaná, objektově orientovaná. Každý .java soubor obsahuje jednu veřejnou třídu, jejíž název se shoduje s názvem souboru. Java nepodporuje funkce mimo třídy — vše je metoda. Vstupní bod — statická metoda public static void main(String[] args) pro konzolové aplikace nebo metody životního cyklu Android Activity pro mobilní zařízení.

Datové typy v Javě

Java dělí typy na primitivy (int, double, boolean, char, byte, short, long, float) a referenční typy (třídy, rozhraní, pole, enum). Primitivy jsou uloženy na zásobníku a předávány hodnotou. Objekty — na haldě, předávány referencí. Autoboxing automaticky převádí primitiv na obalový objekt (Integer, Double, Boolean), ale vytváří další objekty — v Androidu je to kritické pro výkon UI.

java
// Příklady datových typů a struktur Javy
public class DataTypes {
    // Primitivy
    int count = 42;
    double price = 19.99;
    boolean isActive = true;
    char grade = 'A';

    // Referenční typy
    String name = "Android";
    Integer boxed = 100; // autoboxing
    List<String> items = new ArrayList<>();

    // Metoda s Generics
    public <T> T getFirst(List<T> list) {
        return list.isEmpty() ? null : list.get(0);
    }

    // Enum pro pevnou sadu hodnot
    public enum Status {
        PENDING, LOADING, SUCCESS, ERROR
    }
}

Generika List<T> zajišťují typovou bezpečnost kolekcí. Metoda getFirst vrací prvek libovolného typu — konkrétní typ je určen v místě volání. Enum Status je kompilován do třídy s pevnou sadou konstant, každá instance je singleton. V Androidu se enum používá méně kvůli spotřebě paměti: ProGuard/R8 optimalizuje enum na int konstanty, kde je to možné.

Java vs Kotlin: srovnání v Androidu

Srovnání Javy a Kotlinu pro vývoj Android aplikací — jedno z hlavních témat od roku 2019, kdy Google prohlásil Kotlin za prioritní jazyk. Kotlin je plně kompatibilní s Javou — oba se kompilují do JVM bajtkódu, mohou se navzájem volat a používat stejné knihovny. Přístupy k psaní kódu se však zásadně liší.

Šablonový kód

Kotlin odstraňuje mnohomluvnost Javy: data class nahrazuje 50+ řádků Java třídy s gettry, settry, equals, hashCode, toString a copy. Null safety je zabudován do typového systému Kotlinu — NullPointerException je prakticky nemožný. Extension funkce umožňují přidávat metody k existujícím třídám bez dědičnosti. Smart Casts automaticky převádějí typy po kontrole.

AspektJavaKotlin
Null safety@Nullable / @NonNull anotaceString? / String — vestavěno
Data class50+ řádků s Lombokdata class User(val name: String)
ExtensionStatické utilitní třídyfun String.isEmail(): Boolean
CoroutinesAsyncTask / ExecutorServicesuspend + Structured Concurrency
LambdyFunctionalInterface + ::methodLambdy ve výchozím nastavení
DI anotace@Inject, @Module, @ProvidesAnalogicky, ale méně kódu

Výkon

Z hlediska výkonu jsou Java a Kotlin identické — oba se kompilují do JVM bajtkódu, který Android ART spouští stejně. Rozdíl ve velikosti APK: Kotlin přidává ~200-400 KB za knihovnu kotlin-stdlib. Java projekty mají menší velikost APK kvůli absenci dalšího běhového prostředí, ale při použití Java Stream API a Optional může velikost APK vzrůst kvůli desugaringu.

Nástroje Java vývojáře pro Android

Nástroje Java vývojáře pro Android zahrnují Android Studio, Gradle, profiler a emulátor. Android Studio — oficiální IDE založené na IntelliJ IDEA Community, obsahuje editor s automatickým doplňováním Javy, analyzátor kódu (lint), refaktorování a vizuální editor rozvržení (Layout Editor).

Hlavní nástroje

Android Gradle Plugin (AGP) verze 8.x spravuje sestavení: kompilaci Javy do tříd, desugaring, minifikaci ProGuard/R8, balení do APK/AAB. R8 — vylepšený desugaring a obfuskátor nahrazující ProGuard. Build variants (debug/release + product flavors) se konfigurují přes build.gradle. Gradle Daemon urychluje následující sestavení pomocí ukládání do mezipaměti.

groovy
// build.gradle (app) — konfigurace Java modulu
android {
    compileSdk 34
    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    testImplementation 'junit:junit:4.13.2'
}

Blok compileOptions určuje verzi Javy pro kompilaci — Java 17 je dostupná od AGP 8.x. Minimální SDK (minSdk) určuje minimální verzi Androidu, na které aplikace funguje. Target SDK — verze, pro kterou byla aplikace testována. Rozdíl mezi compileSdk a targetSdk: compileSdk — API pro kompilaci, targetSdk — chování běhového prostředí.

Omezení Javy v mobilním vývoji

Omezení Javy v Androidu se stala důvodem přechodu Google na Kotlin. NullPointerException — nejčastější výjimka v Java-Android aplikacích, protože typový systém nerozlišuje mezi nullable a non-null referencemi. Google doporučuje anotace @Nullable a @NonNull z balíčku androidx.annotation, ale kompilátor je nekontroluje — pouze lint to dělá.

Nedostatek coroutines — další omezení: asynchronní operace v Javě vyžadují callbacky, AsyncTask (zastaralý od API 30), ExecutorService nebo RxJava. To vede k callback hell a únikům paměti při otáčení obrazovky. Kotlin coroutines se Structured Concurrency řeší tento problém na úrovni jazyka: coroutine je zrušena při zničení Activity bez ruční správy.

Šablonový kód v Javě — zdroj chyb při ručním psaní equals/hashCode, implementací Parcelable a ViewHolder pro RecyclerView. Knihovny Android KTX a Jetpack Compose jsou orientovány na Kotlin. Nová Android API (Room, Navigation, Compose) zveřejňují příklady v Kotlin ve výchozím nastavení, i když Java verze existují.

Často kladené otázky

Co je Java?

Java — objektově orientovaný programovací jazyk od Sun Microsystems (1995), běžící na virtuálním stroji JVM. Byl hlavním jazykem Android SDK do roku 2019. Používá se v mobilním vývoji pro starší projekty, serverovou část (Spring) a podnikové aplikace. Vyznačuje se silným typováním, automatickým sběrem odpadu a multiplatformností bajtkódu.

Proč je Java považována za starší jazyk pro Android?

Google prohlásil Kotlin za prioritní jazyk pro Android v roce 2019. Nové knihovny AndroidX, Jetpack Compose, doporučení architektury a dokumentace jsou ve výchozím nastavení poskytovány v Kotlin. Java zůstává plně podporovaná, ale API jsou navrhována s přístupem Kotlin-first. Java projekty vyžadují více šablonového kódu a nedostávají nové jazykové možnosti jako první.

Která verze Javy se používá v Androidu?

Android podporuje Java 8 plně, Java 11 — částečně s Android 12+, Java 17 — experimentálně přes D8 desugaring. Android Gradle Plugin (AGP) 8.x překládá moderní bajtkód do kompatibilního kódu pro stará API přes desugar. Vývojář může psát v Javě 11+ pomocí lambd, Optional a DateTime API, ale records a sealed classes jsou dostupné pouze přes D8.

Čím se Java liší od Kotlinu?

Kotlin vyžaduje méně kódu: data class nahrazuje desítky řádků Java boilerplate, null safety je vestavěn do typů, coroutines zjednodušují asynchronnost. Java nabízí jednodušší syntaxi pro začátečníky, osvědčený ekosystém knihoven a stabilní nástroje. Výkon běhového prostředí je identický — oba se kompilují do JVM bajtkódu spouštěného Android ART.

Jaká IDE se používají pro Java vývoj na Androidu?

Android Studio — standardní IDE pro vývoj Android aplikací s podporou Javy a Kotlinu. Zahrnuje emulátor, profiler (CPU, memory, network), Layout Inspector, APK Analyzer. IntelliJ IDEA je vhodné pro serverovou Javu. Eclipse ADT je zastaralé a není podporováno Googlem. Android Studio také poskytuje nástroje pro migraci Java kódu do Kotlinu pomocí vestavěného konvertoru.

Shrnutí

  • Java — objektově orientovaný jazyk, který byl hlavním jazykem Android SDK po dobu 11 let
  • JVM bajtkód je překládán do DEX přes d8 a spouštěn Android Runtime (ART) s GC
  • Android podporuje Java 8-17 s desugaringem D8/R8 pro zpětnou kompatibilitu
  • Java Activity — základní komponenta s životním cyklem onCreate → onStart → onResume → onPause → onStop → onDestroy
  • Gradle — sestavovací systém s podporou Java 17, AGP 8.x a build variants
  • Kotlin — nástupce Javy se stejným bajtkódem, ale moderní syntaxí a null safety
  • Java starší kód tvoří ~35 % Android projektů, Google nadále podporuje oba jazyky

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také