Eğitim Portalı/Java/Java'ya Giriş ve Temeller
Java01-java/00-temeller

Java'ya Giriş ve Temeller

Bu bölümde Java yolculuğuna ilk adımı atıyoruz. Amacımız, daha sonra gelecek tüm konuların üzerine inşa edileceği sağlam bir zemin kurmak: Java'nın ne olduğunu, kodun nasıl çalıştığını, verileri nasıl sakladığımızı ve…

Java'ya Giriş ve Temeller

Bu bölümde Java yolculuğuna ilk adımı atıyoruz. Amacımız, daha sonra gelecek tüm konuların üzerine inşa edileceği sağlam bir zemin kurmak: Java'nın ne olduğunu, kodun nasıl çalıştığını, verileri nasıl sakladığımızı ve onlarla nasıl işlem yaptığımızı rahatça anlamak. Acele etmene gerek yok; her kavramı küçük, çalışan örneklerle göreceğiz.

Java nedir?

Java; platform bağımsız, nesne yönelimli, güçlü tip denetimine sahip bir programlama dilidir. En büyük gücü şu sözle özetlenir: "Write Once, Run Anywhere" — bir kez yaz, her yerde çalıştır. Yazdığın kaynak kodu, işletim sistemine göre yeniden yazmana gerek kalmadan Windows, Linux ve macOS üzerinde aynı şekilde çalışır.

Peki bu sihir nasıl oluyor? Java kodu doğrudan işletim sistemine değil, JVM'e (Java Virtual Machine) konuşur. Sen kaynak kodu yazarsın, derleyici onu bytecode'a çevirir, JVM de bu bytecode'u çalıştığı makineye uygun şekilde çalıştırır.

JDK, JRE ve JVM

Bu üç kısaltma sık karıştırılır; aralarındaki ilişkiyi iç içe halkalar gibi düşünebilirsin:

  • JVM (Java Virtual Machine): Bytecode'u çalıştıran sanal makine. Platform bağımsızlığın kalbidir.
  • JRE (Java Runtime Environment): JVM + Java programlarını çalıştırmak için gereken kütüphaneler.
  • JDK (Java Development Kit): JRE + geliştirme araçları (derleyici javac, java başlatıcısı, hata ayıklayıcı vb.). Kod yazmak için JDK kurman gerekir.

Kısaca: Geliştirmek için JDK, çalıştırmak için JRE, yürütmek için JVM.

İlk program

Modern JDK'larda (Java 11+) tek dosyalık bir programı derlemeden doğrudan çalıştırabilirsin:

java Ornek1.java

Örnek 1 (./Ornek1.java) ekrana bir karşılama yazısı basar ve System.getProperty ile çalıştığın JVM'in sürümünü, sağlayıcısını ve işletim sistemini gösterir. Çalıştırınca kendi ortamının bilgilerini göreceksin.

Değişkenler ve veri tipleri

Değişken, bir değeri saklamak için isim verdiğimiz bir kutudur. Java güçlü tipli bir dil olduğundan, her değişkenin bir tipi vardır ve bu tip ne tür veri tutabileceğini belirler.

En sık kullanılan ilkel (primitive) tipler:

TipAçıklamaÖrnek
intTam sayı (4 byte)int yas = 30;
longBüyük tam sayı (8 byte)long n = 85_000_000L;
doubleOndalıklı, çift duyarlıkdouble f = 19.99;
floatOndalıklı, tek duyarlıkfloat o = 0.5f;
booleanMantıksal: true/falseboolean a = true;
charTek karakter (tek tırnak)char h = 'A';
byte, shortKüçük tam sayılarbyte b = 120;

String ise tek bir karakter değil, bir metin (karakter dizisi) tutar ve aslında bir nesnedir: String isim = "Ayşe";

Tip dönüşümü (casting)

Küçük bir tipten büyüğüne geçiş otomatiktir (intdouble). Tersi yönde, yani bilgi kaybı riski olan geçişlerde Java senden açık bir cast ister:

double fiyat = 1999.99;
int tam = (int) fiyat; // 1999 — ondalık kısım atılır

Örnek 2 (./Ornek2.java) bütün bu tipleri tanımlar, otomatik ve açık dönüşümleri gösterir, ardından operatörlere geçer.

Operatörler

Operatörler, değerler üzerinde işlem yapmamızı sağlar:

  • Aritmetik: +, -, *, /, % (kalan). Dikkat: iki tam sayının bölümü yine tam sayıdır (17 / 5 == 3). Ondalıklı sonuç için en az bir tarafı double yapmalısın.
  • Karşılaştırma: ==, !=, >, <, >=, <= — sonuçları her zaman boolean'dır.
  • Mantıksal: && (ve), || (veya), ! (değil). && ve || "kısa devre" yapar: sonucu belirleyen ilk koşul yeterliyse ikinciye bakmaz.

Örnek 2 bu operatörlerin hepsini çalışan kod üzerinde gösterir.

Ekrana yazdırma ve biçimlendirme

System.out.println(...) bir satır yazıp alt satıra geçer. Daha düzenli, hizalı çıktılar için System.out.printf(...) veya String.format(...) kullanırız. En sık biçim belirteçleri:

  • %d tam sayı, %f ondalık, %.2f iki ondalık basamak
  • %s metin, %n satır sonu, %% gerçek % işareti
  • %,.2f binlik ayraçlı ondalık (ör. 10.000,00 gibi okunur sayı)

Örnek 3 (./Ornek3.java) bunları kullanarak basit bir faiz hesabı ve bir geometri hesabını biçimli biçimde ekrana yazar.

Konsoldan veri okuma (Scanner)

Gerçek programlarda kullanıcıdan veri almak isteyebilirsin. Bunun klasik yolu Scanner'dır:

import java.util.Scanner;
Scanner okuyucu = new Scanner(System.in);
System.out.print("Adın: ");
String ad = okuyucu.nextLine();

Özet

Java'nın platform bağımsızlığını JVM'e borçlu olduğunu, JDK/JRE/JVM ayrımını, değişken tiplerini, tip dönüşümünü, operatörleri ve biçimli çıktıyı gördük. Bu temeller; döngüler, metotlar ve nesneler gibi bundan sonraki her konunun yapı taşıdır. Sırada akışı kontrol etmeyi sağlayan kontrol yapıları var.

Kod Örnekleri(3)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: İlk programın ve çalıştığın ortamı tanıman.
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    public static void main(String[] args) {
6        // Java'da her program bir main metodundan başlar.
7        // System.out.println bir satır yazıp alt satıra geçer.
8        System.out.println("Merhaba! Java dünyasına hoş geldin.");
9        System.out.println("Bu, çalıştırdığın ilk Java programın.");
10
11        System.out.println();
12        System.out.println("--- Çalışma Ortamı ---");
13
14        // System.getProperty ile JVM'in ve işletim sisteminin bilgilerini okuyoruz.
15        // Bu değerler programın derlenip çalıştığı ortamı anlatır.
16        System.out.println("Java sürümü      : " + System.getProperty("java.version"));
17        System.out.println("Java sağlayıcısı : " + System.getProperty("java.vendor"));
18        System.out.println("İşletim sistemi  : " + System.getProperty("os.name"));
19
20        System.out.println();
21        // Aynı kaynak kodu Windows, Linux ve macOS üzerinde değiştirmeden çalışır.
22        // Java'nın bu özelliğine "Write Once, Run Anywhere" (bir kez yaz, her yerde çalıştır) denir.
23        System.out.println("Bu program herhangi bir değişiklik yapmadan");
24        System.out.println("Windows, Linux veya macOS üzerinde de çalışır.");
25    }
26}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Değişkenler, veri tipleri, tip dönüşümü ve operatörler.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    public static void main(String[] args) {
6        // --- İlkel (primitive) veri tipleri ---
7        int yas = 30;                 // tam sayı (4 byte)
8        long nufus = 85_000_000L;      // büyük tam sayı (8 byte), sonuna L
9        double fiyat = 1999.99;        // ondalıklı (çift duyarlık)
10        float oran = 0.5f;             // ondalıklı (tek duyarlık), sonuna f
11        boolean aktifMi = true;        // mantıksal: true / false
12        char harf = 'A';               // tek karakter, tek tırnak
13        byte kucukSayi = 120;          // -128..127
14
15        // String ilkel değildir; bir nesnedir ama günlük hayatta sık kullanılır.
16        String isim = "Ayşe";
17
18        System.out.println("isim=" + isim + ", yas=" + yas + ", nufus=" + nufus);
19        System.out.println("fiyat=" + fiyat + ", oran=" + oran);
20        System.out.println("aktifMi=" + aktifMi + ", harf=" + harf + ", kucukSayi=" + kucukSayi);
21
22        // --- Tip dönüşümü (casting) ---
23        // Küçük tipten büyüğe geçiş otomatiktir (genişletme).
24        double yasOndalik = yas;       // int -> double otomatik
25        // Büyükten küçüğe geçişte bilgi kaybı olabileceğinden açık cast gerekir.
26        int yuvarlanmis = (int) fiyat; // double -> int, ondalık kısım atılır
27        System.out.println("\nyasOndalik=" + yasOndalik + ", yuvarlanmis=" + yuvarlanmis);
28
29        // --- Aritmetik operatörler ---
30        int a = 17, b = 5;
31        System.out.println("\n--- Aritmetik ---");
32        System.out.println(a + " + " + b + " = " + (a + b));
33        System.out.println(a + " - " + b + " = " + (a - b));
34        System.out.println(a + " * " + b + " = " + (a * b));
35        System.out.println(a + " / " + b + " = " + (a / b) + "  (tam sayı bölmesi)");
36        System.out.println(a + " % " + b + " = " + (a % b) + "  (kalan)");
37        System.out.println("Ondalıklı bölme: " + (a / (double) b));
38
39        // --- Karşılaştırma operatörleri (sonuç boolean) ---
40        System.out.println("\n--- Karşılaştırma ---");
41        System.out.println("a > b ? " + (a > b));
42        System.out.println("a == b ? " + (a == b));
43
44        // --- Mantıksal operatörler ---
45        boolean kosul1 = a > 10;
46        boolean kosul2 = b < 3;
47        System.out.println("\n--- Mantıksal ---");
48        System.out.println("kosul1 && kosul2 = " + (kosul1 && kosul2)); // VE
49        System.out.println("kosul1 || kosul2 = " + (kosul1 || kosul2)); // VEYA
50        System.out.println("!kosul1 = " + (!kosul1));                   // DEĞİL
51    }
52}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek3

çalıştırılabilir
Ornek3.java
1// Ornek3: printf ile biçimli çıktı ve küçük bir hesaplama.
2// Çalıştırma: java Ornek3.java
3public class Ornek3 {
4
5    public static void main(String[] args) {
6        // Gerçek bir programda bu değerler kullanıcıdan (Scanner ile) alınabilir.
7        // Çalıştırıcıda girdi olmadığı için burada sabit değerlerle simüle ediyoruz.
8        double anapara = 10_000.0; // TL
9        double yillikFaiz = 0.18;  // %18
10        int yil = 3;
11
12        System.out.println("=== Basit Faiz Hesabı ===");
13        // printf: %s metin, %d tam sayı, %f ondalık, %.2f iki basamak, %% gerçek % işareti, %n satır sonu
14        System.out.printf("Anapara     : %,.2f TL%n", anapara);
15        System.out.printf("Yıllık faiz : %.0f%%%n", yillikFaiz * 100);
16        System.out.printf("Süre        : %d yıl%n", yil);
17
18        double faizTutari = anapara * yillikFaiz * yil; // basit faiz formülü
19        double toplam = anapara + faizTutari;
20
21        System.out.println("-------------------------------");
22        System.out.printf("Faiz tutarı : %,.2f TL%n", faizTutari);
23        System.out.printf("Toplam      : %,.2f TL%n", toplam);
24
25        System.out.println("\n=== Dikdörtgen Alan/Çevre ===");
26        double en = 4.5, boy = 7.2;
27        // String.format, printf ile aynı biçimlendirmeyi yapar ama metni döndürür.
28        String satir = String.format("en=%.1f, boy=%.1f -> alan=%.2f, çevre=%.2f",
29                en, boy, en * boy, 2 * (en + boy));
30        System.out.println(satir);
31    }
32}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.