Java, on yıldan fazla bir süre Android SDK'nın birincil dili olan nesne yönelimli bir programlama dilidir. Google'ın resmi olarak Kotlin'e geçişine rağmen, Java ekosistemin önemli bir parçası olmaya devam ediyor: eski projeler, kurumsal uygulamalar ve Google Play'deki milyonlarca satır kod Java'da çalışmaya devam ediyor. JetBrains Developer Ecosystem raporuna (2025) göre, Android projelerinin yaklaşık %35'i hala Java kullanıyor. Güncel trendler hakkında daha fazla bilgi için JetBrains resmi raporuna bakın.
Önemli Noktalar
Java, Sun Microsystems tarafından 1995 yılında oluşturulan genel amaçlı bir programlama dilidir. Ana prensip "Write Once, Run Anywhere"dır: derlenmiş Java bayt kodu, JVM sanal makinesi kurulu herhangi bir platformda çalışır. Mobil geliştirme bağlamında Java, 2008'de Google tarafından yayınlanan Android SDK'nın ilk resmi dili oldu.
Java mimarisi üç bileşene dayanır: JDK (Java Development Kit) — geliştirici araç seti, JRE (Java Runtime Environment) — çalışma zamanı ortamı ve JVM (Java Virtual Machine) — sanal makine. Android, kendi JVM uygulaması olan Android Runtime (ART) kullanır ve sürüm 5.0'da (Lollipop) Dalvik'in yerini almıştır. ART, dx/d8 yardımcı programı aracılığıyla Java bayt kodundan derlenen DEX bayt kodunu yürütür.
Java'nın temel bir özelliği, Garbage Collector (GC) aracılığıyla otomatik bellek yönetimidir. Geliştiricinin belleği açıkça serbest bırakması gerekmez — GC kullanılmayan nesneleri izler ve kaldırır. Android ART'de, mobil cihazların sınırlı kaynakları için optimize edilmiş Concurrent Mark Sweep (CMS) ve Generational GC kullanılır. Bu, geliştiricinin yükünü azaltır, ancak UI iş parçacığında çöp toplama sırasında "gecikmelere" neden olabilir.
Android, her yeni işletim sistemi sürümüyle genişleyen Java API'nin bir alt kümesini destekler. Android 12 (API 31), değişken yakalamalı lambdalar, JPMS modül sistemi ve java.net.http HTTP istemcisi dahil olmak üzere Java 11 desteği ekledi. Android 14 (API 34), D8/R8 desugaring yoluyla Java 17 için deneysel destek getirdi — bazı özellikler (records, sealed classes) eski sürümler için uyumlu koda çevrilir.
| Java Sürümü | Android API (min) | Android Sürümü | Temel Özellikler |
|---|---|---|---|
| Java 7 | API 19 | 4.4 KitKat | try-with-resources, multi-catch |
| Java 8 | API 24 | 7.0 Nougat | Lambda, 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 derleyicisi, dex yardımcı programı (d8), aapt (Asset Packaging Tool), öykünücü ve android.* ile java.* kitaplıklarını içerir. Geliştirici Java'da kod yazar, .class dosyalarına (JVM bayt kodu) derler, ardından d8 bunları .dex dosyalarına (Dalvik Executable) dönüştürür ve kaynaklar ve AndroidManifest.xml ile birlikte APK'ye paketlenir.
Gradle, Android proje derleme sistemidir. build.gradle (Groovy) veya build.gradle.kts (Kotlin DSL) dosyası bağımlılıkları, SDK sürümlerini, çeşnitleri ve imzaları tanımlar. Android Gradle Plugin (AGP) sürüm 8.x, desugar'ı otomatikleştirir — modern Java özelliklerinin geriye uyumlu koda çevrilmesi. Örneğin, java.time.LocalDate, geliştiricinin kaynak kodunda değişiklik yapılmadan API 21+ uyumlu koda dönüştürülür.
// Java'da basit 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("Hello from Java!");
}
// Düğme tıklamasını işleme yöntemi
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Button clicked");
}
}MainActivity sınıfı, AppCompatActivity'yi genişletir — geriye uyumluluk için AndroidX'ten bir temel sınıf. onCreate yöntemi, Activity oluşturulduğunda çağrılır; burada setContentView aracılığıyla düzen ayarlanır. findViewById, bir Java değişkenini XML düzenindeki bir öğeye bağlar. onButtonClick yöntemi, XML'deki android:onClick özelliği aracılığıyla düğmeye bağlanır.
Java'da Activity yaşam döngüsü bir geri çağrı dizisidir: onCreate → onStart → onResume (etkin), onPause → onStop → onDestroy (sonlandırma). Geliştirici, kaynakları yönetmek için bu yöntemleri geçersiz kılar. onCreate — başlatma, onPause — veri kaydetme, onDestroy — kaynakları serbest bırakma. Android, ekran döndürme, arka plana geçme ve telefon araması alma sırasında bu yöntemleri çağırır.
// Durum yönetimiyle Activity yaşam döngüsü
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) {
// Tanımlayıcıya göre veri yükleme
}
}onSaveInstanceState yöntemi, ekran döndürme veya görev değiştirme sırasında Activity durumunu kaydeder. Bundle, anahtar-değer çiftleri içerir — basit türler, Parcelable veya Serializable nesneler. onRestoreInstanceState, kaydedilen durumu geri yükler. Bu desen Android için kritiktir, çünkü sistem bellek yetersizliğinde Activity'yi yok edebilir ve kullanıcı geri döndüğünde geri yükleyebilir.
Java sözdizimi C benzeri, güçlü türde, nesne yönelimlidir. Her .java dosyası, adı dosya adıyla eşleşen bir genel sınıf içerir. Java, sınıflar dışında işlevleri desteklemez — her şey bir yöntemdir. Giriş noktası, konsol uygulamaları için statik yöntem public static void main(String[] args) veya mobil için Android Activity yaşam döngüsü yöntemleridir.
Java, türleri ilkel (int, double, boolean, char, byte, short, long, float) ve başvuru türleri (sınıflar, arayüzler, diziler, enum) olarak ayırır. İlkeller yığında depolanır ve değerle iletilir. Nesneler öbektedir, başvuruyla iletilir. Otomatik kutulama (autoboxing), bir ilkeli otomatik olarak sarmalayıcı nesneye (Integer, Double, Boolean) dönüştürür, ancak ekstra nesneler oluşturur — Android'de bu UI performansı için kritiktir.
// Java veri türleri ve yapıları örnekleri
public class DataTypes {
// İlkeller
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// Başvuru türleri
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Jeneriklerle yöntem
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Sabit değer kümesi için Enum
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Jenerikler List<T>, koleksiyonlar için tür güvenliği sağlar. getFirst yöntemi herhangi bir türde öğe döndürür — belirli tür, çağrı noktasında belirlenir. Enum Status, sabit bir sabit kümesiyle bir sınıfa derlenir, her örnek bir tektir. Android'de, bellek tüketimi nedeniyle enum daha az kullanılır: ProGuard/R8, mümkün olduğunda enum'u int sabitlerine optimize eder.
Android geliştirme için Java ve Kotlin karşılaştırması, Google'ın Kotlin'i öncelikli dil ilan ettiği 2019'dan beri ana konulardan biri olmuştur. Kotlin, Java ile tamamen uyumludur — her ikisi de JVM bayt koduna derlenir, birbirlerini çağırabilir ve aynı kitaplıkları kullanabilir. Ancak, kod yazma yaklaşımları önemli ölçüde farklılık gösterir.
Kotlin, Java'nın ayrıntılılığını ortadan kaldırır: data class, getter, setter, equals, hashCode, toString ve copy içeren bir Java sınıfının 50+ satırının yerini alır. Boş güvenliği, Kotlin'in tür sistemine yerleşiktir — NullPointerException pratikte imkansızdır. Genişletme işlevleri, kalıtım olmadan varolan sınıflara yöntem eklemeye izin verir. Akıllı Dönüştürmeler, denetimden sonra türleri otomatik olarak dönüştürür.
| Yön | Java | Kotlin |
|---|---|---|
| Boş güvenliği | @Nullable / @NonNull ek açıklamaları | String? / String — yerleşik |
| Data class | Lombok ile 50+ satır | data class User(val name: String) |
| Genişletme | Statik yardımcı sınıflar | fun String.isEmail(): Boolean |
| Coroutine | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Lambda | FunctionalInterface + ::method | Varsayılan olarak lambda |
| DI ek açıklamaları | @Inject, @Module, @Provides | Benzer, ancak daha az kod |
Performans açısından, Java ve Kotlin aynıdır — her ikisi de Android ART tarafından aynı şekilde yürütülen JVM bayt koduna derlenir. Fark APK boyutundadır: Kotlin, kotlin-stdlib kitaplığı için ~200-400 KB ekler. Java projeleri, ek çalışma zamanı olmaması nedeniyle daha küçük APK boyutuna sahiptir, ancak Java Stream API ve Optional kullanıldığında, desugaring nedeniyle APK boyutu artabilir.
Android için Java geliştirici araçları Android Studio, Gradle, profil oluşturucu ve öykünücüyü içerir. Android Studio, IntelliJ IDEA Community tabanlı resmi IDE'dir; Java otomatik tamamlama düzenleyicisi, kod çözümleyici (lint), yeniden düzenleme ve görsel düzen düzenleyicisi (Layout Editor) içerir.
Android Gradle Plugin (AGP) sürüm 8.x derlemeyi yönetir: sınıflara Java derlemesi, desugaring, ProGuard/R8 küçültme, APK/AAB paketleme. R8, ProGuard'ın yerini alan güncellenmiş bir desugaring ve karartıcıdır. Derleme varyantları (debug/release + product flavors) build.gradle aracılığıyla yapılandırılır. Gradle Daemon, önbellekleme yoluyla sonraki derlemeleri hızlandırır.
// build.gradle (app) — Java modülü yapılandırması
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 bloğu, derleme için Java sürümünü belirtir — Java 17, AGP 8.x ile kullanılabilir. Minimum SDK (minSdk), uygulamanın çalıştığı minimum Android sürümünü belirler. Target SDK, uygulamanın test edildiği sürümdür. compileSdk ve targetSdk arasındaki fark: compileSdk derleme için API'dir, targetSdk çalışma zamanı davranışıdır.
Android'deki Java sınırlamaları, Google'ın Kotlin'e geçişine yol açtı. NullPointerException, Java Android uygulamalarında en yaygın istisnadır çünkü tür sistemi boş olabilir ve boş olmayan başvuruları ayırt etmez. Google, androidx.annotation paketinden @Nullable ve @NonNull ek açıklamalarını önerir, ancak derleyici bunları denetlemez — yalnızca lint denetler.
Coroutine'lerin olmaması başka bir sınırlamadır: Java'da zaman uyumsuz işlemler geri çağrılar, AsyncTask (API 30'dan itibaren kullanımdan kaldırıldı), ExecutorService veya RxJava gerektirir. Bu, geri çağrı cehennemine ve ekran döndürme sırasında bellek sızıntılarına yol açar. Structured Concurrency ile Kotlin coroutine'leri bu sorunu dil düzeyinde çözer: Activity yok edildiğinde, manuel yönetim olmadan coroutine iptal edilir.
Java'daki kalıp kod, equals/hashCode, Parcelable uygulamaları ve RecyclerView için ViewHolder'ın manuel olarak yazılmasında hata kaynağıdır. Android KTX kitaplıkları ve Jetpack Compose, Kotlin'e yöneliktir. Yeni Android API'leri (Room, Navigation, Compose) varsayılan olarak Kotlin'de örnekler yayınlar, ancak Java sürümleri de mevcuttur.
Sıkça Sorulan Sorular
Java, Sun Microsystems (1995) tarafından geliştirilen, JVM sanal makinesinde çalışan nesne yönelimli bir programlama dilidir. 2019'a kadar Android SDK'nın birincil diliydi. Mobil geliştirmede eski projeler, sunucu tarafı (Spring) ve kurumsal uygulamalar için kullanılır. Güçlü tipleme, otomatik çöp toplama ve bayt kodunun platformlar arası çalışmasıyla karakterize edilir.
Google, 2019'da Kotlin'i Android için öncelikli dil ilan etti. Yeni AndroidX kitaplıkları, Jetpack Compose, mimari önerileri ve belgeler varsayılan olarak Kotlin'de sağlanır. Java tam olarak desteklenmeye devam eder, ancak API'ler Kotlin-first yaklaşımıyla tasarlanır. Java projeleri daha fazla kalıp kod gerektirir ve yeni dil özelliklerini ilk alan olmaz.
Android Java 8'i tam olarak, Java 11'i Android 12+'dan itibaren kısmen ve Java 17'yi D8 desugaring yoluyla deneysel olarak destekler. Android Gradle Plugin (AGP) 8.x, modern bayt kodunu desugar aracılığıyla eski API'ler için uyumlu koda çevirir. Geliştirici Java 11+'da yazabilir, lambda, Optional ve DateTime API kullanabilir, ancak records ve sealed classes yalnızca D8 aracılığıyla kullanılabilir.
Kotlin daha az kod gerektirir: data class, Java kalıp kodunun onlarca satırının yerini alır, boş güvenliği türlere yerleşiktir, coroutine'ler zaman uyumsuzluğu basitleştirir. Java, yeni başlayanlar için daha basit sözdizimi, kanıtlanmış bir kitaplık ekosistemi ve kararlı araçlar sunar. Çalışma zamanı performansı aynıdır — her ikisi de Android ART tarafından yürütülen JVM bayt koduna derlenir.
Android Studio, Java ve Kotlin desteğiyle Android geliştirme için standart IDE'dir. Öykünücü, profil oluşturucu (CPU, bellek, ağ), Layout Inspector, APK Analyzer içerir. IntelliJ IDEA, sunucu tarafı Java için uygundur. Eclipse ADT eski ve Google tarafından desteklenmiyor. Android Studio ayrıca, yerleşik dönüştürücü aracılığıyla Java kodunu Kotlin'e taşımak için araçlar da sağlar.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun