Menu
Coddy logo textTech

Instance ve Statik Değişkenler

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 15 / 87.

Şu ana kadar oluşturduğumuz her alan belirli bir nesneye aittir. Her BankAccount kendi balance değerine sahiptir ve her Product kendi name değerine sahiptir. Bunlar örnek değişkenleridir (instance variables) - bir sınıfın her örneği için ayrı ayrı bulunurlar.

Peki ya tüm nesneler arasında paylaşılan verilere ihtiyacınız varsa? İşte burada statik değişkenler (sınıf değişkenleri olarak da adlandırılır) devreye girer. Statik bir değişken, herhangi bir nesneye değil, sınıfın kendisine aittir.

public class Student {
    private String name;           // Örnek değişkeni - her öğrenci için benzersiz
    private static int totalCount; // Statik değişken - tüm öğrenciler tarafından paylaşılır
    
    public Student(String name) {
        this.name = name;
        totalCount++;  // Paylaşılan sayacı artırır
    }
    
    public static int getTotalCount() {
        return totalCount;
    }
}

Birden fazla öğrenci oluşturduğunuzda, her birinin kendi name alanı vardır, ancak hepsi aynı totalCount alanını paylaşır:

Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.getTotalCount());  // Çıktı: 2

Statik değişkene bir nesne yerine sınıf adı (Student.getTotalCount()) aracılığıyla nasıl eriştiğimize dikkat edin. Bu, statik üyelerin örneklere değil, sınıfa ait olduğunu vurgular.

Nesneler arasında değişen veriler (bir öğrencinin adı gibi) için örnek değişkenlerini (instance variables) kullanın. Paylaşılması gereken veriler (kaç nesnenin var olduğunu saymak gibi) için statik değişkenleri (static variables) kullanın.

challenge icon

Görev

Kolay

Hem bireysel kitap ayrıntılarını hem de tüm koleksiyonunuzdaki toplam kitap sayısını örnek (instance) ve statik (static) değişkenler kullanarak takip eden bir Book envanter sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • Book.java: Bireysel kitap bilgilerini takip ederken aynı zamanda oluşturulan tüm kitapların sayısını tutan bir Book sınıfı oluşturun:
    • Bir örnek değişken title (String) - her kitaba özgü
    • Bir örnek değişken price (double) - her kitaba özgü
    • Bir statik değişken totalBooks (int) - tüm Book nesneleri arasında paylaşılan ve kaç kitap oluşturulduğunu takip eden
    • Başlık ve fiyatı alan ve toplam kitap sayısını artıran bir yapıcı (constructor)
    • Başlık için bir getter getTitle()
    • Fiyat için bir getter getPrice()
    • Oluşturulan toplam kitap sayısını döndüren bir statik metot getTotalBooks()
  • Main.java: Birden fazla Book nesnesi oluşturun ve statik sayacın tüm örnekleri nasıl takip ettiğini gösterin. Girdi olarak üç kitap başlığı ve üç fiyat alacaksınız. Üç kitabı da oluşturduktan sonra dört satır yazdırın:
    • Her kitabın başlığı ve fiyatı şu formatta: [title]: $[price] (fiyat 2 ondalık basamak olacak şekilde formatlanmış)
    • Statik metodu kullanarak toplam kitap sayısı: Total books: [count]

Sırasıyla altı girdi alacaksınız: title1, price1, title2, price2, title3, price3.

Statik metoda bir nesne örneği üzerinden değil, sınıf adı üzerinden (Book.getTotalBooks()) erişmeyi unutmayın. Fiyatları formatlamak için String.format("%.2f", price) kullanın.

Kopya kağıdı

Bir statik değişken (sınıf değişkeni olarak da adlandırılır), her nesneye özgü olan örnek (instance) değişkenlerin aksine, sınıfın kendisine aittir ve o sınıfın tüm örnekleri arasında paylaşılır.

static anahtar kelimesini kullanarak bir statik değişken tanımlayın:

public class Student {
    private String name;           // Instance variable - unique per student
    private static int totalCount; // Static variable - shared by all students
    
    public Student(String name) {
        this.name = name;
        totalCount++;  // Increments the shared counter
    }
    
    public static int getTotalCount() {
        return totalCount;
    }
}

Statik değişkenlere ve metotlara bir nesne örneği üzerinden değil, sınıf adı üzerinden erişin:

Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.getTotalCount());  // Output: 2

Nesneler arasında değişen veriler için örnek (instance) değişkenleri kullanın. Tüm örnekler arasında paylaşılması gereken veriler için statik değişkenleri kullanın.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Üç kitap için girdileri oku
        String title1 = scanner.nextLine();
        double price1 = Double.parseDouble(scanner.nextLine());
        String title2 = scanner.nextLine();
        double price2 = Double.parseDouble(scanner.nextLine());
        String title3 = scanner.nextLine();
        double price3 = Double.parseDouble(scanner.nextLine());
        
        // TODO: Yukarıdaki girdileri kullanarak üç Book nesnesi oluşturun
        
        // TODO: Her kitabın başlığını ve fiyatını şu formatta yazdırın: [title]: $[price]
        // Fiyatı 2 ondalık basamağa biçimlendirmek için String.format("%.2f", price) kullanın
        
        // TODO: Statik yöntemi kullanarak toplam kitap sayısını yazdırın
        // Format: Total books: [count]
        // Statik yönteme sınıf adı üzerinden erişmeyi unutmayın: Book.getTotalBooks()
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler