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.

Şimdiye kadar oluşturduğumuz her alan belirli bir nesneye aittir. Her BankAccount nesnesinin kendine ait bir balance değeri ve her Product nesnesinin kendine ait bir name değeri vardır. Bunlar örnek değişkenleridir - bir sınıfın her örneği için ayrı ayrı var olurlar.

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 belirli 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 değişkeni vardır, ancak hepsi aynı totalCount değişkenini 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 (öğrencinin adı gibi) için örnek değişkenleri kullanın. Paylaşılması gereken veriler (kaç nesnenin var olduğunu saymak gibi) için statik değişkenleri kullanın.

challenge icon

Görev

Kolay

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

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

  • Book.java: Tek tek kitap bilgilerini takip ederken şimdiye kadar oluşturulmuş tüm kitapların sayısını da tutan bir Book sınıfı oluşturun:
    • Her kitaba özgü bir örnek değişkeni title (String)
    • Her kitaba özgü bir örnek değişkeni price (double)
    • Tüm Book nesneleri arasında paylaşılan ve kaç kitap oluşturulduğunu takip eden bir statik değişken totalBooks (int)
    • Başlık ve fiyatı alan ve toplam kitap sayısını artıran bir oluşturucu
    • 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ın tümünü oluşturduktan sonra dört satır yazdırın:
    • Her kitabın başlığını ve fiyatını şu biçimde yazdırın: [title]: $[price] (fiyat 2 ondalık basamakla biçimlendirilmiş olarak)
    • Statik metodu kullanarak toplam kitap sayısını yazdırın: Total books: [count]

Altı girdiyi şu sırayla 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ı biçimlendirmek için String.format("%.2f", price) 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 yuvarlamak 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

Kendi başına pratik yap: Online Java derleyicisi