Java'ya Giriş ve İlk Program

Bilgisayar ve Programlamaya Giriş
ProgramAraçlarİlk programDerlemeHatalar
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Program

Programı veri ve işlemler bütünü olarak açıklamak.

Java

Kaynak kod, bytecode ve JVM ilişkisini kurmak.

İlk program

Java dosyasını yazıp derlemek ve çalıştırmak.

Hatalar

Söz dizimi, çalışma zamanı ve mantık hatalarını ayırt etmek.

Temeller

Program Nedir?

Girdi70, 90Program1. notları oku2. topla3. 2'ye böl4. sonucu yazbellek (durum)toplam = 160Çıktı80
  • Bilgisayarın belirli bir görevi yerine getirmesi için yürüttüğü komutlar bütünüdür.
  • Girdi alabilir, veriyi işler, durum saklar (bellekteki değerler) ve çıktı üretir.
  • Davranışı dilin kuralları ve yazılan algoritma belirler.
  • Örnek: iki notun ortalaması → girdi 70, 90; çıktı 80.

Temeller

Programlama Dilinin Yönleri

inttoplam=fiyat * adet;Tür sistemiint × int → intdeğerle yapılabileceklerÇalışma modelibellekte toplam kutusudeğer orada saklanırAnlamçarp, sonucu kutuya yazçalışınca ne olur?Söz dizimideyim ; ile bitergeçerli yazım biçimi
  • Söz dizimi geçerli biçimi, anlam çalıştırıldığında ne olacağını tanımlar.
  • Tür sistemi işlemleri sınırlar; çalışma modeli belleğin ve komutların nasıl yürütüldüğünü belirler.
  • Derleyici söz dizimini ve türleri çalıştırmadan önce denetler.

Diller

Programlama Paradigmaları

  • Zorunlu yaklaşım işlemlerin nasıl yapılacağını adım adım belirtir.
  • Nesne yönelimli yaklaşım veri ve davranışı nesnelerde birleştirir.
  • Fonksiyonel yaklaşım dönüşümleri ve değişmez veriyi öne çıkarır.
  • Java birden fazla yaklaşımı birlikte kullanabilir.

Kaynak Kod

Düz Metin Kaynak Dosyası

Merhaba.javapublic class Merhaba {public static void...}düz metin:biçim bilgisi yokher düzenleyiciaçabilirp70u75b62l6Ci69c63diskte her karakter bir bayt (UTF-8, onaltılık)
  • .java dosyası düz metindir; Not Defteri, VS Code veya IDE ile açılabilir.
  • Sürüm kontrol sistemleri satır değişikliklerini izleyebilir.
  • Karakter kodlaması (UTF-8), satır sonu ve dosya adı tutarlı olmalıdır: Türkçe karakterler yanlış kodlamada bozulur.

Kaynak Kod

Programlama Araçları

Düzenleyici

Kaynak kodu yazma.

IDE

Proje, tamamlama, derleme ve hata ayıklama.

javac

Kaynak kodu bytecode'a derleme.

java

Sınıfı JVM üzerinde çalıştırma.

Javadoc

API belgesi üretme.

Sürüm kontrolü

Değişiklik geçmişi.

Java

JDK, JRE ve JVM

JDK — geliştirme kitijavacjavajarjavadocjshellJRE — çalışma ortamıJava sınıf kütüphanesijava.lang · java.util · java.io …JVM — sanal makinesınıf yükleyicibytecode doğrulayıcıyorumlayıcı + JITçöp toplayıcı
  • JVM (Java Virtual Machine) bytecode'u yürüten sanal makinedir.
  • JRE = JVM + sınıf kütüphanesi: programı çalıştırmak için gerekenler.
  • JDK = JRE + geliştirme araçları (javac, jar, javadoc…). Geliştirici JDK kurar.
  • Java 11'den beri ayrı JRE dağıtılmaz; JDK kurulur.

Java

İlk Java Programı

public class Merhaba {public static void main(String[] args) {System.out.println("Merhaba");}}sınıf bildirimiad = dosya adı: Merhaba.javamain metoduprogramın başlangıç noktasıdeyimkonsola yaz; ; ile biter} main bloğu biter} sınıf bloğu biter
public

her yerden erişilebilir

static

nesne oluşturmadan çağrılır

void

değer döndürmez

String[] args

komut satırı argümanları

Java · Kodu adım adım çalıştır

Kod İzleme: Merhaba

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsol▌

java Merhaba komutuyla JVM başlar ve Merhaba sınıfını (Merhaba.class) belleğe yükler.

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsol▌

JVM main metodunu çağırır: yığında main çerçevesi açılır. Komut satırında argüman verilmediği için args boştur.

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsol▌

Deyim çalışır: "Merhaba" metni System.out.println metoduna gönderilir.

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsolMerhaba▌

println metni yazar ve satır sonu ekler: imleç alt satıra geçer. Metot biter, main'e dönülür.

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsolMerhaba▌

main bloğunun } karakterine gelindi: main biter, çerçevesi yığından kaldırılır.

Merhaba.classbytecodeJVMmain() çalıştırırSystem.outçıktı akışıKonsolMerhaba▌

Çalışacak başka kod yok: JVM kapanır, program sonlanır. Toplam 1 deyim çalıştı, 1 satır çıktı üretildi.

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

Java · Kodu adım adım çalıştır

Kod İzleme: print ve println

Konsol▌imleç: ▌satır 1, sütun 1

JVM main metodunu çağırır; konsol henüz boş, imleç 1. satırın başında.

KonsolMerhaba ▌imleç: ▌satır 1, sütun 9

print "Merhaba " yazar ama satır sonu eklemez: imleç aynı satırda, boşluğun hemen arkasında kalır.

KonsolMerhaba Dünya▌imleç: ▌satır 2, sütun 1

println "Dünya" yazar ve satır sonu ekler: sonraki çıktı alt satırdan başlar.

KonsolMerhaba DünyaJava▌imleç: ▌satır 3, sütun 1

println "Java" yazar ve satır sonu ekler: sonraki çıktı alt satırdan başlar.

KonsolMerhaba DünyaJava▌imleç: ▌satır 3, sütun 1

main biter; konsolda 2 satır var: 3 çağrı yapıldı ama yalnızca println satırı bitirdi.

public class Selam {
    public static void main(String[] args) {
        System.out.print("Merhaba ");
        System.out.println("Dünya");
        System.out.println("Java");
    }
}

Kaynak Kod

Java Dosyasının Yapısı

package okul;

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        System.out.println("Merhaba");
    }
}
okul/Program.java1 · package okul;2 · import …;3 · class Program { … }main( … ) { … }deyim;deyim;
  • package ve import bildirimleri sınıftan önce gelir; public sınıf adı dosya adıyla eşleşir.
  • package okul; → dosya okul/ klasöründe durur; çalıştırma: java okul.Program.

Çalıştırma

Derleme Hattı Adım Adım

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktıDüzenleyicide yazılan düz metin:public class Merhaba { … println("Merhaba"); … }C:\ders> (dosya kaydedildi: Merhaba.java)

1. Yaz: kaynak kod Merhaba.java adıyla kaydedilir. Dosya adı public sınıf adıyla aynı olmalıdır.

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktıjavac kaynak kodu okur; söz dizimini ve türleri denetler.Hata yoksa bytecode üretir.C:\ders> javac Merhaba.java

2. Derle: javac (JDK'daki derleyici) tüm dosyayı çalıştırmadan önce denetler.

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktıİşlemciden bağımsız ara kod; dosya CA FE BA BE baytlarıyla başlar.Merhaba.class  (düz metin değil, ikili dosya)C:\ders> dir   →   Merhaba.class

3. Bytecode: derleme başarılıysa aynı klasörde Merhaba.class oluşur. Bu dosya Windows, Linux ve macOS'ta aynıdır.

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktıSınıf yükleyici .class dosyasını belleğe alır,doğrulayıcı bytecode'u denetler, sonra main çağrılır.C:\ders> java Merhaba

4. Çalıştır: java Merhaba JVM'yi başlatır. Sınıf adı yazılır; .class uzantısı yazılmaz.

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktıJVM bytecode'u yorumlar; sık çalışan kısımları JIT ilemakine koduna çevirir. println konsola yazar.Merhaba

5. Çıktı: konsolda Merhaba görünür. Değişiklik yaparsanız yeniden derlemeniz gerekir.

Merhaba.javakaynak kodjavacderleyiciMerhaba.classbytecodeJVMjava komutuKonsolçıktı✗Merhaba.java:3: error: ';' expectedDerleme hatası: .class üretilmez, çalıştırılacak bir şey yoktur.C:\ders> javac Merhaba.java   (1 error)

Hata olursa: javac satır numarasıyla hata bildirir ve .class üretmez. Önce derleme hataları giderilir.

Çalıştırma

Bytecode ve JVM

Merhaba.classJVMWindowsx86-64makine koduJVMLinuxx86-64makine koduJVMmacOSARM64makine kodubir kez derle, JVM olan her yerde çalıştır
  • Derleyici işlemciye özel makine kodu yerine bytecode üretir.
  • Her platformun kendi JVM'si bytecode'u o işlemcinin makine koduna çevirerek yürütür.
  • Sınıf yükleme, doğrulama ve bellek yönetimi (çöp toplama) çalışma ortamının parçalarıdır.

Dil Yapısı

Temel Programlama Unsurları

inttoplam=fiyat*3;anahtar kelimetanımlayıcıişleçtanımlayıcıişleçsabit değerayırıcı
  • Derleyici kodu önce belirteçlere (token) ayırır: anahtar kelime, tanımlayıcı, sabit değer, işleç, ayırıcı.
  • Java büyük-küçük harfe duyarlıdır: sayi ve Sayi farklı adlardır.
  • Deyimler çoğunlukla noktalı virgülle biter; bloklar süslü parantezle çevrilir.

Dil Yapısı

İfadeler ve Deyimler

  • İfade bir değer üretir: 2 + 3 → 5, sayi > 0 → true.
  • Deyim bir işlemi tamamlar: toplam = 5; veya System.out.println(toplam);
  • Blok, süslü parantez içindeki deyimleri tek yapı olarak gruplar.
  • Bir deyimin içinde bir veya daha çok ifade bulunabilir.
blok { … }deyim (atama)toplam=fiyat * adet;ifade → 360deyim (atama)indirim=toplam > 300;ifade → true

Dil Yapısı · Kodu adım adım çalıştır

İfade, Deyim ve Blok Adım Adım

Bellek (değişkenler)fiyat120intadet?inttoplam?int

fiyat için bellekte int kutusu ayrılır ve 120 yazılır.

Bellek (değişkenler)fiyat120intadet3inttoplam?int

adet kutusu oluşur: 3.

Bellek (değişkenler)fiyat120intadet3inttoplam?intİfadefiyat * adet120 * 3→ 360

Önce sağdaki ifade değerlendirilir: fiyat * adet → 120 * 3 → 360.

Bellek (değişkenler)fiyat120intadet3inttoplam360int

Üretilen değer toplam kutusuna atanır: toplam = 360.

Bellek (değişkenler)fiyat120intadet3inttoplam360intİfadetoplam > 300360 > 300→ true

Koşul ifadesi: toplam > 300 → 360 > 300 → true. Doğru olduğu için bloğa girilir.

Bellek (değişkenler)fiyat120intadet3inttoplam360int

Blok içindeki deyim çalışır: konsola İndirim yazılır.

Bellek (değişkenler)fiyat120intadet3inttoplam360int

Blok biter. adet = 2 olsaydı toplam 240 olur, koşul false olur ve blok hiç çalışmazdı.

int fiyat = 120;           // tanımlama deyimi
int adet = 3;              // tanımlama deyimi
int toplam = fiyat * adet; // ifade + atama
if (toplam > 300) {        // koşul + blok
    System.out.println("İndirim");
}

Kaynak Kod

Açıklamalar

  • // satır sonuna kadar açıklamadır.
  • /* ... */ birden fazla satırı kapsar.
  • /** ... */ Javadoc (API belgesi) açıklamasıdır.
  • Derleyici açıklamaları atlar; bytecode'a girmezler.
  • Açıklama kodun ne yaptığını tekrarlamak yerine nedenini açıklamalıdır.
/** Merhaba programı (Javadoc). */
public class Merhaba {
    /* Birden fazla satıra
       yayılan açıklama */
    public static void main(String[] args) {
        // selamı yaz
        System.out.println("Merhaba");
    }
}

Temeller

Hata Türleri

Kodu yazDerle (javac)söz dizimi · tür hatasıÇalıştır (JVM)çalışma zamanı hatasıSonucu kontrol etmantık hatası
HataNe zaman?Örnek
Söz dizimiDerleme sırasındaEksik noktalı virgül
TürDerleme sırasındaMetni sayıya atama
Çalışma zamanıProgram çalışırkenSıfıra bölme
MantıkProgram çalışır ama sonuç yanlıştırYanlış koşul

Temeller · Adım adım

Hata Türleri Örneklerle

Söz dizimi hatası

Kodu yazDerle (javac)Çalıştır (JVM)Sonucu kontrol et
public class Hata1 {
    public static void main(String[] args) {
        System.out.println("Merhaba")
    }
}
Hata1.java:3: error: ';' expected
        System.out.println("Merhaba")
                                     ^
1 error

Derleyici kuralı bozulan yeri satır numarasıyla gösterir; .class üretilmez. Düzeltme: satır sonuna ; ekle.

Tür hatası

Kodu yazDerle (javac)Çalıştır (JVM)Sonucu kontrol et
public class Hata2 {
    public static void main(String[] args) {
        int sayi = "42";
    }
}
Hata2.java:3: error: incompatible types:
String cannot be converted to int
        int sayi = "42";
                   ^

Metin (String) int kutusuna konamaz. Türler derleme sırasında denetlenir. Düzeltme: int sayi = 42;

Çalışma zamanı hatası

Kodu yazDerle (javac)Çalıştır (JVM)Sonucu kontrol et
public class Hata3 {
    public static void main(String[] args) {
        int a = 10, b = 0;
        System.out.println(a / b);
    }
}
Exception in thread "main"
java.lang.ArithmeticException: / by zero
    at Hata3.main(Hata3.java:4)

Kod derlenir, ancak çalışırken tam sayı sıfıra bölünür: JVM bir istisna fırlatır ve program durur.

Mantık hatası

Kodu yazDerle (javac)Çalıştır (JVM)Sonucu kontrol et
public class Hata4 {
    public static void main(String[] args) {
        int a = 70, b = 90;
        System.out.println(a + b / 2);
    }
}
115

Hata iletisi yok, ama sonuç yanlış: beklenen 80. / önce yapılır: 70 + 45. Düzeltme: (a + b) / 2.

Tasarım

Program Bir Tariftir

Girdiyi alnot1 = 70, not2 = 90Doğrula0 ≤ not ≤ 100 mü?İşle(70 + 90) / 2 = 80Sonucu üret"Ortalama: 80"
  • Her adımın ön koşulu ve ürettiği değer belirlenmelidir.
  • Büyük tarifler alt görevlere ayrılır (Java'da bunlar ileride metot olacak).
Tarifi kodlamadan önce elle sınayın: 70 ve 90 için adımları izleyince 80 çıkıyor mu? 101 girilirse hangi adım durdurur?

Tasarım

Kodlamadan Önce

  • Örnek girdi ve beklenen çıktıyı yazın.
  • Çözümü doğal dil veya sözde kodla adımlara ayırın.
  • Sınır durumlarını ve hata davranışını belirleyin.
  • Ardından adımları Java yapılarına dönüştürün.
Örnek girdiBeklenen çıktıNeden?
70, 9080olağan durum
0, 00alt sınır
101, 50hata iletisigeçersiz girdi

Özet

Bölüm Özeti

  • Program, bilgisayarın bir görevi yerine getirmek için yürüttüğü komutlar bütünüdür.
  • Java kaynak dosyası javac ile bytecode'a derlenir ve JVM üzerinde çalışır.
  • public sınıf adı dosya adıyla eşleşir; main programın başlangıç noktasıdır.
  • İfadeler değer üretir, deyimler işlemi tamamlar, bloklar deyimleri gruplar.
  • Kodlamadan önce örnek girdi, beklenen çıktı ve sınır durumları belirlenir.

Özet

Kontrol Soruları

  1. JDK, bytecode ve JVM arasındaki ilişki nedir?
  2. Merhaba.java dosyası hangi komutlarla derlenip çalıştırılır?
  3. main metodunun görevi nedir?
  4. İfade ile deyim arasındaki fark nedir?
  5. Söz dizimi hatası ile mantık hatası nasıl ayrılır?

Son

Java'ya Giriş ve İlk Program
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt