Java — o'n yildan ortiq Android SDK-ning asosiy tili bo'lgan obyektga yo'naltirilgan dasturlash tilidir. Google-ning rasman Kotlin-ga o'tishiga qaramay, Java ekotizimning muhim qismi bo'lib qolmoqda: legacy loyihalar, korporativ ilovalar va Google Play-dagi millionlab kod qatorlari Java-da ishlashda davom etmoqda. JetBrains Developer Ecosystem (2025) hisobotiga ko'ra, Android loyihalarining taxminan 35% hali ham Java-dan foydalanadi. Joriy tendensiyalar haqida batafsil rasmiy JetBrains hisobotida o'qing.
Asosiy ma'lumotlar
Java — 1995-yilda Sun Microsystems kompaniyasi tomonidan yaratilgan umumiy maqsadli dasturlash tilidir. Asosiy prinsip — «Write Once, Run Anywhere»: kompilyatsiya qilingan Java bayt-kodi JVM virtual mashinasi o'rnatilgan har qanday platformada ishlaydi. Mobil ishlanma kontekstida Java, Google tomonidan 2008-yilda chiqarilgan Android SDK-ning birinchi rasmiy tiliga aylandi.
Java arxitekturasi uch komponentga asoslanadi: JDK (Java Development Kit) — dasturchi vositalari to'plami, JRE (Java Runtime Environment) — bajarish muhiti va JVM (Java Virtual Machine) — virtual mashina. Android JVM-ning o'z tatbiqidan — Android Runtime (ART) dan foydalanadi, u 5.0 (Lollipop) versiyasida Dalvik-ni almashtirdi. ART dx/d8 vositasida Java bayt-kodidan kompilyatsiya qilingan DEX bayt-kodini bajaradi.
Java-ning asosiy xususiyati — Garbage Collector (GC) orqali avtomatik xotira boshqaruvi. Dasturchi xotirani aniq bo'shatishi shart emas — GC foydalanilmayotgan obyektlarni kuzatadi va olib tashlaydi. Android ART-da mobil qurilmalarning cheklangan resurslariga moslashtirilgan Concurrent Mark Sweep (CMS) va Generational GC ishlatiladi. Bu dasturchi yukini kamaytiradi, ammo UI oqimida axlat yig'ish paytida «laglar» keltirib chiqarishi mumkin.
Android har bir yangi OT versiyasi bilan kengayadigan Java API to'plamini qo'llab-quvvatlaydi. Android 12 (API 31) Java 11 qo'llab-quvvatlashini qo'shdi, jumladan o'zgaruvchilarni tutuvchi lambdalar, modulli JPMS tizimi va java.net.http HTTP-klienti. Android 14 (API 34) D8/R8 desugarinqi orqali Java 17-ning eksperimental qo'llab-quvvatlashini taqdim etdi — ba'zi funksiyalar (records, sealed classes) eski versiyalar uchun mos kodga tarjima qilinadi.
| Java versiyasi | Android API (min) | Android versiyasi | Asosiy 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 kompilyatori, dex (d8) vositasi, aapt (Asset Packaging Tool), emulyator va android.* va java.* kutubxonalarini o'z ichiga oladi. Dasturchi Java-da kod yozadi, uni .class fayllariga (JVM bayt-kodi) kompilyatsiya qiladi, so'ngra d8 ularni .dex fayllariga (Dalvik Executable) aylantiradi, ular resurslar va AndroidManifest.xml bilan birga APK-ga qadoqlanadi.
Gradle — Android loyihasining qurish tizimi. build.gradle (Groovy) yoki build.gradle.kts (Kotlin DSL) fayli bog'liqliklarni, SDK versiyalarini, flavor-larni (product flavors) va imzolarni tavsiflaydi. Android Gradle Plugin (AGP) 8.x versiyasi desugarinqni avtomatlashtiradi — zamonaviy Java funksiyalarining orqaga mos kodga tarjimasi. Masalan, java.time.LocalDate dasturchi manba kodida o'zgarishlarsiz API 21+ bilan mos kodga aylanadi.
// Java-da oddiy Android Activity
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 Salom!");
}
// Tugma bosilishini qayta ishlash metodi
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Tugma bosildi");
}
}MainActivity sinfi orqaga moslik uchun AndroidX-dan AppCompatActivity — asosiy sinfini meros qiladi. onCreate metodi Activity yaratilganda chaqiriladi, unda setContentView orqali layout o'rnatiladi. findViewById Java o'zgaruvchisini XML layoutidagi element bilan bog'laydi. onButtonClick metodi XML-dagi android:onClick atributi orqali tugmachaga bog'langan.
Activity hayot aylanishi Java-da — callback-lar ketma-ketligi: onCreate → onStart → onResume (faol), onPause → onStop → onDestroy (tugash). Dasturchi resurslarni boshqarish uchun bu metodlarni bekor qiladi. onCreate — inisializatsiya, onPause — ma'lumotlarni saqlash, onDestroy — resurslarni bo'shatish. Android bu metodlarni ekran aylantirish, fon rejimiga o'tish va qo'ng'iroq qabul qilishda chaqiradi.
// Activity hayot aylanishi holatni boshqarish bilan
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) {
// Ma'lumotlarni identifikator bo'yicha yuklash
}
}onSaveInstanceState metodi ekran aylantirish yoki vazifalarni almashtirishda Activity holatini saqlaydi. Bundle kalit-qiymat juftliklarini — oddiy turlarni, Parcelable yoki Serializable obyektlarni o'z ichiga oladi. onRestoreInstanceState saqlangan holatni tiklaydi. Bu namuna Android uchun juda muhim, chunki tizim xotira yetishmasligida Activity-ni yo'q qilishi va foydalanuvchi qaytganda tiklashi mumkin.
Java sintaksisi — C-ga o'xshash, qattiq tipli, obyektga yo'naltirilgan. Har bir .java fayli bitta public sinfni o'z ichiga oladi, uning nomi fayl nomiga mos keladi. Java sinflardan tashqari funksiyalarni qo'llab-quvvatlamaydi — hamma narsa metoddir. Kirish nuqtasi — konsol ilovalari uchun statik public static void main(String[] args) metodi yoki mobil uchun Android Activity hayot aylanishi metodlari.
Java turlarni primitivlarga (int, double, boolean, char, byte, short, long, float) va havola turlariga (sinflar, interfeyslar, massivlar, enum) ajratadi. Primitivlar stekda saqlanadi va qiymat bilan uzatiladi. Obyektlar — yig'inda, havola bilan uzatiladi. Avtomatik o'rash (autoboxing) primitivni avtomatik ravishda o'rovchi obyektga (Integer, Double, Boolean) aylantiradi, lekin qo'shimcha obyektlar yaratadi — Android-da bu UI samaradorligi uchun juda muhim.
// Java ma'lumot turlari va tuzilmalari misollari
public class DataTypes {
// Primitivlar
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// Havola turlari
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Generics bilan metod
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Doimiy qiymatlar to'plami uchun Enum
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Generiklar List<T> to'plamlarning tip xavfsizligini ta'minlaydi. getFirst metodi istalgan turdagi elementni qaytaradi — aniq tur chaqiruv nuqtasida aniqlanadi. Enum Status doimiy qiymatlar to'plamiga ega sinfga kompilyatsiya qilinadi, har bir nusxa singletondir. Android-da enum xotira iste'moli tufayli kamroq ishlatiladi: ProGuard/R8 imkon qadar enum-ni int doimiylariga optimallashtiradi.
Java va Kotlin taqqoslashi Android dasturlash uchun — Google Kotlin-ni ustuvor til deb e'lon qilgan 2019-yildan beri asosiy mavzulardan biridir. Kotlin Java bilan to'liq mos keladi — ikkalasi ham JVM bayt-kodiga kompilyatsiya qilinadi, bir-birini chaqira oladi va bir xil kutubxonalardan foydalana oladi. Biroq, kod yozish yondashuvlari tubdan farq qiladi.
Kotlin Java-ning uzunligini bartaraf qiladi: data class getter, setter, equals, hashCode, toString va copy bilan Java sinfining 50+ qatorini almashtiradi. Null safety Kotlin tip tizimiga o'rnatilgan — NullPointerException amalda mumkin emas. Extension funksiyalar mavjud sinflarga merossiz metod qo'shish imkonini beradi. Smart Casts tekshirishdan so'ng turlarni avtomatik o'zgartiradi.
| Aspekt | Java | Kotlin |
|---|---|---|
| Null safety | @Nullable / @NonNull annotatsiyalari | String? / String — ichki |
| Data class | Lombok bilan 50+ qator | data class User(val name: String) |
| Extension | Statik yordamchi sinflar | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Lambdalar | FunctionalInterface + ::method | Lambdalar sukut bo'yicha |
| DI annotatsiyalari | @Inject, @Module, @Provides | Analog, lekin kamroq kod |
Samaradorlik nuqtai nazaridan Java va Kotlin bir xil — ikkalasi ham Android ART bir xilda bajaradigan JVM bayt-kodiga kompilyatsiya qilinadi. APK hajmidagi farq: Kotlin kotlin-stdlib kutubxonasi uchun ~200-400 KB qo'shadi. Java loyihalari qo'shimcha runtime yo'qligi sababli kichikroq APK hajmiga ega, ammo Java Stream API va Optional ishlatilganda APK hajmi desugarinq tufayli oshishi mumkin.
Java dasturchisi vositalari Android uchun Android Studio, Gradle, profiler va emulyatorni o'z ichiga oladi. Android Studio — IntelliJ IDEA Community-ga asoslangan rasmiy IDE, Java avtomatik to'ldirish, kod analizatori (lint), refaktorlash va vizual layout muharriri (Layout Editor) ni o'z ichiga oladi.
Android Gradle Plugin (AGP) 8.x versiyasi qurishni boshqaradi: Java-ni sinflarga kompilyatsiya qilish, desugarinq, ProGuard/R8 minifikatsiyasi, APK/AAB-ga qadoqlash. R8 — ProGuard-ni almashtiruvchi yaxshilangan desugarinq va obfuskator. Build variants (debug/release + product flavors) build.gradle orqali konfiguratsiya qilinadi. Gradle Daemon keshlash hisobiga keyingi qurishlarni tezlashtiradi.
// build.gradle (app) — Java modulining konfiguratsiyasi
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 bloki kompilyatsiya uchun Java versiyasini ko'rsatadi — Java 17 AGP 8.x dan boshlab mavjud. Minimal SDK (minSdk) ilova ishlaydigan minimal Android versiyasini belgilaydi. Target SDK — ilova sinovdan o'tkazilgan versiya. compileSdk va targetSdk o'rtasidagi farq: compileSdk — kompilyatsiya uchun API, targetSdk — runtime xatti-harakati.
Java-ning cheklovlari Android-da Google-ning Kotlin-ga o'tishiga sabab bo'ldi. NullPointerException — Java-Android ilovalarida eng keng tarqalgan istisno, chunki tip tizimi nullable va non-null havolalarni farqlamaydi. Google androidx.annotation paketidan @Nullable va @NonNull annotatsiyalarini tavsiya qiladi, ammo kompilyator ularni tekshirmaydi — buni faqat lint qiladi.
Korutinlarning yo'qligi — yana bir cheklov: Java-da asinxron operatsiyalar callback-lar, AsyncTask (API 30 dan boshlab eskirgan), ExecutorService yoki RxJava talab qiladi. Bu callback hell va ekran aylantirishda xotira oqishlariga olib keladi. Kotlin korutinlari Structured Concurrency bilan bu muammoni til darajasida hal qiladi: korutin Activity yo'q qilinganda qo'lda boshqarmasdan bekor qilinadi.
Java-da shablon kodi — equals/hashCode, Parcelable tatbiqlari va RecyclerView uchun ViewHolder-ni qo'lda yozishda xato manbai. Android KTX kutubxonalari va Jetpack Compose Kotlin-ga yo'naltirilgan. Yangi Android API-lari (Room, Navigation, Compose) sukut bo'yicha Kotlin misollarini nashr qiladi, garchi Java versiyalari mavjud bo'lsa ham.
Tez-tez so'raladigan savollar
Java — Sun Microsystems (1995) tomonidan yaratilgan, JVM virtual mashinasida ishlaydigan obyektga yo'naltirilgan dasturlash tilidir. 2019-yilgacha Android SDK-ning asosiy tili edi. Legacy loyihalar, server qismi (Spring) va korporativ ilovalar uchun mobil ishlanmada ishlatiladi. Qattiq tiplash, avtomatik axlat yig'ish va bayt-kodning ko'p platformaliligi bilan ajralib turadi.
Google 2019-yilda Kotlin-ni Android uchun ustuvor til deb e'lon qildi. Yangi AndroidX kutubxonalari, Jetpack Compose, arxitektura tavsiyalari va hujjatlar sukut bo'yicha Kotlin-da beriladi. Java to'liq qo'llab-quvvatlanadi, ammo API-lar Kotlin-first yondashuvi bilan ishlab chiqilgan. Java loyihalari ko'proq shablon kodini talab qiladi va yangi til imkoniyatlarini birinchi bo'lib olmaydi.
Android Java 8-ni to'liq, Java 11-ni qisman Android 12+ bilan, Java 17-ni D8 desugarinq orqali eksperimental qo'llab-quvvatlaydi. Android Gradle Plugin (AGP) 8.x desugar orqali zamonaviy bayt-kodni eski API-lar uchun mos kodga tarjima qiladi. Dasturchi lambda, Optional va DateTime API dan foydalanib Java 11+-da yozishi mumkin, ammo records va sealed classes faqat D8 orqali mavjud.
Kotlin kamroq kod talab qiladi: data class Java boilerplate-ning o'nlab qatorlarini almashtiradi, null safety turlarga o'rnatilgan, korutinlar asinxronlikni soddalashtiradi. Java yangi boshlovchilar uchun soddaroq sintaksis, sinovdan o'tgan kutubxona ekotizimi va barqaror vositalarni taklif qiladi. Runtime samaradorligi bir xil — ikkalasi ham Android ART tomonidan bajariladigan JVM bayt-kodiga kompilyatsiya qilinadi.
Android Studio — Java va Kotlin qo'llab-quvvatlashi bilan Android dasturlash uchun standart IDE. Emulyator, profiler (CPU, memory, network), Layout Inspector, APK Analyzer ni o'z ichiga oladi. IntelliJ IDEA server Java uchun mos keladi. Eclipse ADT eskirgan va Google tomonidan qo'llab-quvvatlanmaydi. Android Studio shuningdek, o'rnatilgan konvertor orqali Java kodini Kotlin-ga migratsiya qilish vositalarini taqdim etadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.