Java: шта је то за језик, његове карактеристике и Android развој

Аутор: IT Sectr Објављено: 2026-02-10 Време читања: 11 мин

Java — објектно-оријентисани програмски језик који је више од десет година био главни језик Android SDK. Упркос званичном преласку Google-а на Kotlin, Java остаје важан део екосистема: легаси пројекти, корпоративне апликације и милиони линија кода у Google Play-у настављају да раде на Java. Према извештају JetBrains Developer Ecosystem (2025), око 35% Android пројеката још увек користи Java. Више о актуелним трендовима прочитајте у званичном извештају JetBrains.

Главно

  • Java — главни језик Android-а до 2019. године, легаси код чини ~35% пројеката
  • JVM — виртуелна машина која обезбеђује вишеплатформност бајт-кода Java
  • Android SDK — комплетан скуп алата, укључујући компајлер, емулатор и профилер
  • Kotlin — наследник Java, али оба језика се компајлирају у исти бајт-код JVM
  • Gradle — систем изградње који управља зависностима и конфигурацијама у Android пројектима

Шта је Java?

Java — програмски језик опште намене, креиран од стране компаније Sun Microsystems 1995. године. Главни принцип — «Write Once, Run Anywhere»: компајлирани бајт-код Java се извршава на било којој платформи где је инсталирана виртуелна машина JVM. У контексту мобилног развоја, Java је постала први званични језик Android SDK-а, који је Google објавио 2008. године.

Архитектура Java се заснива на три компоненте: JDK (Java Development Kit) — скуп алата за програмера, JRE (Java Runtime Environment) — окружење за извршавање и JVM (Java Virtual Machine) — виртуелна машина. Android користи сопствену имплементацију JVM — Android Runtime (ART), која је заменила Dalvik у верзији 5.0 (Lollipop). ART извршава DEX бајт-код, који се компајлира из Java бајт-кода преко dx/d8 алата.

Кључна карактеристика Java — аутоматско управљање меморијом кроз Garbage Collector (GC). Програмер не мора експлицитно да ослобађа меморију — GC прати неискоришћене објекте и уклања их. У Android ART-у се користе Concurrent Mark Sweep (CMS) и Generational GC, оптимизовани за ограничене ресурсе мобилних уређаја. Ово смањује оптерећење програмера, али може изазвати «лагове» при сакупљању смећа у UI нити.

Верзије Java и Android API

Android подржава подскуп Java API, који се проширује са сваком новом верзијом ОС-а. Android 12 (API 31) додао је подршку за Java 11, укључујући ламбде са хватањем променљивих, модуларни систем JPMS и HTTP клијент java.net.http. Android 14 (API 34) увео је експерименталну подршку за Java 17 кроз десахаринг D8/R8 — неке функције (records, sealed classes) се преводе у компатибилан код за старије верзије.

Верзија JavaAndroid API (min)Верзија AndroidКључне функције
Java 7API 194.4 KitKattry-with-resources, multi-catch
Java 8API 247.0 NougatЛамбде, Stream API, Optional
Java 11API 3112HTTP Client, Local-Variable Syntax
Java 17API 3414Records, Sealed Classes (D8)

Java SDK и Android развој

Android SDK укључује компајлер Java, алат dex (d8), aapt (Asset Packaging Tool), емулатор и библиотеке android.* и java.*. Програмер пише код на Java, компајлира га у .class датотеке (JVM бајт-код), затим d8 их претвара у .dex датотеке (Dalvik Executable), које се пакују у APK заједно са ресурсима и AndroidManifest.xml.

Gradle — систем изградње Android пројекта. Датотека build.gradle (Groovy) или build.gradle.kts (Kotlin DSL) описује зависности, SDK верзије, флејворе (product flavors) и потписе. Android Gradle Plugin (AGP) верзије 8.x аутоматизује desugar — превођење савремених Java функција у уназад компатибилан код. На пример, java.time.LocalDate се претвара у код компатибилан са API 21+ без промена у изворном коду програмера.

java
// Једноставан Android Activity на Java
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("Здраво из Java!");
    }

    // Метод за обраду клика на дугме
    public void onButtonClick(View view) {
        TextView tv = findViewById(R.id.textView);
        tv.setText("Дугме кликнуто");
    }
}

Класа MainActivity наслеђује AppCompatActivity — основну класу из AndroidX за уназад компатибилност. Метода onCreate се позива при креирању Activity-ја, у њој се поставља layout кроз setContentView. findViewById повезује Java променљиву са елементом из XML layout-а. Метода onButtonClick је повезана са дугметом кроз атрибут android:onClick у XML-у.

Рад са Activity и животни циклус

Животни циклус Activity-ја у Java — секвенца callback-ова: onCreate → onStart → onResume (активан), onPause → onStop → onDestroy (завршетак). Програмер преопредељује ове методе за управљање ресурсима. onCreate — иницијализација, onPause — чување података, onDestroy — ослобађање ресурса. Android позива ове методе при ротацији екрана, одласку у позадину и пријему позива.

java
// Животни циклус Activity са управљањем стањем
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) {
        // Учитавање података по идентификатору
    }
}

Метода onSaveInstanceState чува стање Activity-ја при ротацији екрана или пребацивању задатака. Bundle садржи парове кључ-вредност — једноставне типове, Parcelable или Serializable објекте. onRestoreInstanceState враћа сачувано стање. Овај образац је критичан за Android, јер систем може уништити Activity при недостатку меморије и вратити га при повратку корисника.

Синтакса Java: класе, методе и типови

Синтакса Java — слична C, строго типизована, објектно-оријентисана. Свака .java датотека садржи једну public класу, чије име се поклапа са именом датотеке. Java не подржава функције ван класа — све је метода. Улазна тачка — статичка метода public static void main(String[] args) за конзолне апликације или методе животног циклуса Android Activity-ја за мобилне.

Типови података у Java

Java дели типове на примитиве (int, double, boolean, char, byte, short, long, float) и референтне типове (класе, интерфејси, низови, enum). Примитиви се чувају на стек-у и преносе се по вредности. Објекти — на хепу, преносе се по референци. Аутоматско упакивање (autoboxing) аутоматски конвертује примитив у објекат-омотач (Integer, Double, Boolean), али ствара додатне објекте — у Android-у је ово критично за перформансе UI-ја.

java
// Примери типова података и структура Java
public class DataTypes {
    // Примитиви
    int count = 42;
    double price = 19.99;
    boolean isActive = true;
    char grade = 'A';

    // Референтни типови
    String name = "Android";
    Integer boxed = 100; // autoboxing
    List<String> items = new ArrayList<>();

    // Метод са Generics
    public <T> T getFirst(List<T> list) {
        return list.isEmpty() ? null : list.get(0);
    }

    // Enum за фиксни скуп вредности
    public enum Status {
        PENDING, LOADING, SUCCESS, ERROR
    }
}

Генерици List<T> обезбеђују типску безбедност колекција. Метода getFirst враћа елемент било ког типа — конкретан тип се одређује у тачки позива. Enum Status се компајлира у класу са фиксним скупом константи, свака инстанца је singleton. У Android-у enum се ређе користи због потрошње меморије: ProGuard/R8 оптимизује enum у int константе где је то могуће.

Java vs Kotlin: поређење у Android-у

Поређење Java и Kotlin за Android развој — једна од главних тема од 2019. године, када је Google прогласио Kotlin приоритетним језиком. Kotlin је потпуно компатибилан са Java — оба се компајлирају у бајт-код JVM, могу позивати један другог и користити исте библиотеке. Међутим, приступи писању кода се коренито разликују.

Шаблонски код

Kotlin елиминише опширност Java: data class замењује 50+ линија Java класе са getter-има, setter-има, equals, hashCode, toString и copy. Null safety је уграђен у систем типова Kotlin-а — NullPointerException је практично немогућ. Extension функције омогућавају додавање метода постојећим класама без наслеђивања. Smart Casts аутоматски конвертују типове након провере.

АспектJavaKotlin
Null safety@Nullable / @NonNull анотацијеString? / String — уграђено
Data class50+ линија са Lombokdata class User(val name: String)
ExtensionСтатичке утилитарне класеfun String.isEmail(): Boolean
CoroutinesAsyncTask / ExecutorServicesuspend + Structured Concurrency
ЛамбдеFunctionalInterface + ::methodЛамбде подразумевано
Анотације DI@Inject, @Module, @ProvidesАналогно, али мање кода

Перформансе

По перформансама Java и Kotlin су идентични — оба се компајлирају у бајт-код JVM, који Android ART извршава исто. Разлика у величини APK: Kotlin додаје ~200-400 KB за библиотеку kotlin-stdlib. Java пројекти имају мању величину APK због одсуства додатног runtime-а, али при коришћењу Java Stream API и Optional величина APK може порасти због десахаринга.

Алати Java програмера за Android

Алати Java програмера за Android укључују Android Studio, Gradle, профилер и емулатор. Android Studio — званично IDE, засновано на IntelliJ IDEA Community, укључује едитор са аутоматским довршавањем Java, анализатор кода (lint), рефакторисање и визуелни едитор layout-а (Layout Editor).

Основни алати

Android Gradle Plugin (AGP) верзије 8.x управља изградњом: компајлирање Java у класе, десахаринг, минификација ProGuard/R8, паковање у APK/AAB. R8 — унапређени десахаринг и обфускатор, који замењује ProGuard. Build variants (debug/release + product flavors) се конфигуришу кроз build.gradle. Gradle Daemon убрзава накнадне изградње кроз кеширање.

groovy
// build.gradle (app) — конфигурација Java модула
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'
}

Блок compileOptions наводи Java верзију за компајлирање — Java 17 је доступан од AGP 8.x. Минимални SDK (minSdk) одређује минималну верзију Android-а на којој апликација ради. Target SDK — верзија за коју је апликација тестирана. Разлика између compileSdk и targetSdk: compileSdk — API за компајлирање, targetSdk — понашање runtime-а.

Ограничења Java у мобилном развоју

Ограничења Java у Android-у су постала разлог преласка Google-а на Kotlin. NullPointerException — најчешћи изузетак у Java-Android апликацијама, јер систем типова не разликује nullable и non-null референце. Google препоручује анотације @Nullable и @NonNull из пакета androidx.annotation, али компајлер их не проверава — то ради само lint.

Недостатак корутина — још једно ограничење: асинхроне операције у Java захтевају callback-ове, AsyncTask (застарео од API 30), ExecutorService или RxJava. Ово доводи до callback hell-а и цурења меморије при ротацији екрана. Kotlin coroutines са Structured Concurrency решавају овај проблем на нивоу језика: корутина се отказује при уништењу Activity-ја без ручног управљања.

Шаблонски код у Java — извор грешака при ручном писању equals/hashCode, Parcelable имплементација и ViewHolder-а за RecyclerView. Android KTX библиотеке и Jetpack Compose су оријентисани на Kotlin. Нови Android API-ји (Room, Navigation, Compose) објављују примере на Kotlin подразумевано, иако Java верзије постоје.

Често постављана питања

Шта је Java?

Java — објектно-оријентисани програмски језик од Sun Microsystems (1995), који ради на виртуелној машини JVM. Био је главни језик Android SDK-а до 2019. године. Користи се у мобилном развоју за легаси пројекте, серверски део (Spring) и корпоративне апликације. Одликује се строгом типизацијом, аутоматским сакупљањем смећа и вишеплатформношћу бајт-кода.

Зашто се Java сматра легаси језиком за Android?

Google је прогласио Kotlin приоритетним језиком за Android 2019. године. Нове библиотеке AndroidX, Jetpack Compose, препоруке за архитектуру и документација подразумевано се дају на Kotlin. Java остаје потпуно подржана, али API-ји се дизајнирају са Kotlin-first приступом. Java пројекти захтевају више шаблонског кода и не добијају нове језичке могућности први.

Која верзија Java се користи у Android-у?

Android подржава Java 8 у потпуности, Java 11 — делимично са Android 12+, Java 17 — експериментално кроз D8 десахаринг. Android Gradle Plugin (AGP) 8.x преводи савремени бајт-код у компатибилан за старе API-је кроз desugar. Програмер може писати на Java 11+ користећи ламбде, Optional и DateTime API, али records и sealed classes су доступни само кроз D8.

По чему се Java разликује од Kotlin-а?

Kotlin захтева мање кода: data class замењује десетине линија Java boilerplate-а, null safety је уграђен у типове, корутине поједностављују асинхроност. Java нуди једноставнију синтаксу за почетнике, проверени екосистем библиотека и стабилне алате. Перформансе runtime-а су идентичне — оба се компајлирају у JVM бајт-код, који извршава Android ART.

Који IDE се користе за Java развој на Android-у?

Android Studio — стандардни IDE за Android развој са подршком за Java и Kotlin. Укључује емулатор, профилер (CPU, memory, network), Layout Inspector, APK Analyzer. IntelliJ IDEA је погодан за серверску Java. Eclipse ADT је застарео и не подржава га Google. Android Studio такође пружа алате за миграцију Java кода у Kotlin кроз уграђени конвертер.

Резиме

  • Java — објектно-оријентисани језик који је био главни језик Android SDK-а током 11 година
  • JVM бајт-код се преводи у DEX кроз d8 и извршава га Android Runtime (ART) са GC
  • Android подржава Java 8-17 са десахарингом кроз D8/R8 за уназад компатибилност
  • Java Activity — основна компонента са животним циклусом onCreate → onStart → onResume → onPause → onStop → onDestroy
  • Gradle — систем изградње са подршком за Java 17, AGP 8.x и build variants
  • Kotlin — наследник Java са истим бајт-кодом, али модерном синтаксом и null safety
  • Java легаси чини ~35% Android пројеката, Google наставља подршку оба језика

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође