Menu
CoddyTech

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 aitti. 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ı bulunurlar.

Peki ya tüm nesneler arasında paylaşılan verilere ihtiyacınız varsa? İşte bu noktada statik değişkenler (sınıf değişkenleri olarak da adlandırılır) devreye girer. Statik bir değişken belirli 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şılan
    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 kendine ait bir name değeri vardır, ancak hepsi aynı totalCount değerini 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 üzerinden değil, 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 (örneğin bir öğrencinin adı) için örnek değişkenleri kullanın. Paylaşılması gereken veriler (örneğin kaç nesnenin var olduğunu saymak) için statik değişkenleri kullanın.

challenge icon

Görev

Kolay

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

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

  • Book.java: Tek tek kitap bilgilerini izlerken aynı zamanda şimdiye kadar oluşturulan tüm kitapların sayısını 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 izleyen bir statik değişken totalBooks (int)
    • Başlık ve fiyatı alan ve toplam kitap sayısını artıran bir kurucu
    • Başlık için bir getTitle() alıcısı
    • Fiyat için bir getPrice() alıcısı
    • Oluşturulan toplam kitap sayısını döndüren bir getTotalBooks() statik yöntemi
  • Main.java: Birden fazla Book nesnesi oluşturun ve statik sayacın tüm örnekleri nasıl izlediğ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 yöntemi 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 yönteme 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.

GEREKLİ ÇIKTI BİÇİMİ: [Çevrilmiş içeriğiniz burada]

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ştur
        
        // TODO: Her kitabın başlığını ve fiyatını şu formatta yazdır: [title]: $[price]
        // Fiyatı 2 ondalık basamağa biçimlendirmek için String.format("%.2f", price) kullan
        
        // TODO: Statik metodu kullanarak toplam kitap sayısını yazdır
        // Format: Total books: [count]
        // Statik metoda sınıf adı üzerinden erişmeyi unutma: 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