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,javabaş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:
| Tip | Açıklama | Örnek |
|---|---|---|
int | Tam sayı (4 byte) | int yas = 30; |
long | Büyük tam sayı (8 byte) | long n = 85_000_000L; |
double | Ondalıklı, çift duyarlık | double f = 19.99; |
float | Ondalıklı, tek duyarlık | float o = 0.5f; |
boolean | Mantıksal: true/false | boolean a = true; |
char | Tek karakter (tek tırnak) | char h = 'A'; |
byte, short | Küçük tam sayılar | byte 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 (int → double). 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ıdoubleyapmalısın. - Karşılaştırma:
==,!=,>,<,>=,<=— sonuçları her zamanboolean'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:
%dtam sayı,%fondalık,%.2fiki ondalık basamak%smetin,%nsatır sonu,%%gerçek%işareti%,.2fbinlik ayraçlı ondalık (ör.10.000,00gibi 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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}Ornek3
çalıştırılabilir1// 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}