Java, 1990'ların ortasında Sun Microsystems tarafından geliştirilen, bugün Oracle çatısı altında sürdürülen genel amaçlı, nesne yönelimli bir programlama dilidir. En belirgin özelliği "bir kez yaz, her yerde çalıştır" yaklaşımıdır: kaynak kod, farklı işletim sistemlerinde aynı davranışı gösteren bir ara koda derlenir. Bu yazıda Java'nın ne olduğunu, nasıl çalıştığını ve nerede kullanıldığını dengeli ve teknik biçimde açıklıyoruz.

Java Nedir?

Java; sınıf tabanlı, nesne yönelimli ve statik tipli bir programlama dilidir. Kaynak kodu doğrudan makine koduna değil, platformdan bağımsız bir ara biçim olan bytecode'a derlenir. Bu bytecode, hedef sistemdeki Java Sanal Makinesi (JVM) tarafından çalıştırılır. Böylece aynı derlenmiş program, JVM'in bulunduğu her işletim sisteminde teorik olarak değişiklik gerektirmeden çalışabilir.

Java'yı yalnızca bir dil olarak değil, bir platform olarak düşünmek daha doğrudur. Dilin kendisi, JVM ve zengin standart kütüphane bir araya geldiğinde, kurumsal sistemlerden mobil uygulamalara kadar geniş bir yelpazede kullanılabilen bütünsel bir ekosistem ortaya çıkar. Bu bütünlük, farklı ekiplerin ortak araçlar ve ortak kavramlarla çalışmasını kolaylaştırır ve büyük projelerde tutarlılığı korumaya yardımcı olur.

Kısa Tarihçe

Java, James Gosling önderliğindeki bir ekip tarafından Sun Microsystems'te tasarlandı ve 1995 yılında halka duyuruldu. Başlangıçta gömülü cihazlar için düşünülen dil, kısa sürede web ve kurumsal uygulama geliştirmenin merkezine yerleşti. 2010 yılında Oracle'ın Sun Microsystems'i satın almasıyla dilin geliştirilmesi Oracle'a geçti.

Java'nın referans uygulaması olan OpenJDK açık kaynaklıdır ve GPL lisansı altında dağıtılır. Oracle JDK'nin yanı sıra Eclipse Temurin (Adoptium), Amazon Corretto ve Azul Zulu gibi farklı sağlayıcıların OpenJDK tabanlı dağıtımları da yaygın olarak kullanılır.

Java Nasıl Çalışır? Derleme ve JVM

Java'nın çalışma modeli, derleme ve yorumlamayı birleştiren bir yaklaşıma dayanır. Süreci şu adımlarla özetleyebiliriz:

  • Kaynak kod: Geliştirici, .java uzantılı dosyalar yazar.
  • Derleme: javac derleyicisi kaynağı .class uzantılı bytecode'a çevirir.
  • Sınıf yükleme: JVM, ClassLoader aracılığıyla gerekli sınıfları belleğe alır.
  • Çalıştırma: JVM bytecode'u yorumlar; sık çalışan bölümler JIT (Just-In-Time) derleyici ile makine koduna dönüştürülerek hızlandırılır.
  • Bellek yönetimi: Kullanılmayan nesneler otomatik olarak çöp toplayıcı (Garbage Collector) tarafından temizlenir.

Bu katmanlı yapı sayesinde geliştirici, bellek ayırma ve serbest bırakma gibi düşük seviyeli işlerle genellikle ilgilenmez. JVM'in JIT derleyicisi, uzun süre çalışan uygulamalarda yorumlanan koda göre belirgin performans kazancı sağlayabilir.

JDK, JRE ve JVM Farkı

BileşenAçılımıİçeriğiKime yönelik
JVMJava Virtual MachineBytecode'u yorumlar ve çalıştırırÇalışma zamanı çekirdeği
JREJava Runtime EnvironmentJVM + standart kütüphanelerUygulamayı çalıştıranlar
JDKJava Development KitJRE + derleyici (javac) ve araçlarGeliştiriciler

Temel Dil Özellikleri

  • Nesne yönelimli: Sınıf, nesne, kalıtım, çok biçimlilik (polymorphism) ve kapsülleme temel kavramlardır.
  • Statik tipleme: Değişken tipleri derleme aşamasında denetlenir; bu, birçok hatanın erken yakalanmasına yardımcı olur.
  • Otomatik bellek yönetimi: Çöp toplama sayesinde bellek sızıntısı riski azalır.
  • Çoklu iş parçacığı (multithreading): Dil ve kütüphane düzeyinde eşzamanlılık desteği vardır.
  • Geniş standart kütüphane: Koleksiyonlar, giriş/çıkış, ağ ve tarih-saat için hazır API'ler sunar.
  • Geriye dönük uyumluluk: Eski Java kodu genellikle yeni sürümlerde de çalışacak şekilde tasarlanır.

Basit Bir Java Örneği

Aşağıdaki klasik "Merhaba Dünya" örneği, Java'nın sınıf tabanlı yapısını ve main giriş noktasını gösterir:

java
public class Merhaba {
    public static void main(String[] args) {
        System.out.println("Merhaba, Dunya!");
    }
}

Bu dosya Merhaba.java olarak kaydedilir, javac Merhaba.java ile derlenir ve java Merhaba komutuyla çalıştırılır. Nesne yönelimli yaklaşımı görmek için küçük bir sınıf örneği de verelim:

java
public class Kullanici {
    private String ad;

    public Kullanici(String ad) {
        this.ad = ad;
    }

    public String selamla() {
        return "Merhaba, " + ad;
    }

    public static void main(String[] args) {
        Kullanici k = new Kullanici("Ayse");
        System.out.println(k.selamla());
    }
}

Java Nerede Kullanılır?

Java, olgun ekosistemi ve kararlılığı nedeniyle özellikle uzun ömürlü, büyük ölçekli sistemlerde tercih edilir. Yüksek eşzamanlılık gerektiren ve yıllarca bakımı sürdürülecek uygulamalarda öngörülebilir davranışı önemli bir avantaj sağlar. Yaygın kullanım alanları şunlardır:

  • Kurumsal arka uç sistemleri: Bankacılık, sigorta ve büyük ölçekli web servisleri.
  • Android uygulamaları: Android platformu tarihsel olarak Java diline yakın çalışır; günümüzde Kotlin de birinci sınıf desteğe sahiptir.
  • Büyük veri araçları: Apache Hadoop, Apache Kafka ve Apache Spark gibi projeler JVM üzerinde çalışır.
  • Web uygulamaları: Spring ve Jakarta EE gibi çerçevelerle sunucu tarafı geliştirme.
  • Gömülü ve kart sistemleri: Java Card gibi özel platformlar.

Ekosistem ve Popüler Çerçeveler

Java'nın gücünün büyük kısmı çevresindeki araç ve kütüphane zenginliğinden gelir. Öne çıkan bazı bileşenler:

KategoriÖrneklerKullanım amacı
Web/Kurumsal çerçeveSpring, Jakarta EE, QuarkusArka uç servisleri ve API'ler
Yapı (build) araçlarıMaven, GradleBağımlılık ve derleme yönetimi
TestJUnit, MockitoBirim ve entegrasyon testleri
Veri erişimiHibernate, JPANesne-ilişkisel eşleme (ORM)

Avantajları ve Sınırları

Java'yı değerlendirirken güçlü yönlerini ve dikkat edilmesi gereken noktaları birlikte görmek yararlıdır.

Güçlü yönlerDikkat edilmesi gerekenler
Platform bağımsızlığı (JVM)JVM'in başlangıç ve bellek ayak izi bazı senaryolarda yüksektir
Olgun ekosistem ve geniş toplulukSöz dizimi bazı modern dillere göre daha ayrıntılı olabilir
Güçlü tip denetimi ve kararlılıkKüçük betik işleri için ağır kalabilir
Kurumsal düzeyde araç desteğiSürüm ve dağıtım (JDK sağlayıcısı) seçimi dikkat ister

Java Sürümleri ve LTS Kavramı

Java, düzenli bir sürüm takvimiyle geliştirilir ve her yeni sürümde dile küçük eklemeler yapılır. Sürümlerin bir kısmı LTS (Long-Term Support) olarak işaretlenir; bu sürümler daha uzun süre güvenlik ve hata düzeltmesi güncellemesi alır. Kurumsal projeler genellikle kararlılık için LTS sürümlerinde kalmayı tercih eder, çünkü uzun ömürlü sistemlerde sık sürüm yükseltmesi ek maliyet ve risk yaratabilir.

Yıllar içinde dile önemli iyileştirmeler eklenmiştir: var ile yerel değişken tip çıkarımı, kayıt (record) tipleri, örüntü eşleme (pattern matching), metin blokları ve sanal iş parçacıkları gibi özellikler dilin modern kullanımını kolaylaştırır. Yine de geriye dönük uyumluluk ilkesi gözetildiğinden, eski kod tabanları genellikle sorunsuz çalışmaya devam eder.

Bellek Yönetimi ve Çöp Toplama

Java'nın en belirleyici özelliklerinden biri otomatik bellek yönetimidir. Geliştirici nesneleri oluşturur, ancak artık erişilemeyen nesneleri elle serbest bırakmakla uğraşmaz; bu işi çöp toplayıcı (Garbage Collector) üstlenir. Bu yaklaşım, C ve C++ gibi dillerde sık karşılaşılan bellek sızıntısı ve serbest bırakılmış belleğe erişim gibi hataların büyük bölümünü ortadan kaldırır.

JVM, farklı iş yükleri için farklı çöp toplama stratejileri sunar. Kimi toplayıcılar düşük gecikmeye, kimileri yüksek verime odaklanır. Doğru toplayıcı ve bellek ayarları, özellikle yüksek trafikli sunucu uygulamalarında yanıt süresini ve kararlılığı belirgin biçimde etkileyebilir. Bu nedenle üretim ortamlarında bellek davranışının izlenmesi iyi bir alışkanlıktır.

Java Öğrenmeye Nasıl Başlanır?

  • Güncel bir JDK dağıtımı kurun (OpenJDK tabanlı bir sürüm iyi bir başlangıçtır).
  • IntelliJ IDEA, Eclipse veya VS Code gibi bir geliştirme ortamı seçin.
  • Temel söz dizimi, nesne yönelimli kavramlar ve koleksiyonlar ile başlayın.
  • Küçük konsol uygulamalarından web servislerine doğru kademeli ilerleyin.
  • Maven veya Gradle ile bağımlılık yönetimini erken öğrenin.

Java Neden Hâlâ Yaygın?

Onlarca yıldır kullanımda olmasına rağmen Java, birçok yeni dilin çıkmasına karşın kurumsal dünyada güçlü konumunu korur. Bunun birkaç somut nedeni vardır. İlki, dev ölçekli kod tabanlarının ve bunları çalıştıran ekiplerin varlığıdır; yıllar içinde yazılmış milyonlarca satır kodun taşınması pahalı ve risklidir. İkincisi, olgun araç zinciri ve zengin kütüphane desteğidir: bir sorunla karşılaştığınızda çözümün büyük olasılıkla topluluk tarafından daha önce ele alınmış olması, geliştirme maliyetini düşürür.

Üçüncü neden ise kararlılık ve öngörülebilirliktir. Java'nın geriye dönük uyumluluğa verdiği önem, uzun ömürlü sistemler kuran kurumlar için değerli bir güvencedir. JVM'in yalnızca Java değil, Kotlin, Scala ve Groovy gibi başka dilleri de barındırması, aynı çalışma zamanı üzerinde farklı yaklaşımların bir arada kullanılabilmesine olanak tanır. Bu esneklik, ekosistemin ömrünü uzatan etkenlerden biridir.

Diğer Dillerle Kısa Karşılaştırma

Java'yı ekosistemdeki diğer dillerle birlikte değerlendirmek, doğru aracı seçmeyi kolaylaştırır. Sunucu tarafı için Node.js Nedir? ve Python Nedir? yazıları farklı yaklaşımları gösterir. Söz dizimi ve platform açısından yakın bir dil arıyorsanız C# Nedir? yazısı iyi bir karşılaştırma sunar. Dillerin tümüne bütünsel bakmak için Programlama Dilleri Rehberi'ne göz atabilirsiniz.

Sık Sorulan Sorular

Java ücretsiz mi?

OpenJDK açık kaynaklıdır ve ücretsiz kullanılabilir. Eclipse Temurin, Amazon Corretto ve Azul Zulu gibi dağıtımlar da yaygın olarak ücretsiz sunulur. Oracle'ın kendi JDK dağıtımı için lisans koşulları sürümlere göre değişebildiğinden, kurumsal kullanımda güncel lisans metnini kontrol etmek gerekir.

Java ile JavaScript aynı şey mi?

Hayır. İki dil farklı tasarım hedeflerine ve çalışma ortamlarına sahiptir; isim benzerliği tarihsel pazarlama kaynaklıdır.

Android için Java mı Kotlin mi?

Her ikisi de Android'de kullanılabilir. Java uzun yıllardır kullanılıyor; Kotlin ise Google tarafından önerilen modern bir alternatif olarak birinci sınıf desteğe sahiptir. İki dil aynı projede birlikte de kullanılabilir.