1. Java'ya Giris

Java’nin Temelleri

Ismail Kirbas

2026

1. Java’ya Giris

Bölüm 1: Java’ya Giris, Calisma Modeli ve Gelistirme Ortami

Pedagojik Not: Bu bölüm, Java programlama diline ilk adımınızı atmanızı sağlayacak temel kavramları içermektedir. Özellikle JVM, JRE ve JDK arasındaki farkları anlamak, ilerleyen bölümlerde karşılaşacağınız birçok kavramın temelini oluşturacaktır.

1.1 Java Nedir ve Neden Kullanılır?

Java’nın Tarihçesi ve Gelişimi

Java, 1991 yılında James Gosling ve ekibi tarafından Sun Microsystems’de geliştirilmeye başlanmıştır. Başlangıçta “Oak” (Meşe) adıyla anılan dil, daha sonra Java olarak yeniden adlandırılmıştır. Java’nın evrimi şu şekilde özetlenebilir:

  • Java 1.0 (1996): İlk resmi sürüm, temel kütüphaneler ve applet desteği
  • Java 2 (1998): Swing GUI kütüphanesi, Collections Framework
  • Java 5 (2004): Generics, annotations, enum, foreach döngüsü
  • Java 8 (2014): Lambda ifadeleri, Stream API, Optional sınıfı
  • Java 11 (2018): Uzun süreli destek (LTS) sürümü, HTTP Client API
  • Java 17 (2021): En son LTS sürümü, sealed classes, pattern matching

Önemli Bilgi: Java’nın en büyük avantajlarından biri geriye dönük uyumluluktur. 20 yıl önce yazılmış bir Java kodu, günümüzdeki en son Java sürümünde de çalışabilir.

Java’nın Kullanım Alanları

Java, çok geniş bir kullanım yelpazesine sahiptir:

  • Web Uygulamaları: Spring Framework, Java EE (Enterprise Edition) ile kurumsal web uygulamaları
  • Mobil Uygulamalar: Android işletim sistemi Java tabanlıdır
  • Kurumsal Yazılımlar: Bankacılık, sigorta, e-ticaret gibi sektörlerde yaygın
  • Büyük Veri ve Yapay Zeka: Apache Hadoop, Apache Spark gibi teknolojiler Java ile geliştirilmiştir
  • Gömülü Sistemler ve IoT: Akıllı kartlar, sensörler, otomotiv sistemleri

Java’nın Avantajları

Java’nın bu kadar yaygın kullanılmasının başlıca nedenleri:

  1. Platform Bağımsızlık: “Write Once, Run Anywhere” (Bir kere yaz, her yerde çalıştır) felsefesi
  2. Nesne Yönelimli Programlama: Modüler, yeniden kullanılabilir kod yapısı
  3. Güçlü Bellek Yönetimi: Garbage Collection ile otomatik bellek temizliği
  4. Geniş Kütüphane ve Topluluk Desteği: Milyonlarca geliştirici ve binlerce açık kaynak kütüphane

1.2 Java’nın Çalışma Modeli: JVM, JRE ve JDK

JDK (Java Development Kit)

JDK, Java uygulamaları geliştirmek için ihtiyaç duyulan tüm araçları içeren pakettir. JDK’nın içerdiği temel bileşenler:

  • javac: Java derleyicisi (compiler)
  • java: Java yorumlayıcısı (interpreter)
  • jdb: Hata ayıklayıcı (debugger)
  • javadoc: Dokümantasyon oluşturucu
  • jar: Java arşiv aracı

Kod Örneği: JDK kurulumunu doğrulama

## 1.3 Java sürümünü kontrol etme
java -version

## 1.4 Java derleyici sürümünü kontrol etme
javac -version

JRE (Java Runtime Environment)

JRE, Java programlarını çalıştırmak için gerekli olan minimum ortamdır. JRE şunları içerir:

  • JVM (Java Virtual Machine)
  • Temel sınıf kütüphaneleri
  • Destek dosyaları

Uyarı: JRE sadece Java programlarını çalıştırmak içindir. Yeni bir Java programı geliştirmek için JDK gereklidir.

Kod Örneği: Basit bir Java programını JRE ile çalıştırma

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Java çalışıyor!");
    }
}

JVM (Java Virtual Machine)

JVM, Java’nın platform bağımsızlığının temel taşıdır. JVM’in görevleri:

  1. Bytecode Yorumlama: .class dosyalarındaki bytecode’u okur ve çalıştırır
  2. Bellek Yönetimi: Heap ve Stack bellek bölgelerini yönetir
  3. Garbage Collection: Kullanılmayan nesneleri bellekten temizler
  4. Güvenlik: Bytecode doğrulama ve güvenlik kontrolleri

Kod Örneği: Bytecode üretme süreci

public class BytecodeDemo {
    public static void main(String[] args) {
        int toplam = 5 + 3;
        System.out.println("Toplam: " + toplam);
    }
}

Derleme ve çalıştırma komutları:

## 1.5 Kaynak kodu bytecode'a çevir
javac BytecodeDemo.java

## 1.6 Bytecode'u çalıştır
java BytecodeDemo

JDK, JRE ve JVM Arasındaki İlişki

Bu üç bileşen arasındaki hiyerarşik ilişki:

JDK (Java Development Kit)
  ├── JRE (Java Runtime Environment)
  │    ├── JVM (Java Virtual Machine)
  │    ├── Çekirdek Kütüphaneler
  │    └── Diğer Çalışma Zamanı Bileşenleri
  ├── Geliştirme Araçları (javac, jdb, javadoc, jar)
  └── API Kütüphaneleri

Pratik İpucu: - Sadece Java programı çalıştıracaksanız → JRE yeterlidir - Java programı geliştirecekseniz → JDK gereklidir - JDK, JRE’yi de içerdiği için her zaman JDK kurmanız önerilir

1.7 Java Geliştirme Ortamı Kurulumu

İşletim Sistemine Göre Kurulum

Windows’a JDK Kurulumu

  1. Oracle JDK veya OpenJDK indir
  2. .msi veya .exe dosyasını çalıştır
  3. Kurulum sihirbazını takip et
  4. Varsayılan kurulum dizini: C:\Program Files\Java\jdk-17

macOS’a JDK Kurulumu

## 1.8 Homebrew ile kurulum
brew install openjdk@17

## 1.9 Manuel kurulum için .dmg dosyasını indir

Linux’a JDK Kurulumu

## 1.10 Debian/Ubuntu tabanlı sistemler
sudo apt update
sudo apt install openjdk-17-jdk

## 1.11 RHEL/CentOS/Fedora tabanlı sistemler
sudo yum install java-17-openjdk-devel

PATH ve JAVA_HOME Değişkenleri

Windows’ta PATH ve JAVA_HOME Ayarlama

## 1.16 JAVA_HOME değişkenini ayarlama
setx JAVA_HOME "C:\Program Files\Java\jdk-17"

## 1.17 PATH değişkenine JDK bin dizinini ekleme
setx PATH "%PATH%;%JAVA_HOME%\bin"

macOS/Linux’ta PATH ve JAVA_HOME Ayarlama

## 1.22 ~/.bashrc veya ~/.zshrc dosyasına ekleyin
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

Kurulum doğrulama komutları:

## 1.23 Java sürümünü kontrol et
java -version

## 1.24 Derleyici sürümünü kontrol et
javac -version

## 1.25 JAVA_HOME değişkenini kontrol et
echo %JAVA_HOME%  # Windows
echo $JAVA_HOME   # macOS/Linux

İntegre Geliştirme Ortamları (IDE)

Java geliştirme için en popüler IDE’ler:

IDE Özellikler Kullanım Alanı
IntelliJ IDEA Akıllı kod tamamlama, refactoring, Spring desteği Profesyonel geliştirme
Eclipse Ücretsiz, geniş eklenti desteği Kurumsal projeler
NetBeans Swing GUI builder, JavaFX desteği Masaüstü uygulamaları

Tavsiye: Yeni başlayanlar için IntelliJ IDEA Community Edition (ücretsiz) önerilir.

1.26 İlk Java Programı: “Merhaba Dünya”

Kaynak Kod Yazma

/**
 * MerhabaDunya - İlk Java Programı
 * Bu program ekrana "Merhaba Dünya!" yazdırır
 */
public class MerhabaDunya {
    public static void main(String[] args) {
        // Ekrana mesaj yazdır
        System.out.println("Merhaba Dünya!");
    }
}

Java programının temel yapısı:

  1. Class Tanımı: public class MerhabaDunya - Programın ana sınıfı
  2. Main Metodu: public static void main(String[] args) - Programın başlangıç noktası
  3. Çıktı İşlemi: System.out.println() - Ekrana yazdırma

Derleme ve Çalıştırma Süreci

## 1.31 Kaynak kodu derle (bytecode üret)
javac MerhabaDunya.java

## 1.32 Bytecode'u çalıştır
java MerhabaDunya

## 1.33 Beklenen çıktı:
## 1.34 Merhaba Dünya!

Derleme sonrası oluşan dosyalar: - MerhabaDunya.java → Kaynak kod (insan tarafından okunabilir) - MerhabaDunya.class → Bytecode (JVM tarafından okunabilir)

Hata Ayıklama ve Çıktı Analizi

Yaygın Derleme Hataları

public class HataliProgram {
    public static void main(String[] args) {
        // HATA 1: Noktalı virgül eksik
        System.out.println("Merhaba")  // ; eksik
        
        // HATA 2: String tırnak işareti eksik
        String mesaj = "Merhaba;  // " eksik
        
        // HATA 3: Yanlış veri tipi
        int sayi = "on";  // String int'e atanamaz
    }
}

Derleme hatası çıktısı:

HataliProgram.java:5: error: ';' expected
        System.out.println("Merhaba")
                                    ^
HataliProgram.java:8: error: unclosed string literal
        String mesaj = "Merhaba;
                        ^
HataliProgram.java:11: error: incompatible types: String cannot be converted to int
        int sayi = "on";
                   ^
3 errors

Önemli Uyarı: Derleme hataları, kodunuzda sözdizimi (syntax) hatası olduğunu gösterir. Bu hatalar düzeltilmeden program çalıştırılamaz.

Çalışma Zamanı Hataları

public class RuntimeHata {
    public static void main(String[] args) {
        int sayi1 = 10;
        int sayi2 = 0;
        
        // Bu satır çalışma zamanında hata verecek
        int sonuc = sayi1 / sayi2;
        
        System.out.println("Sonuç: " + sonuc);
    }
}

Çalışma zamanı hatası çıktısı:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at RuntimeHata.main(RuntimeHata.java:8)

1.35 Java Programlama Süreci ve İyi Uygulamalar

Kaynak Kod Düzeni

```java package com.example.ilkprogram;

/** * Bu sınıf, doğru kod düzenini gösterir. * * @author Ali Yılmaz * @version 1.0 * @since 2024-01-01 */ public class DogruDosyaAdi {

// Değişken isimleri camelCase kuralına uygun olmalı
private String kullaniciAdi;
private int yas;

/**
 * Programın başlangıç noktası