Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Java 25 Unnamed Classes ve Instance Main Methods Nasıl Kullanılır?

java-25-unnamed-classes-ve-instance-main-methods-nasil-kullanilir
Bu yazıda neler var?
  1. Küçük Java programlarında sınıf ve giriş kodu nasıl sadeleşir?
  2. Unnamed class yazımının temel biçimi nasıl kurulur?
  3. Instance main method ile ilk çalışan program nasıl yazılır?
  4. Parametre alan main, değişken ve metot nasıl birlikte kullanılır?
  5. Unnamed class için dosya, derleme ve çalıştırma kuralları nelerdir?
  6. Geleneksel static main ile yeni biçim arasında nasıl seçim yapılır?
  7. Sık Sorulan Sorular

Java 25 Unnamed Classes ve Instance Main Methods, küçük bir Java programında açık class bildirimi ile public static void main(String[] args) kalıbının bir bölümünü kaldırır. Kaynak dosyasına doğrudan alan ve metot yazabilir, void main() gibi bir instance main method kullanabilir ve Java’nın bu üyeleri örtük olarak bildirilen bir sınıfın parçası kabul etmesini sağlayabilirsin.

Java SE 25’te bu yaklaşım artık preview değil, Compact Source Files and Instance main Methods adıyla kalıcı bir dil özelliğidir. Bu nedenle Java 25 ile kullanırken preview özelliğini etkinleştiren ek bir seçenek gerekmez. Yine de bu yazım biçimi her Java projesi için zorunlu değildir; özellikle küçük ve tek dosyalı programlarda kullanılan bir sadeleştirme seçeneğidir.

Küçük Java programlarında sınıf ve giriş kodu nasıl sadeleşir?

Geleneksel bir Java başlangıç programında sınıf adını, sınıf gövdesini, public erişim belirtecini, static değiştiricisini ve String[] parametresini birlikte yazarsın. Java 25’in kompakt kaynak dosyaları bu başlangıç kodunun bir kısmını görünmez hâle getirir. Böylece değişkenler, kontrol akışı ve metotlar üzerinde çalışırken sınıf bildiriminin ayrıntıları daha sonraki aşamalara bırakılabilir.

Terimler arasındaki ayrım önemlidir. Unnamed Classes and Instance Main Methods, özelliğin önceki preview dönemindeki adlandırmasıdır. Java SE 25’te resmî başlık Compact Source Files and Instance main Methods olarak değiştirilmiştir. Java Dil Şartnamesi, bu kaynak dosyasının içindeki açık sınıf gövdesi dışında kalan üyelerden oluşan yapıyı implicitly declared class, yani örtük olarak bildirilen sınıf olarak tanımlar. Bu sınıfı içeren kaynak dosyası ise Oracle belgelerinde compact source file, şartnamede sözdizimsel olarak compact compilation unit şeklinde geçer.

Unnamed class yazımının temel biçimi nasıl kurulur?

Unnamed class yazımının temel biçimi nasıl kurulur?

En küçük biçimde kaynak dosyası, açık bir sınıf bildirimiyle başlamaz. Alan ve metot bildirimleri doğrudan dosyada yer alır:

String mesaj = "Merhaba";

void main() {
    System.out.println(mesaj);
}

Beklenen çıktı:

Merhaba

Buradaki mesaj alanı ve main metodu, derleyici tarafından örtük olarak bildirilen sınıfın üyeleri kabul edilir. main bildiriminde static bulunmadığı için bu metot bir instance metottur. Açık sınıf adı kaynakta görünmez. Java Dil Şartnamesi’ne göre örtük sınıfın adı ana bilgisayar sistemi tarafından belirlenir ve dosya adıyla eşleştirilmesi tipik bir uygulama ayrıntısıdır; bu ad, kaynak kod içinde sınıfı doğrudan kullanmak için yazılamaz.

import bildirimleri üyelerden önce yazılabilir. package bildirimi ise bu biçimin parçası değildir; örtük sınıf adsız pakette bulunur. Ayrıca kompakt kaynak dosyaları, java.base modülünün dışa aktardığı paketlerdeki public üst düzey sınıf ve arayüzleri isteğe bağlı olarak içe aktarılmış kabul eder.

Bu yapıda alanlar, metotlar, iç içe sınıflar ve iç içe arayüzler tanımlanabilir; kaynak dosyasında en az bir metot bulunmalıdır. Açık bir constructor ya da instance ve static initializer bloğu yazılamaz. Örtük sınıfın parametresiz varsayılan constructor’ı vardır. Aynı dosyada yazılan sınıf ve arayüz bildirimleri yeni üst düzey yapılar değil, örtük sınıfın üye türleridir. Temel sınıf, metot ve giriş noktası kavramlarını pekiştirmek için Java bilgi testini çözebilirsin.

Instance main method ile ilk çalışan program nasıl yazılır?

Java SE 25'te en kısa çalıştırılabilir instance main bildirimi void main() biçimindedir. Bu kullanımda public, static ve String[] yazmak zorunlu değildir. Özellik, Java SE 25'te kalıcı dil özellikleri arasındadır.

void main() {
    System.out.println("Merhaba, Java!");
}

Beklenen çıktı:

Merhaba, Java!

Kodu satır satır okuyalım. void, giriş metodunun değer döndürmediğini belirtir. main, Java başlatma protokolünün aradığı özel addır. Boş parantez, metodun parametre almadığını gösterir. static yazılmadığı için bu metot bir instance metottur. Kaynak dosyasında açık bir class bildirimi bulunmasa da Java, dosyadaki metotları içeren örtük bir üst düzey sınıf bildirir. Bu sınıfın varsayılan parametresiz yapıcısı kullanılarak bir nesne oluşturulur ve main bu nesne üzerinde çağrılır.

Geleneksel yapıdaki public static void main(String[] args) metodu sınıf üzerinden doğrudan çağrılır. Instance main yaklaşımında ise giriş noktası bir nesnenin metodudur. Bu fark yalnızca birkaç karakterin silinmesi anlamına gelmez: programın başlangıcında nesne oluşturma ve instance metot kavramı da devreye girer. Böylece aynı nesneye ait alan ve metotlar, başlangıç kodunda static yapılmadan kullanılabilir.

  • Geçerli aday metodun adı main, dönüş türü void olmalıdır.
  • Metot instance veya static olabilir; erişim düzeyi public, protected ya da paket erişimi olabilir.
  • Metot ya parametresiz olmalı ya da tek bir String[] veya eşdeğer String... parametresi almalıdır.

Hem parametreli hem parametresiz aday varsa tek String[] parametresi alan biçim önce seçilir. Instance biçim seçildiğinde sınıf başlatılır, ardından parametresiz yapıcıyla nesne oluşturulur ve giriş metodu bu nesne üzerinde çalıştırılır.

Parametre alan main, değişken ve metot nasıl birlikte kullanılır?

Parametre alan main, değişken ve metot nasıl birlikte kullanılır?

Instance main metodu komut satırından gelen değerleri String[] args dizisiyle alabilir. Compact source file içinde açık sınıf gövdesi yazılmadan alan ve metot tanımları yapılabilir; bu bildirimler örtük sınıfın üyeleri olarak değerlendirilir.

String selamlama = "Merhaba";

String selamla(String ad) {
    return selamlama + ", " + ad + "!";
}

void main(String[] args) {
    String ad = args[0];
    String mesaj = selamla(ad);
    System.out.println(mesaj);
}

Tek komut satırı girdisi: Deniz

Beklenen çıktı:

Merhaba, Deniz!

Java başlatıcısı, komut satırındaki her girdiyi args dizisinin bir elemanı olarak aktarır. Bu örnekte args[0] değeri ad adlı yerel değişkene atanır. selamla(ad) çağrısı, instance main metodu içinden yapıldığı için örtük olarak this.selamla(ad) anlamına gelir. Yani çağrı, main metodunun çalıştığı aynı nesne bağlamındaki instance metodu kullanır. selamlama alanı da bu nesnenin alanıdır ve metot tarafından doğrudan okunur. Parametre verilmeden çalıştırılan bir programda ise args[0] yerine önce args.length kontrolü yapılmalıdır.

Unnamed class için dosya, derleme ve çalıştırma kuralları nelerdir?

Başlıkta unnamed class diye anılan yapı, Java SE 25 belgelerinde compact source file ve implicitly declared class adlarıyla açıklanır. Dosya adı, üretilen sınıf dosyası, giriş noktası ve classpath ilişkisini şu kontrol listesiyle doğrulayabilirsin.

  1. Dosya adını ve uzantıyı kontrol et: javac kaynak dosyasında .java uzantısı bekler. Açık bir sınıf bildirimi olmadığı için sınıf adı, dosyanın uzantısız adına göre host tarafından belirlenir. Bu nedenle basit bir dosya tabanlı uygulamada HelloWorld.java derlenince HelloWorld.class oluşur ve java HelloWorld ile çalıştırılır. Bu, public class adı eşleştirme kuralı değildir.
  2. Kaynak biriminin sınırlarını kontrol et: Başta import bildirimleri bulunabilir, ardından sınıf üyesi bildirimleri gelir. package bildirimi kullanılmaz; örtük sınıf unnamed package içinde yer alır. java.base tarafından dışa aktarılan türler otomatik kapsama alınır, diğer bağımlılıklar için normal import ve classpath kuralları geçerlidir. Örtük sınıf adlandırılamadığı için doğrudan new ile üretilemez; ayrıca compact dosyada constructor veya initializer bildirimi bulunmaz.
  3. Derleme yolunu seç: Kaynağı doğrudan çalıştırmak için java HelloWorld.java kullanılır. Kalıcı çıktı almak için javac -d out HelloWorld.java, ardından java --class-path out HelloWorld çalıştırılır. Source-file mode kaynağı bellekte derleyerek yürütür. Dosyanın .java uzantısı yoksa source-file mode için --source seçeneği gerekir.
  4. Giriş noktasını ve argümanları kontrol et: Erişilebilir void main(String[] args) seçilir, yoksa erişilebilir void main() aranır. Dosya veya sınıf adından sonra verilen değerler parametreli biçimde args dizisine aktarılır. Örneğin java HelloWorld.java Ada çağrısında ilk değer Ada olur.
  5. Hata durumunu daralt: Java 25 sözdizimini destekleyen bir JDK kullandığını, çalıştırılabilir bir main bulunduğunu ve derlenmiş çalıştırmada classpath'in out dizinini gösterdiğini kontrol et. Bu özellik Java SE 25'te kalıcıdır, yalnızca compact source file ve instance main kullanımı için --enable-preview gerekmez. Paketli, çok dosyalı, özel constructor'lı veya dışarıdan adıyla kullanılacak bir yapı gerekiyorsa açık sınıf bildirimi daha uygun olabilir.

Geleneksel static main ile yeni biçim arasında nasıl seçim yapılır?

İki biçim de aynı Java dilinin parçasıdır. Fark, sınıf bildirimini ne kadar erken görünür kılmak ve giriş noktasının nesneyle nasıl ilişkilendirileceğini açıkça göstermektir.

kod yapısı giriş noktası uygun kullanım bağlamı
public class App içinde public static void main(String[] args) static main, nesne oluşturulmadan çağrılır. Paket, çok dosya, açık sınıf sınırları ve büyüyen projeler.
Sınıf dışına yazılan üyeler, örtük sınıf ve void main() Instance main seçilirse örtük sınıfın varsayılan nesnesi oluşturulur. Tek dosyalı denemeler ve küçük bağımsız programlar.

Bağlantıyı şöyle kurabilirsin: sınıf, nesnelerin şablonudur; instance metot bir nesne üzerinden çalışır; main ise başlatıcının aradığı giriş noktasıdır. Geleneksel yapıda giriş noktası static olduğu için nesne oluşturulmadan çağrılır. Yeni biçimde instance main seçilirse Java önce örtük sınıfın varsayılan nesnesini oluşturur, sonra metodu bu nesne üzerinde çalıştırır. Sınıf ve nesne ilişkisini uygulamayla pekiştirmek için birebir Java özel ders programı içindeki kavramları bu ayrım üzerinden değerlendirebilirsin.

  1. Program tek dosyalı bir deneme mi? Evetse yeni biçim, sınıf sarmalayıcısını azaltarak kodu daha doğrudan gösterebilir.
  2. Sınıf ve nesne ilişkisini açıkça göstermek gerekiyor mu? Evetse geleneksel yapı, nesnenin nerede üretildiğini ve üyelerin hangi sınıfa ait olduğunu daha görünür kılar.
  3. Dosya büyüdükçe ekip organizasyonu ve araç uyumluluğu hangi biçimi daha anlaşılır kılıyor? Açık paket ve sınıf sınırlarına ihtiyaç varsa geleneksel yapı; bağımsız ve küçük kalan dosyalarda yeni biçim tercih edilebilir.

Yeni biçim her projede gerekli değildir. Öğretim, paylaşım veya büyüyen proje ihtiyaçlarında geleneksel yapı; kısa ve tek dosyalı çalışmalarda ise compact biçim koşula göre kullanılabilir.

Sık Sorulan Sorular

Unnamed class ile instance main method aynı şey midir?

Hayır. Unnamed class, sınıf bildiriminin örtük oluşturulmasını; instance main ise main metodunun static olmadan çalıştırılabilmesini anlatır. Aynı dosyada birlikte kullanılabilirler, ancak farklı kavramlardır.

Instance main method kullanırken static anahtar sözcüğü tamamen kaldırılır mı?

Hayır. Yalnızca giriş metodunun static olması zorunlu değildir. Örtük sınıfta static alanlar ve metotlar yine tanımlanabilir.

Unnamed class kullanan Java dosyasının adı nasıl belirlenir?

Dosyanın uzantısız adı pratikte sınıf adı olarak kullanılır. Örneğin HelloWorld.java için HelloWorld.class oluşur ve derlenmiş program java HelloWorld ile başlatılır.

Bu özellik Java SE 25'te kalıcı mı, yoksa önizleme olarak mı kullanılmalıdır?

Java SE 25'te kalıcı özelliktir. Önceki sürümlerdeki preview geçmişinden farklı olarak bu kullanım için --enable-preview gerekmez.

Yeni biçim ne zaman geleneksel sınıf ve main yapısına dönüştürülmelidir?

Paketli çok dosyalı yapı, özel constructor, dışarıdan kullanılacak API, ekip çalışması veya araç uyumluluğu önem kazandığında açık sınıf yapısına geçmek daha anlaşılır olabilir.

Küçük bir programda sade biçimi kullanabilir, kapsam ve organizasyon ihtiyacı arttığında geleneksel sınıf yapısına geçebilirsin.

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