2026 – 2027 Eğitim Dönemi erken kayıt dönemi başladı. Birebir eğitim programlarımız 21 Eylül 2026 tarihinde başlıyor.
Berk Akademi
Ana Sayfa

Java’da Public Class ve Dosya Adı Hatası Nasıl Çözülür?

javada-public-class-dosya-adi-hatasi-cozumu
Bu yazıda neler var?
  1. Hata Mesajı Ne Anlatır: public class ve Dosya Adı Kuralı
  2. Yanlış Dosya Adı ve Büyük-Küçük Harf Hatası Nasıl Düzeltilir?
  3. Aynı Dosyada Birden Fazla public Sınıf Varsa Ne Olur?
  4. package Satırı ile Klasör Yolu Uyuşmuyorsa Nasıl Kontrol Edilir?
  5. javac ve java Komutları Doğru Klasörde Nasıl Kullanılır?
  6. Beş Parçalı Java Hata Teşhis Sırası ve Son Kontrol Listesi
  7. Sık Sorulan Sorular

Java’da public class hatası alıyorsanız ilk kontrol etmeniz gereken şey, dosya adı ile public sınıf adının birebir aynı olup olmadığıdır. Örneğin kodda public class Main yazıyorsa dosyanın adı uzantısıyla birlikte Main.java olmalıdır. Main, main ve MAIN Java açısından aynı ad değildir.

Bu kuralı kontrol ettikten sonra teşhisi beş parçaya ayırmak gerekir: dosya adı, sınıf adı, aynı dosyadaki public sınıf sayısı, package ile klasör uyumu ve çalıştırılan javac/java komutlarının konumu. İlk iki kontrol çoğu başlangıç düzeyindeki derleme hatasının kaynağını ortaya çıkarır.

Hata Mesajı Ne Anlatır: public class ve Dosya Adı Kuralı

Java’da dosyanın en üst seviyesinde tanımlanan bir sınıf public ise, sınıfın adı ile .java dosyasının adı aynı olmak zorundadır. Bu nedenle aşağıdaki sınıf yalnızca Main.java adlı dosyada bulunmalıdır:

public class Main {
    public static void main(String[] args) {
        System.out.println("Program çalıştı.");
    }
}

Bu dosyayı örneğin Odev.java adıyla kaydederseniz derleyici, dosyanın beklenen adla eşleşmediğini bildirir. Hata mesajlarında genellikle class Main bölümü kodda bulunan sınıfı, file named Main.java bölümü ise derleyicinin beklediği dosya adını gösterir. Yani mesajdaki iki adı ayrı ayrı okuyun: biri sınıf bildiriminin adıdır, diğeri dosyanın sahip olması gereken addır.

Java büyük-küçük harfe duyarlıdır. Aşağıdaki adlar üç farklı sınıf adı olarak kabul edilir:

  • Main
  • main
  • MAIN

Dolayısıyla public class Main için doğru dosya adı Main.java olur. main.java veya MAIN.java kullanmak bazı dosya sistemlerinde ayrıca sorun çıkarabilir. Özellikle büyük-küçük harfe duyarlı ortamlarda bu fark, yalnızca görüntüleme biçimi değil, gerçek bir ad uyuşmazlığıdır.

Bir .java dosyasında yalnızca bir top-level public sınıf bulunabilir. Ancak yardımcı sınıflar public olmadan aynı dosyaya eklenebilir:

public class Main {
    public static void main(String[] args) {
        Mesaj yazici = new Mesaj();
        yazici.yaz();
    }
}

class Mesaj {
    void yaz() {
        System.out.println("Merhaba Java");
    }
}

Burada dosyanın adı Main.java olmalıdır. Mesaj sınıfı aynı dosyada yer alabilir; çünkü public değildir. Buna karşılık aynı dosyada hem public class Main hem de public class Mesaj tanımlamak, iki farklı dosya adı gerektireceği için geçerli değildir.

Yanlış Dosya Adı ve Büyük-Küçük Harf Hatası Nasıl Düzeltilir?

Yanlış Dosya Adı ve Büyük-Küçük Harf Hatası Nasıl Düzeltilir?

İlk teşhis adımında dosya adı ile public sınıf adını sistematik biçimde karşılaştırın. Örneğin dosyanızın adı Odev.java, içeriği ise şu olsun:

public class Main {
    public static void main(String[] args) {
        System.out.println("İlk Java programım");
    }
}

Bu durumda yapılacak işlem sırası şöyledir:

  1. Dosyanın içindeki sınıf bildirimini bulun.
  2. public class ifadesinden sonra gelen adı okuyun: Main.
  3. Dosyayı uzantısını koruyarak Main.java adıyla yeniden adlandırın.
  4. Aynı klasördeki eski .class dosyalarını temizleyin.
  5. Dosyayı yeniden derleyin: javac Main.java.

Derleme başarılı olduğunda hata metni yerine aynı klasörde Main.class dosyasının oluşması beklenir. Programı çalıştırırken ise uzantı yazılmaz: java Main. java Main.java ile java main komutlarını birbirine karıştırmak, dosya adı düzeltilmiş olsa bile yeni bir çalıştırma hatasına yol açabilir.

Dosya adını değiştirirken yalnızca yazılış biçimine bakmayın. Main.java ile main.java arasındaki farkı özellikle dosya sisteminin büyük-küçük harfe duyarlı olduğu ortamlarda açıkça kontrol edin. IDE dosya sekmesinde doğru ad görünse bile terminalde bulunduğunuz klasörde eski bir dosya kalmış olabilir.

Bu adımların yanında sınıf, dosya ve terminal konumlarını birlikte kontrol etmekte zorlanıyorsanız, adım adım Java hata ayıklama desteği kişisel çalışma sürecinizi daha düzenli hâle getirebilir.

Son kontrol: Public sınıf adı dosya adıyla aynı mı, harflerin büyük-küçük yazımı eşleşiyor mu, dosyada tek bir top-level public sınıf mı var, eski .class dosyaları temizlendi mi ve komutlar doğru klasörde mi çalıştırılıyor?

Aynı Dosyada Birden Fazla public Sınıf Varsa Ne Olur?

Java’da bir dosyada iki public top-level sınıf tanımlamak, dosya adı kuralının ihlal edilmesine yol açar. Örneğin aşağıdaki sınıflar aynı First.java dosyasına yazılırsa derleme hatası alırsınız:

public class First {
}

public class Second {
}

Bu dosyada iki ayrı public sınıf vardır; ancak Java kaynak dosyasının adı yalnızca First.java ile eşleşmektedir. Second sınıfı için de kendi adıyla eşleşen bir dosya gerekir. Bu nedenle her public sınıfın, sınıf adıyla aynı ada sahip ayrı bir dosyada bulunması gerekir.

Bu durumda iki temel çözüm vardır:

  • Sınıfları ayrı dosyalara ayırmak: First sınıfı First.java, Second sınıfı ise Second.java içinde yer alır.
  • Yardımcı sınıfı public olmaktan çıkarmak: Sınıflardan yalnızca ana sınıf public bırakılır, diğer sınıfın başındaki public kaldırılır.

İkinci seçenek, küçük konsol ödevlerinde sık kullanılan pratik bir çözümdür. Aşağıdaki örnekte yalnızca Main sınıfı public durumdadır. Greeter ise aynı dosyada bulunan yardımcı sınıftır:

public class Main {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.message());
    }
}

class Greeter {
    String message() {
        return "Merhaba Java";
    }
}

Dosyayı tam olarak Main.java adıyla kaydedip aynı klasörde şu komutları çalıştırın:

javac Main.java
java Main

Beklenen çıktı şöyledir:

Merhaba Java

package Satırı ile Klasör Yolu Uyuşmuyorsa Nasıl Kontrol Edilir?

package Satırı ile Klasör Yolu Uyuşmuyorsa Nasıl Kontrol Edilir?

Dosya adı doğru olsa bile package bildirimi ile klasör yapısı uyuşmuyorsa Java programı derleme veya çalıştırma aşamasında sorun çıkarabilir. Örneğin dosyanın başında şu satır bulunuyorsa:

package okul.proje;

Main.java dosyasının paket yapısını temsil eden klasörler altında bulunması beklenir. Kök klasör üzerinden doğru yapı şu şekildedir:

proje-koku/
└── okul/
    └── proje/
        └── Main.java

Burada okul.proje ifadesindeki nokta, klasör yolunda ayırıcı görevi görür: okul/proje. package satırı da dosyanın baş tarafında, sınıf tanımından önce yer almalıdır.

Uyuşmazlık varsa iki farklı çözüm uygulanabilir:

  • Dosyayı, package satırına uygun klasörlere taşımak.
  • package satırını dosyanın gerçekten bulunduğu klasör yapısına göre düzenlemek.

Bu iki çözümü birbirine karıştırmamak önemlidir. Dosyayı taşımadan yalnızca paket adını değiştirmek veya paket adını değiştirmeden dosyayı rastgele başka bir klasöre koymak sorunu çözmeyebilir. Önce kök klasörü belirleyin, ardından paket adındaki her parçanın karşılık geldiği klasörleri tek tek kontrol edin.

javac ve java Komutları Doğru Klasörde Nasıl Kullanılır?

Java dosyasını çalıştırırken iki farklı komut kullanılır: javac derler, java çalıştırır. Bu ayrımı bilmek, dosya adı ve sınıf adı doğru olduğu hâlde alınan komut hatalarını çözmeyi kolaylaştırır. Ayrıca komutlar, dosyanın bulunduğu klasöre veya package yapısına göre yazılmalıdır.

Package olmayan bir Java dosyasını derleme ve çalıştırma

Örneğin aşağıdaki dosyanın adı Main.java olsun:

public class Main {
    public static void main(String[] args) {
        System.out.println("Program çalıştı.");
    }
}

Terminali Main.java dosyasının bulunduğu klasörde açarak şu komutları çalıştırabilirsiniz:

javac Main.java
java Main

javac Main.java komutu kaynak kodunu derler ve başarılı olursa Main.class dosyasını oluşturur. Derleme sırasında hata yoksa çoğu durumda terminalde ayrıca bir başarı mesajı görünmez. Ardından java Main komutu derlenmiş sınıfı çalıştırır ve ekrana şu çıktı gelir:

Program çalıştı.

Burada dikkat edilmesi gereken nokta, java komutunda .java uzantısının yazılmamasıdır. java Main.java ile java Main aynı kullanım değildir; temel derleme ve çalıştırma akışında önce javac, ardından uzantısız sınıf adı kullanılır.

Package kullanan bir dosyada doğru komutlar

Bu kez dosyanın içeriği şöyle olsun:

package okul.proje;

public class Main {
    public static void main(String[] args) {
        System.out.println("Package ile çalıştı.");
    }
}

Bu dosya, proje kökünden başlayarak okul/proje/Main.java yolunda bulunmalıdır. Terminal de proje kökünde açılmalıdır. Komut akışı şöyledir:

javac okul/proje/Main.java
java okul.proje.Main

İkinci komutta klasör ayırıcıları kullanılmaz; package adı noktalarla yazılır ve sınıf adı sona eklenir. Bu nedenle java Main eksik, java okul.proje.Main.java ise yanlış biçimdir. Doğru tam sınıf adı okul.proje.Main şeklindedir.

Komut satırında zorlanıyorsanız, temel derleme ve dosya yapısı mantığını asenkron Java video eğitimleri içinde adım adım tekrar ederek pekiştirebilirsiniz.

Durum Derleme komutu Çalıştırma komutu Beklenen sonuç
Package yok, terminal Main.java klasöründe javac Main.java java Main Main.class oluşur ve program çalışır
package okul.proje; var, terminal proje kökünde javac okul/proje/Main.java java okul.proje.Main Package yapısına uygun sınıf çalışır
Java dosyası başka klasörde, terminal yanlış konumda Dosya yolu bulunamaz veya hata oluşur Sınıf bulunamayabilir Önce çalışma klasörü düzeltilmelidir

Beş Parçalı Java Hata Teşhis Sırası ve Son Kontrol Listesi

Public class ve dosya adı hatasını tek bakışta çözmek için aşağıdaki sırayı izleyin. Her adımda önce belirtiyi tanımlayın, sonra yalnızca gerekli kısmı düzeltin.

  1. Public sınıf adı ile dosya adını karşılaştırın.

    Neye bakılır: public class Main satırındaki sınıf adına ve dosyanın adına bakılır. Belirti: Dosya Program.java, sınıf ise Main olarak tanımlanmıştır. Düzeltme: Dosyayı Main.java olarak yeniden adlandırın veya sınıf adını dosya adına uygun hâle getirin.

  2. Birden fazla top-level public class olup olmadığını kontrol edin.

    Neye bakılır: Dosyanın en dış seviyesinde kaç tane public class bulunduğu incelenir. Belirti: Aynı dosyada iki public sınıf vardır. Düzeltme: Her public sınıfı kendi adıyla eşleşen ayrı bir .java dosyasına taşıyın. Public olmayan sınıflar aynı dosyada bulunabilir; ancak dosya adı yine public sınıf kuralına göre belirlenir.

  3. Package satırını klasör yoluyla eşleştirin.

    Neye bakılır: package okul.proje; satırı ile klasörlerin okul/proje biçiminde olup olmadığı kontrol edilir. Belirti: Dosya farklı bir klasördedir veya package adı yazım olarak uyuşmaz. Düzeltme: Package satırını ya da klasör yapısını aynı hiyerarşiyi gösterecek şekilde düzeltin.

  4. javac komutunda kaynak dosyasını ve çalışma klasörünü kontrol edin.

    Neye bakılır: Derleme komutunun doğru klasörden çalıştırılıp çalıştırılmadığına bakılır. Belirti: “Dosya bulunamadı” veya kaynak dosyaya erişilemiyor benzeri bir hata görülür. Düzeltme: Terminali proje köküne ya da package olmayan dosyanın bulunduğu klasöre taşıyıp doğru .java yolunu yazın.

  5. java komutunda doğru tam sınıf adını kullanın.

    Neye bakılır: Çalıştırma komutunda package adının ve sınıf adının birlikte yazılıp yazılmadığı kontrol edilir. Belirti: Derleme başarılı olduğu hâlde sınıf bulunamıyor veya çalıştırılamıyor. Düzeltme: Package varsa noktalarla tam sınıf adını yazın; .java uzantısını eklemeyin.

Son kontrolü şu listeyle yapabilirsiniz:

  • Dosya adının sonunda .java uzantısı var mı?
  • Dosya adı ile public sınıf adı birebir aynı mı?
  • Büyük-küçük harfler tamamen eşleşiyor mu?
  • Dosyada yalnızca bir top-level public sınıf mı var?
  • package satırı klasör yolu ile uyumlu mu?
  • javac komutu doğru kaynak dosyasını gösteriyor mu?
  • Derleme gerçekten hatasız tamamlandı mı?
  • java komutunda uzantısız ve doğru sınıf adı mı kullanılıyor?
  • Eski veya yanlış klasördeki .class dosyaları kafa karıştırıyor olabilir mi?

Java kavramlarını kısa sorularla tekrar etmek isteyenler, Java bilgi testi üzerinden dosya, sınıf ve temel sözdizimi bilgilerini kontrol edebilir.

Sık Sorulan Sorular

Java’da public class adı neden dosya adıyla aynı olmak zorundadır?

Java, public sınıfın hangi dosyada bulunduğunu dosya adına bakarak belirler. Bu nedenle public class Main tanımı bulunan dosyanın adı Main.java olmalıdır.

Dosya adında büyük-küçük harf farkı Java derleme hatasına neden olur mu?

Evet. Main.java ile main.java aynı kabul edilmeyebilir. Sınıf adı, dosya adı ve komutlarda kullanılan harfler aynı yazılmalıdır.

Aynı Java dosyasında birden fazla class bulunabilir mi?

Evet, aynı dosyada birden fazla sınıf tanımlanabilir. Ancak aynı dosyada birden fazla top-level public sınıf bulunamaz. Public sınıflar ayrı dosyalara ayrılmalıdır.

package satırı ile klasör yolu uyuşmuyorsa hangi dosya veya klasör değiştirilmelidir?

İki seçenek vardır: Package satırını mevcut klasör yapısına göre değiştirmek veya klasörleri package hiyerarşisine göre yeniden düzenlemek. Önemli olan iki tarafın birebir eşleşmesidir.

javac ile java komutları arasındaki fark nedir?

javac Java kaynak dosyasını derleyerek class dosyası oluşturur. java ise derlenmiş sınıfı çalıştırır; package varsa tam sınıf adı noktalarla yazılır ve .java uzantısı kullanılmaz.

Bu sırayı uyguladığınızda hata mesajını rastgele değişikliklerle değil, dosya adı, package yapısı, derleme ve çalıştırma adımlarını ayırarak çözebilirsiniz.

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ı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 500'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara