Java — on ildən çox Android SDK-nın əsas dili olmuş obyekt yönümlü proqramlaşdırma dilidir. Google-un rəsmi olaraq Kotlin-ə keçməsinə baxmayaraq, Java ekosistemin vacib hissəsi olaraq qalır: legacy layihələr, korporativ tətbiqlər və Google Play-də milyonlarla sətir kod Java ilə işləməyə davam edir. JetBrains Developer Ecosystem (2025) hesabatına görə, Android layihələrinin təqribən 35%-i hələ də Java-dan istifadə edir. Cari tendensiyalar haqqında daha ətraflı rəsmi JetBrains hesabatında oxuyun.
Əsas məqamlar
Java — 1995-ci ildə Sun Microsystems şirkəti tərəfindən yaradılmış ümumi təyinatlı proqramlaşdırma dilidir. Əsas prinsip — «Write Once, Run Anywhere»: kompilyasiya olunmuş Java bayt-kodu JVM virtual maşınının quraşdırıldığı istənilən platformada işləyir. Mobil inkişaf kontekstində Java, Google tərəfindən 2008-ci ildə buraxılmış Android SDK-nın ilk rəsmi dili oldu.
Java arxitekturası üç komponentə əsaslanır: JDK (Java Development Kit) — tərtibatçı alətləri dəsti, JRE (Java Runtime Environment) — icra mühiti və JVM (Java Virtual Machine) — virtual maşın. Android JVM-in öz tətbiqini — Android Runtime (ART) istifadə edir, o, 5.0 (Lollipop) versiyasında Dalvik-i əvəz etdi. ART dx/d8 vasitəsilə Java bayt-kodundan kompilyasiya olunan DEX bayt-kodunu icra edir.
Java-nın əsas xüsusiyyəti — Garbage Collector (GC) vasitəsilə avtomatik yaddaş idarəetməsi. Tərtibatçı açıq şəkildə yaddaşı boşaltmalı deyil — GC istifadə olunmayan obyektləri izləyir və silir. Android ART-də mobil cihazların məhdud resurslarına uyğunlaşdırılmış Concurrent Mark Sweep (CMS) və Generational GC istifadə olunur. Bu, tərtibatçının yükünü azaldır, lakin UI axınında zibil yığımı zamanı «laglar» yarada bilər.
Android hər yeni ƏS versiyası ilə genişlənən Java API alt çoxluğunu dəstəkləyir. Android 12 (API 31) Java 11 dəstəyini əlavə etdi, o cümlədən dəyişənləri tutan lambdalar, modul JPMS sistemi və java.net.http HTTP-klienti. Android 14 (API 34) D8/R8 desaqarinqi vasitəsilə Java 17-nin eksperimental dəstəyini təqdim etdi — bəzi funksiyalar (records, sealed classes) köhnə versiyalar üçün uyğun koda tərcümə olunur.
| Java versiyası | Android API (min) | Android versiyası | Əsas funksiyalar |
|---|---|---|---|
| Java 7 | API 19 | 4.4 KitKat | try-with-resources, multi-catch |
| Java 8 | API 24 | 7.0 Nougat | Lambdalar, Stream API, Optional |
| Java 11 | API 31 | 12 | HTTP Client, Local-Variable Syntax |
| Java 17 | API 34 | 14 | Records, Sealed Classes (D8) |
Android SDK Java kompilyatoru, dex (d8) vasitəsi, aapt (Asset Packaging Tool), emulator və android.* və java.* kitabxanalarını ehtiva edir. Tərtibatçı Java dilində kod yazır, onu .class fayllarına (JVM bayt-kodu) kompilyasiya edir, sonra d8 onları .dex fayllarına (Dalvik Executable) çevirir, bunlar resurslar və AndroidManifest.xml ilə birlikdə APK-ya yığılır.
Gradle — Android layihəsinin qurma sistemi. build.gradle (Groovy) və ya build.gradle.kts (Kotlin DSL) faylı asılılıqları, SDK versiyalarını, flavor-ları (product flavors) və imzaları təsvir edir. Android Gradle Plugin (AGP) 8.x versiyası desaqarinqi avtomatlaşdırır — müasir Java funksiyalarının geriyə uyğun koda tərcüməsi. Məsələn, java.time.LocalDate tərtibatçının mənbə kodunda dəyişiklik olmadan API 21+ ilə uyğun koda çevrilir.
// Sadə Android Activity Java-da
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-dan Salam!");
}
// Düymə klikini idarə etmək üçün metod
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Düymə klikləndi");
}
}MainActivity sinifi geriyə uyğunluq üçün AndroidX-dən AppCompatActivity — əsas sinifini miras alır. onCreate metodu Activity yaradıldıqda çağırılır, orada setContentView vasitəsilə layout qurulur. findViewById Java dəyişənini XML layoutundan elementlə əlaqələndirir. onButtonClick metodu XML-də android:onClick atributu vasitəsilə düyməyə bağlanır.
Activity həyat dövrü Java-da — callback-lər ardıcıllığı: onCreate → onStart → onResume (aktiv), onPause → onStop → onDestroy (bitmə). Tərtibatçı resursları idarə etmək üçün bu metodları ləğv edir. onCreate — inisializasiya, onPause — məlumatların saxlanması, onDestroy — resursların boşaldılması. Android bu metodları ekran döndərmə, fon rejiminə keçmə və zəng qəbulu zamanı çağırır.
// Activity həyat dövrü vəziyyətin idarə edilməsi ilə
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) {
// Məlumatların identifikator üzrə yüklənməsi
}
}onSaveInstanceState metodu ekran döndərmə və ya tapşırıqların dəyişdirilməsi zamanı Activity vəziyyətini saxlayır. Bundle açar-dəyər cütlərini — sadə tipləri, Parcelable və ya Serializable obyektləri ehtiva edir. onRestoreInstanceState saxlanmış vəziyyəti bərpa edir. Bu nümunə Android üçün kritikdir, çünki sistem yaddaş çatışmazlığında Activity-ni məhv edə və istifadəçi qayıtdıqda bərpa edə bilər.
Java sintaksisi — C oxşar, ciddi tipli, obyekt yönümlüdür. Hər .java faylında bir public sinif var, onun adı faylın adı ilə üst-üstə düşür. Java siniflərdən kənar funksiyaları dəstəkləmir — hər şey metoddur. Giriş nöqtəsi — konsol tətbiqləri üçün statik public static void main(String[] args) metodu və ya mobil üçün Android Activity həyat dövrü metodları.
Java tipləri primitivlərə (int, double, boolean, char, byte, short, long, float) və istinad tiplərinə (siniflər, interfeyslər, massivlər, enum) ayırır. Primitivlər stekdə saxlanılır və dəyərlə ötürülür. Obyektlər — yığında, istinadla ötürülür. Avtomatik qablaşdırma (autoboxing) primitivi avtomatik olaraq qablaşdırıcı obyektə (Integer, Double, Boolean) çevirir, lakin əlavə obyektlər yaradır — Android-də bu UI performansı üçün kritikdir.
// Java məlumat tipləri və strukturları nümunələri
public class DataTypes {
// Primitivlər
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// İstinad tipləri
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Generics ilə metod
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Sabit dəst dəyərləri üçün Enum
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Generiklər List<T> kolleksiyaların tip təhlükəsizliyini təmin edir. getFirst metodu istənilən tipdə element qaytarır — konkret tip çağırış nöqtəsində müəyyən edilir. Enum Status sabit dəst sabitləri olan sinifə kompilyasiya olunur, hər bir nümunə singletondur. Android-də enum yaddaş istehlakına görə daha az istifadə olunur: ProGuard/R8 mümkün olduqda enum-ı int sabitlərinə optimallaşdırır.
Java və Kotlin müqayisəsi Android inkişafı üçün — Google-un Kotlin-i prioritet dil elan etdiyi 2019-cu ildən əsas mövzulardan biridir. Kotlin Java ilə tam uyğundur — hər ikisi JVM bayt-koduna kompilyasiya olunur, bir-birini çağıra bilər və eyni kitabxanalardan istifadə edə bilər. Bununla belə, kod yazma yanaşmaları köklü şəkildə fərqlənir.
Kotlin Java-nın uzunçuluğunu aradan qaldırır: data class getter, setter, equals, hashCode, toString və copy ilə Java sinfinin 50+ sətirini əvəz edir. Null safety Kotlin tip sisteminə daxil edilmişdir — NullPointerException praktiki olaraq mümkün deyil. Extension funksiyalar mövcud siniflərə miras olmadan metod əlavə etməyə imkan verir. Smart Casts yoxlamadan sonra tipləri avtomatik çevirir.
| Aspekt | Java | Kotlin |
|---|---|---|
| Null safety | @Nullable / @NonNull annotasiyaları | String? / String — daxili |
| Data class | 50+ sətir Lombok ilə | data class User(val name: String) |
| Extension | Statik yardımçı siniflər | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Lambdalar | FunctionalInterface + ::method | Lambdalar defolt olaraq |
| DI annotasiyaları | @Inject, @Module, @Provides | Eyni, lakin daha az kod |
Performans baxımından Java və Kotlin eynidir — hər ikisi Android ART-in eyni şəkildə icra etdiyi JVM bayt-koduna kompilyasiya olunur. APK ölçüsündə fərq: Kotlin kotlin-stdlib kitabxanası üçün ~200-400 KB əlavə edir. Java layihələri əlavə runtime olmaması səbəbindən daha kiçik APK ölçüsünə malikdir, lakin Java Stream API və Optional istifadə edərkən APK ölçüsü desaqarinq səbəbindən arta bilər.
Java tərtibatçısının alətləri Android üçün Android Studio, Gradle, profiler və emulatoru əhatə edir. Android Studio — IntelliJ IDEA Community-ə əsaslanan rəsmi IDE, Java avtomatik tamamlama, kod analizatoru (lint), refaktorinq və vizual layout redaktoru (Layout Editor) daxildir.
Android Gradle Plugin (AGP) 8.x versiyası qurmanı idarə edir: Java-nın siniflərə kompilyasiyası, desaqarinq, ProGuard/R8 minifikasiyası, APK/AAB-ya yığılma. R8 — ProGuard-ı əvəz edən təkmilləşdirilmiş desaqarinq və obfuskator. Build variants (debug/release + product flavors) build.gradle vasitəsilə konfiqurasiya olunur. Gradle Daemon keşləmə hesabına sonrakı qurmaları sürətləndirir.
// build.gradle (app) — Java modulunun konfiqurasiyası
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 bloku kompilyasiya üçün Java versiyasını göstərir — Java 17 AGP 8.x-dən etibarən mövcuddur. Minimal SDK (minSdk) tətbiqin işlədiyi minimum Android versiyasını müəyyən edir. Target SDK — tətbiqin sınaqdan keçirildiyi versiya. compileSdk və targetSdk arasında fərq: compileSdk — kompilyasiya üçün API, targetSdk — runtime davranışı.
Java-nın məhdudiyyətləri Android-də Google-un Kotlin-ə keçməsinə səbəb oldu. NullPointerException — Java-Android tətbiqlərində ən çox rast gəlinən istisnadır, çünki tip sistemi nullable və non-null istinadları fərqləndirmir. Google androidx.annotation paketindən @Nullable və @NonNull annotasiyalarını tövsiyə edir, lakin kompilyator onları yoxlamır — bunu yalnız lint edir.
Korutinlərin olmaması — daha bir məhdudiyyət: Java-da asinxron əməliyyatlar callback-lər, AsyncTask (API 30-dan etibarən deprecated), ExecutorService və ya RxJava tələb edir. Bu, callback hell və ekran döndərmə zamanı yaddaş sızmalarına gətirib çıxarır. Kotlin korutinləri Structured Concurrency ilə bu problemi dil səviyyəsində həll edir: korutin Activity məhv edildikdə əl ilə idarə olmadan ləğv edilir.
Java-da şablon kodu — equals/hashCode, Parcelable tətbiqləri və RecyclerView üçün ViewHolder-in əl ilə yazılması zamanı səhv mənbəyidir. Android KTX kitabxanaları və Jetpack Compose Kotlin-ə yönəldilmişdir. Yeni Android API-ləri (Room, Navigation, Compose) defolt olaraq Kotlin nümunələri dərc edir, baxmayaraq ki, Java versiyaları mövcuddur.
Tez-tez verilən suallar
Java — Sun Microsystems (1995) tərəfindən yaradılmış, JVM virtual maşınında işləyən obyekt yönümlü proqramlaşdırma dilidir. 2019-cu ilə qədər Android SDK-nın əsas dili idi. Legacy layihələr, server hissəsi (Spring) və korporativ tətbiqlər üçün mobil inkişafda istifadə olunur. Ciddi tipləşdirmə, avtomatik zibil yığımı və bayt-kodun çoxplatformalılığı ilə fərqlənir.
Google 2019-cu ildə Kotlin-i Android üçün prioritet dil elan etdi. Yeni AndroidX kitabxanaları, Jetpack Compose, arxitektura tövsiyələri və sənədlər defolt olaraq Kotlin-də verilir. Java tam dəstəklənən olaraq qalır, lakin API-lər Kotlin-first yanaşması ilə dizayn olunur. Java layihələri daha çox şablon kodu tələb edir və yeni dil imkanlarını ilk alan olmur.
Android Java 8-i tam, Java 11-i qismən Android 12+ ilə, Java 17-ni isə D8 desaqarinq vasitəsilə eksperimental olaraq dəstəkləyir. Android Gradle Plugin (AGP) 8.x desugar vasitəsilə müasir bayt-kodu köhnə API-lər üçün uyğun koda tərcümə edir. Tərtibatçı lambda, Optional və DateTime API-dən istifadə edərək Java 11+-da yaza bilər, lakin records və sealed classes yalnız D8 vasitəsilə mövcuddur.
Kotlin daha az kod tələb edir: data class Java boilerplate-in onlarla sətirini əvəz edir, null safety tiplərə daxildir, korutinlər asinxronluğu sadələşdirir. Java yeni başlayanlar üçün daha sadə sintaksis, sınaqdan keçmiş kitabxana ekosistemi və sabit alətlər təklif edir. Runtime performansı eynidir — hər ikisi Android ART tərəfindən icra olunan JVM bayt-koduna kompilyasiya olunur.
Android Studio — Java və Kotlin dəstəyi ilə Android inkişafı üçün standart IDE. Emulator, profiler (CPU, memory, network), Layout Inspector, APK Analyzer daxildir. IntelliJ IDEA server Java üçün uyğundur. Eclipse ADT köhnəlmişdir və Google tərəfindən dəstəklənmir. Android Studio həmçinin daxili konvertor vasitəsilə Java kodunu Kotlin-ə miqrasiya etmək üçün alətlər təqdim edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun