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

Java Sınıf ve Nesne Farkı Nedir? Basit Bir Örnekle Nasıl Anlaşılır?

java-sinif-ve-nesne-farki-nedir-basit-bir-ornekle-nasil-anlasilir
Bu yazıda neler var?
  1. Java'da Sınıf (Class) Nedir?
  2. Java'da Nesne (Object) Nedir?
  3. Sınıf ve Nesne Arasındaki Temel Farklar
  4. Basit Bir Örnekle Sınıf-Nesne İlişkisi
  5. Sık Yapılan Hatalar ve Kafa Karışıklıkları
  6. İlgili Kaynaklar
  7. Sık Sorulan Sorular

Java'da sınıf (class), bir nesnenin özelliklerini ve davranışlarını tanımlayan bir şablondur; nesne (object) ise bu şablondan new anahtar kelimesiyle üretilen, bellekte gerçek bir yer kaplayan somut örnektir. Yani sınıf ve nesne farkı temelde "tasarım" ile "üretim" arasındaki farka benzer: sınıf bir plan, nesne ise o plandan inşa edilmiş gerçek yapıdır. Bir sınıftan istediğiniz kadar nesne oluşturabilirsiniz, her biri kendi verisini taşır.

Java'da Sınıf (Class) Nedir?

Sınıf, bir nesnenin sahip olacağı alanları (değişkenleri) ve metotları (davranışları) tanımlayan bir kalıptır. Kendisi tek başına bellekte bir nesne gibi yer kaplamaz; sadece "bu tipten bir şey oluşturulursa nasıl olacağını" belirler. Örneğin bir Araba sınıfı, her arabanın renk, marka gibi özelliklere ve hızlan() gibi davranışlara sahip olacağını tanımlar, ama kendisi belirli bir arabayı temsil etmez.

Java'da (JDK 17 ve sonrasında da geçerli olan klasik sözdizimiyle) bir sınıf şu şekilde tanımlanır:

public class Araba {
    // Alanlar (özellikler)
    String renk;
    String marka;

    // Metot (davranış)
    void hizlan() {
        System.out.println(marka + " hızlanıyor.");
    }
}

Burada Araba bir sınıf adıdır ve büyük harfle başlaması Java'nın yaygın adlandırma kuralıdır. Sınıf içindeki renk ve marka alanları, bu sınıftan üretilecek her nesnenin taşıyacağı verileri temsil eder; ancak sınıfın kendisinde bu alanların somut bir değeri yoktur. Değer, ancak nesne oluşturulduğunda ortaya çıkar.

Java'da Nesne (Object) Nedir?

Nesne, bir sınıftan new anahtar kelimesi kullanılarak türetilen gerçek örnektir. Sınıf bir tanım olduğu için çalışma zamanında hiçbir şey yapmaz; asıl işi yapan, bellekte yer kaplayan ve kendi alan değerlerine sahip olan nesnelerdir. Aynı sınıftan üretilen her nesne, birbirinden bağımsız veri taşıyabilir.

public class Main {
    public static void main(String[] args) {
        Araba araba1 = new Araba();
        araba1.renk = "Kırmızı";
        araba1.marka = "Toyota";

        Araba araba2 = new Araba();
        araba2.renk = "Mavi";
        araba2.marka = "Honda";

        araba1.hizlan(); // Toyota hızlanıyor.
        araba2.hizlan(); // Honda hızlanıyor.
    }
}

Bu örnekte araba1 ve araba2, aynı Araba sınıfından üretilmiş iki farklı nesnedir. İkisi de aynı şablonu kullanır ama kendi renk ve marka değerlerine sahiptir. new Araba() ifadesi, Java'ya "bu sınıfın tanımına uygun yeni bir nesne oluştur ve bunun için bellekte yer ayır" der. Oluşturulan bu nesneye erişmek için de araba1 gibi bir referans değişkeni kullanılır.

Sınıf ve Nesne Arasındaki Temel Farklar

Sınıf ve nesne kavramlarını yan yana koyduğunda aradaki fark çok daha net görünür. İşte en önemli ayrımlar:

  • Bellek kullanımı: Sınıf, bellekte yer kaplamaz; sadece bir şablon tanımıdır. Nesne oluşturulduğunda ise heap bellekte gerçek bir alan ayrılır.
  • Tanım vs örnek: Sınıf, bir yapının nasıl olması gerektiğini tanımlar (hangi alanlar, hangi metotlar olacak). Nesne ise bu tanımın somut, çalışan bir örneğidir.
  • Sayı ilişkisi: Bir projede tek bir sınıf tanımlarsın ama o sınıftan istediğin kadar nesne oluşturabilirsin. Yani ilişki hep "bir sınıf, çok nesne" şeklindedir.
  • Yaşam döngüsü: Sınıf, program çalışırken (derleme sırasında) sabittir ve değişmez. Nesneler ise program çalıştığı sürece oluşturulur, kullanılır ve çöp toplayıcı (garbage collector) tarafından bellekten temizlenir.
  • Değer taşıma: Sınıfın kendisi bir değer taşımaz. Nesneler ise her biri kendi alan değerlerini (state) taşır, bu yüzden aynı sınıftan üretilen iki nesne birbirinden tamamen farklı verilere sahip olabilir.

Bu farkları aklında tutmanın en kolay yolu şu: sınıf "ne olacağını" söyler, nesne ise "gerçekten var olan şeydir."

Basit Bir Örnekle Sınıf-Nesne İlişkisi

Teoriyi koda dökünce her şey daha da somutlaşır. Basit bir Araba sınıfı düşünelim:

public class Araba {
    String marka;
    int hiz;

    void hizlan() {
        hiz += 10;
        System.out.println(marka + " hızı: " + hiz);
    }
}

public class Main {
    public static void main(String[] args) {
        Araba araba1 = new Araba();
        araba1.marka = "Toyota";
        araba1.hizlan();

        Araba araba2 = new Araba();
        araba2.marka = "Renault";
        araba2.hizlan();
    }
}

Burada Araba sınıfı, her arabanın sahip olacağı ortak özellikleri (marka, hız) ve davranışı (hızlanma) tanımlıyor. araba1 ve araba2 ise bu sınıftan new anahtar kelimesiyle üretilen iki farklı nesne. Her ikisi de aynı sınıfın kalıbından geliyor ama kendi marka ve hiz değerlerini bağımsız şekilde tutuyor. araba1in hızını artırman araba2yi hiçbir şekilde etkilemiyor, çünkü her nesne kendi belleğinde ayrı bir veri kümesi barındırıyor. İşte sınıf-nesne ilişkisinin pratikte anlamı tam olarak bu: aynı şablondan üretilen ama birbirinden bağımsız çalışan gerçek varlıklar.

Sık Yapılan Hatalar ve Kafa Karışıklıkları

Java öğrenmeye başlayanların sınıf ve nesne kavramında en çok tökezlediği nokta, ikisini eş anlamlı gibi kullanmaları. "Sınıf oluşturdum" ile "nesne oluşturdum" cümleleri birbirinin yerine kullanılıyor ama bu iki işlem tamamen farklı şeyler. Bir sınıf yazmak, sadece bir plan hazırlamaktır; o plandan gerçek bir varlık üretmediğiniz sürece bellekte hiçbir şey oluşmaz. Bu yüzden Araba sınıfını yazdıktan sonra "artık bir arabam var" demek yanlıştır. Arabanız, ancak new Araba() satırını çalıştırdığınızda ortaya çıkar.

Bir diğer yaygın hata, sınıf içindeki alanlara (field) atanan değerleri her nesne için ortak sanmak. Aslında her nesne kendi alan değerlerini bağımsız olarak taşır. Aynı sınıftan üretilen iki nesnenin bir alanını değiştirmek, diğer nesneyi etkilemez. Yeni başlayanlar bazen bunu statik (static) alanlarla karıştırır; static olarak tanımlanan bir alan tüm nesneler arasında paylaşılır, ama normal bir instance alanı öyle değildir. Bu fark anlaşılmadan yazılan kodlarda "neden diğer nesnenin değeri de değişti" ya da tam tersi "neden değişmedi" gibi sorular ortaya çıkar.

Metotlarla ilgili de benzer bir karışıklık yaşanır. Bir metodu sınıf içinde tanımlamak, onu çağırmakla aynı şey değildir. Metot tanımı sadece "bu davranış nasıl çalışır" bilgisini taşır; metodun gerçekten çalışması için bir nesne üzerinden çağrılması gerekir (static metotlar hariç). Bu yüzden bir metodu yazdıktan sonra programın otomatik olarak o metodu çalıştıracağını düşünmek yaygın bir yanılgıdır.

Son olarak, constructor (yapıcı metot) ile normal metotların karıştırılması da sık görülür. Constructor, nesne oluşturulurken bir kere çalışır ve sınıfla aynı isme sahiptir; amacı nesneyi ilk değerleriyle hazırlamaktır. Normal bir metot ise nesne oluştuktan sonra istenildiği kadar çağrılabilir. Bu ayrımı netleştirmek, sınıf-nesne ilişkisini daha sağlam kavramanıza yardımcı olur.

İlgili Kaynaklar

Sınıf ve nesne mantığını koda dökerek pekiştirmek isterseniz, Java programlarını adım adım yazıp çalıştırabileceğiniz Java programları sayfasına göz atabilirsiniz. Öğrendiklerinizi ölçmek için ise Java bilgi testleri bölümündeki sorularla kendinizi test edebilirsiniz.

Sık Sorulan Sorular

Bir sınıftan birden fazla nesne oluşturulabilir mi?

Evet. Bir sınıf sadece bir şablon olduğu için, aynı sınıftan istediğiniz kadar nesne oluşturabilirsiniz. Her nesne kendi bellek alanında bağımsız olarak yaşar ve kendi alan değerlerini taşır.

Nesne oluşturmadan bir sınıfın metotları çağrılabilir mi?

Genel olarak hayır. Normal (instance) metotların çalışması için önce o sınıftan bir nesne oluşturulması gerekir. Ancak static olarak tanımlanan metotlar, nesne oluşturulmadan doğrudan sınıf adı üzerinden çağrılabilir.

Sınıf ile veri tipi (data type) arasında bir ilişki var mı?

Evet. Bir sınıf tanımladığınızda, aslında yeni bir veri tipi oluşturursunuz. O sınıftan üretilen nesneler, bu yeni tipin örnekleridir; tıpkı int tipinden bir değişken oluşturmak gibi, Araba tipinden bir nesne oluşturursunuz.

Bir nesne yok edildiğinde sınıf da silinir mi?

Hayır. Sınıf, programın çalışması boyunca bellekte tanım olarak durur ve birden çok nesne için tekrar tekrar kullanılabilir. Bir nesnenin çöp toplayıcı (garbage collector) tarafından temizlenmesi, sınıfın kendisini etkilemez.

Sınıf ve nesne arasındaki bu temel ayrımı net bir şekilde kavramak, Java'da nesne yönelimli programlamanın diğer konularını (kalıtım, kapsülleme, çok biçimlilik) öğrenirken size sağlam bir temel sağlar.

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