İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Özel Ders Başvuru Ücretsiz ön görüşme Ana Sayfa

Java’da “error: ‘;’ expected” Hatası Neden Çıkar, Nasıl Çözülür?

javada-error-expected-hatasi-neden-cikar-nasil-cozulur
Bu yazıda neler var?
  1. Java “error: ‘;’ expected” hatası ne anlama gelir?
  2. Derleyici çıktısındaki dosya, satır ve ^ nasıl okunur?
  3. Hatanın kaynağını bulmak için hangi sırayı izlemelisin?
  4. Not ortalaması programında üç hata nasıl düzeltilir?
  5. Düzeltmeden sonra kalan hatalar nasıl ele alınır?
  6. Sık Sorulan Sorular

Java’da “error: ‘;’ expected” hatası, javac derleyicisinin bir ifade veya değişken bildirimi tamamlanmadan önce noktalı virgül beklediğini gösterir. Çözüm için hata mesajındaki dosya adını, satır numarasını ve ^ işaretini incelemeli; ardından işaretlenen satırın yanı sıra bir önceki satırda eksik ya da kapanmamış bir sözdizimi olup olmadığını kontrol etmelisin.

Bu hata gerçekten eksik bir ; karakterinden çıkabilir. Ancak kapanmamış parantez, tırnak ya da başka bir yazım hatası da derleyicinin sonraki noktada noktalı virgül beklemesine yol açabilir.

Java “error: ‘;’ expected” hatası ne anlama gelir?

javac, Java kaynak kodunu dilin kurallarına göre inceleyip derleyen komut satırı aracıdır. Derleyici kodu çalıştırmadan önce parantezlerin, ifadelerin, değişken bildirimlerinin ve diğer yapıların doğru sırada yazılıp yazılmadığını kontrol eder.

İfade, bir değer üreten veya bir işlem gerçekleştiren tamamlanmış kod parçasıdır. Örneğin 80 + 90 bir sonuç üretir, ortalama = 85 bir atama yapar ve System.out.println(ortalama) ekrana yazdırma işlemini gerçekleştirir. Bu tür ifadeler Java’da çoğu zaman noktalı virgülle tamamlanır. Oracle’ın Java ifadeleri ve deyimleri açıklaması da atama, metot çağrısı ve değişken bildirimlerinin noktalı virgülle tamamlanabildiğini gösterir.

int toplam = 80 + 90;
double ortalama = toplam / 2.0;
System.out.println(ortalama);

Yukarıdaki üç satırın sonunda noktalı virgül bulunur. Bir satırın sonunda bu işaret unutulursa derleyici, ifadenin nerede bittiğini anlayamayabilir ve ; beklediğini bildirir.

Noktalı virgülün kullanımı her Java yapısında aynı değildir. if koşulundan sonra, koşula bağlı gövde süslü parantezle başlıyorsa noktalı virgül yazılmaz:

if (ortalama >= 50) {
    System.out.println("Geçti");
}

for başlığında ise üç bölüm birbirinden iki noktalı virgülle ayrılır. Bu nedenle aşağıdaki kullanımda virgül yerine noktalı virgül gerekir:

for (int i = 0; i < 3; i++) {
    System.out.println(i);
}

Normal bir metot tanımında da imza kısmından sonra doğrudan gövde gelir. İmzanın sonuna gereksiz noktalı virgül koymak, metot tanımının yapısını bozabilir. Benzer biçimde if (koşul); yazmak, koşulu boş bir deyimle tamamlar ve ardından gelen blok koşuldan bağımsız çalışabilir. Bu durumda sorun her zaman ‘;’ expected mesajı olmayabilir, fakat noktalı virgülün yanlış yere eklenmesi programın anlamını değiştirebilir.

Bu hata mesajını gördüğünde sadece eksik ; karakterini arama. Metodun başka bir metodun içine yazılması, değişken adında boşluk kullanılması, geçersiz karakter eklenmesi, kapanmamış parantez veya tırnak bırakılması da derleyicinin kodu yanlış yorumlamasına neden olabilir. Derleyici bir ifadeyi tamamlayamadığında, hatayı bazen gerçek sorundan sonraki karakterde bildirir.

Derleyici çıktısındaki dosya, satır ve ^ nasıl okunur?

Derleyici çıktısındaki dosya, satır ve ^ nasıl okunur?

javac hata çıktısını okurken önce dosya adına, sonra satır numarasına, hata açıklamasına ve ^ işaretine bakmalısın. Eksik noktalı virgül içeren kısa bir örnekte çıktı şu biçimde görünür:

NotOrtalamasi.java:4: error: ';' expected
        double ortalama = (80 + 90 + 70) / 3.0
                                               ^
1 error

Buradaki NotOrtalamasi.java kaynak dosyanın adıdır. 4, derleyicinin sorunu fark ettiği satır numarasını gösterir. error: ';' expected bölümü, derleyicinin o noktada bir noktalı virgül beklediğini anlatır. Alt satırdaki ^ işareti ise derleyicinin sözdizimi sorununu fark ettiği konumu gösterir. Oracle’ın Java öğreticisindeki javac örneğinde de dosya adı, satır numarası, hata mesajı, ilgili kod satırı ve konumu gösteren işaret birlikte verilir.

^ işaretinin altındaki karakter, hatanın kesin olarak orada başladığını garanti etmez. Örnekte noktalı virgülün 4. satırın sonunda eksik olduğu anlaşılır; fakat kapanmamış bir parantez veya tırnak olsaydı derleyici sorunu daha ileride fark edebilirdi. Bu yüzden işaretlenen satırı okuduktan sonra hemen bir önceki satırı da kontrol et.

IDE’ler, kendi kod analiz motorlarını kullanabildiği için hatayı farklı renklendirebilir, başka bir konumda gösterebilir veya farklı bir açıklama yazabilir. IntelliJ IDEA, proje ayarlarına göre javac kullanabildiği gibi Eclipse derleyicisi de seçilebilir; bu derleyiciler hatalara farklı tepki verebilir. Komut satırındaki sonucu doğrulamak için dosyayı doğrudan javac DosyaAdi.java komutuyla derlemek yararlı olur.

Hatanın kaynağını bulmak için hangi sırayı izlemelisin?

Hatanın kaynağını bulmak için hangi sırayı izlemelisin?

Hatanın kaynağını bulmak için önce javac çıktısında gösterilen satırı, ardından bu satırın hemen üstündeki satırı ve çevresindeki parantezleri incelemelisin. Derleyici, kodu yukarıdan aşağıya okuduğu için eksiklik bir önceki satırda olsa bile hatayı sonraki satırda gösterebilir.

Java sözdiziminde ifadelerin nerede bittiği, blokların nasıl açılıp kapandığı ve kontrol yapılarının hangi sırayla yazıldığı önemlidir. Bu kuralların ayrıntıları Java Dil Spesifikasyonu içinde tanımlanır.

  1. Önce belirtilen satırı oku. Dosya adı ve satır numarası, derleyicinin dikkatini verdiği yeri gösterir. Satırın sonunda eksik noktalı virgül, yanlış yazılmış bir değişken adı veya beklenmeyen bir virgül olup olmadığını kontrol et.
  2. Bir üst satıra dön. Önceki satırda noktalı virgül unutulmuşsa javac, eksikliği bir sonraki satırın başında gösterebilir. Bu nedenle for, if veya başka bir bildirim satırına işaret edilmesi, hatanın kesinlikle orada olduğu anlamına gelmez.
  3. Parantez ve tırnakları eşleştir. Açılan her (, { ve [ karakterinin uygun kapanışı bulunmalıdır. Tırnak içinde başlayan metin de kapanış tırnağıyla bitmelidir. Kapanmamış bir parantez veya tırnak, sonraki birkaç satırın yanlış yorumlanmasına yol açabilir.
  4. Değişken adlarını incele. Değişken adında boşluk kullanılamaz. not ortalamasi yerine notOrtalamasi veya not_ortalamasi gibi tek bir tanımlayıcı kullanılmalıdır. Geçersiz karakterler de derleyicinin ifadeyi doğru ayıramamasına neden olabilir.
  5. Kontrol yapısının ayraçlarını kontrol et. for başlığında başlangıç, koşul ve artırma bölümleri virgülle değil noktalı virgülle ayrılır:
for (int i = 0; i < 3; i++) {
    System.out.println(i);
}

Buradaki üç bölümün arasına virgül koymak, derleyicinin for başlığını yanlış okumasına ve sözdizimi hatası bildirmesine neden olur.

Metotların konumu da önemlidir. Bir metot sınıf gövdesinin içinde bulunabilir, ancak başka bir metodun gövdesinin içine yazılamaz:

class Ornek {
    static void anaMetot() {
        static void yardimciMetot() {
            System.out.println("Merhaba");
        }
    }
}

yardimciMetot tanımı sınıfın içinde, fakat anaMetot metodunun dışında olmalıdır. İç içe yazıldığında derleyici, metot tanımı yerine bir ifade beklediği için farklı sözdizimi mesajları gösterebilir.

if (kosul); biçimindeki gereksiz noktalı virgül ise çoğu durumda derleme hatası oluşturmaz, fakat if için boş bir ifade meydana getirir. Ardından gelen blok koşuldan bağımsız çalışabilir. Metot imzasının sonuna eklenen noktalı virgül de benzer biçimde değerlendirilmelidir. Gövdeli bir metodun sonunda noktalı virgül yerine kod bloğu bulunmalıdır; yalnızca gövdesiz metot bildirimleri belirli koşullarda noktalı virgül kullanabilir.

Teşhis sırasında şu sırayı kullanabilirsin:

  • Dosya adını ve satır numarasını kontrol et.
  • ^ işaretinin gösterdiği karakteri ve aynı satırdaki sözdizimini oku.
  • Bir üst satırda noktalı virgül eksikliği olup olmadığına bak.
  • Açık kalan parantez, süslü parantez veya tırnakları ara.
  • Değişken adlarında boşluk ve geçersiz karakter bulunmadığını doğrula.
  • for, if ve metot bildirimlerinin ayraçlarını incele.
  • Metotların sınıf içinde, başka bir metodun dışında tanımlandığından emin ol.

Not ortalaması programında üç hata nasıl düzeltilir?

Üç hatayı ayırmanın en güvenli yolu, çalışan programı temel alıp her seferinde yalnızca bir satırı değiştirmektir. Aşağıdaki programda 70, 80 ve 75 notları toplanır ve ortalama hesaplanır.

public class NotOrtalamasi {
    public static void main(String[] args) {
        int[] notlar = {70, 80, 75};
        int toplam = 0;

        for (int i = 0; i < notlar.length; i++) {
            toplam += notlar[i];
        }

        double ortalama = (double) toplam / notlar.length;
        System.out.println("Ortalama: " + ortalama);
    }
}

Program doğru çalıştığında ekrana Ortalama: 75.0 yazdırır. Noktalı virgül ve ifade kuralları, bu programdaki değişken bildirimleri ve döngü başlığı gibi satırlarda birlikte kullanılır.

1. Değişken bildiriminden sonra noktalı virgülü unutmak

int toplam = 0

for (int i = 0; i < notlar.length; i++) {
    toplam += notlar[i];
}

Burada int toplam = 0 satırı noktalı virgülle bitmediği için javac çoğu durumda for satırını işaret eder ve ';' expected mesajı verir. İşaretlenen yer, eksikliğin bulunduğu önceki satırın hemen sonrası olabilir.

int toplam = 0;

2. for başlığında noktalı virgül yerine virgül kullanmak

for (int i = 0; i < notlar.length, i++) {
    toplam += notlar[i];
}

for başlığında koşul ile artırma bölümü arasındaki ayraç virgül olamaz. Bu nedenle javac virgülün bulunduğu bölgeyi veya hemen sonrasını işaretleyebilir. Doğru biçimde üç bölüm noktalı virgülle ayrılır:

for (int i = 0; i < notlar.length; i++) {
    toplam += notlar[i];
}

3. Değişken adında boşluk bırakmak

double not ortalamasi = (double) toplam / notlar.length;

Java, not ortalamasi ifadesini tek bir değişken adı olarak kabul etmez. Derleyici ilk adı tamamlanmış bir bildirim gibi yorumlayıp ikinci ada geldiğinde ';' expected benzeri bir sözdizimi hatası gösterebilir. Değişken adı boşluksuz yazılmalıdır:

double notOrtalamasi = (double) toplam / notlar.length;

Kapanmayan parantez veya tırnak da benzer biçimde sonraki satırları etkileyebilir. Örneğin System.out.println("Ortalama: " + ortalama; satırında kapanış parantezi eksiktir. System.out.println("Ortalama: + ortalama); satırında ise metin tırnağı kapanmamıştır. Bu durumlar her zaman aynı hata mesajını üretmez; derleyicinin işaret ettiği yeri düzeltmeden önce açılan karakterleri tek tek eşleştirmek gerekir.

Düzeltmeden sonra kalan hatalar nasıl ele alınır?

İlk hatayı düzelttikten sonra dosyayı yeniden derlemelisin. Önceki hata listesini geçerli kabul etme; yeni derleme, kaynak kodun mevcut durumunu gösterir. Bir eksiklik sonraki satırların yanlış yorumlanmasına yol açabildiği için ilk düzeltmeden sonra hata sayısının azalması, değişmesi ya da yeni bir mesajın görünmesi normaldir.

Örneğin bir değişken tanımının sonundaki noktalı virgül eksikse derleyici sonraki satırda da sözdizimi hatası gösterebilir. Noktalı virgülü ekledikten sonra yeniden derlediğinde sonraki mesaj kaybolabilir. Bu nedenle hata listesini yukarıdan aşağıya oku, ilk anlamlı hatayı düzelt ve dosyayı tekrar derle. javac komutunu çalıştırdıysan terminaldeki çıktıyı, IDE içinde derleme başlattıysan derleme çıktısını esas al. IDE’nin editör içinde gösterdiği teşhisler ile derleme sonucu aynı işlemden gelmeyebilir.

Bu adımları uygularken Java sözdizimi temellerini ayrıca ölçmek istersen Java bilgi testi ile değişkenler, ifadeler ve kontrol yapıları konusundaki durumunu görebilirsin.

Son derleme öncesi kısa kontrol listesi

  • Hata mesajındaki dosya adını, satır numarasını ve işaretlenen konumu incele.
  • İşaretlenen satırın bir önceki satırında eksik noktalı virgül veya kapanmamış ifade olup olmadığını kontrol et.
  • Normal parantezleri, süslü parantezleri ve tırnakları eşleştir.
  • Değişken adlarında boşluk veya Java’da geçersiz karakter bulunmadığından emin ol.
  • for başlığındaki başlangıç, koşul ve güncelleme bölümlerinin noktalı virgülle ayrıldığını doğrula.
  • if koşulunun ve metot imzasının sonunda gereksiz noktalı virgül olup olmadığını ara.

Sık Sorulan Sorular

“; expected” hatasında derleyicinin gösterdiği satır her zaman hatanın bulunduğu satır mıdır?

Derleyicinin gösterdiği satır, hatanın fark edildiği konumu belirtir; eksiklik bir önceki satırda bulunabilir. Önce işaretlenen satırı, ardından onun hemen üstündeki satırı kontrol etmelisin.

Java for döngüsünün başlığında neden noktalı virgül kullanılır?

Java’daki temel for başlığında başlangıç, devam koşulu ve güncelleme bölümleri iki noktalı virgülle ayrılır. Bu üç bölümün her biri farklı bir görevi ifade eder; virgül kullanmak bu yapının doğru biçimi değildir.

if koşulunun sonuna gereksiz noktalı virgül koymak programı nasıl etkiler?

if (kosul); yazıldığında noktalı virgül boş bir ifade oluşturur. Ardından gelen blok, koşulun sonucuna bağlı olmadan çalışabilir. Koşulun sonuna noktalı virgül eklemek yerine doğrudan bloğu açmalısın.

Noktalı virgülü ekledikten sonra başka bir derleyici hatası çıkarsa ne yapılmalıdır?

Noktalı virgülü ekledikten sonra dosyayı yeniden derlemeli ve yeni listedeki ilk anlamlı hatayı incelemelisin. Bir sözdizimi hatasının düzeltilmesi, derleyicinin kodun sonraki bölümünü farklı yorumlamasına neden olabilir.

Java’da hata ayıklama, her mesajı ayrı bir sorun kabul etmek yerine kodun derleyici tarafından nasıl okunduğunu adım adım kontrol etmeyi gerektirir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara