Menu
Coddy logo textTech

Statik Bloklar

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

Bazen statik değişkenleri basit bir atamadan daha karmaşık bir mantıkla başlatmanız gerekir. Bir statik blok (statik başlatıcı olarak da adlandırılır), sınıf ilk yüklendiğinde, herhangi bir nesne oluşturulmadan veya statik metotlar çağrılmadan önce bir kez çalışır.

public class DatabaseConfig {
    private static String connectionString;
    private static int maxConnections;
    
    static {
        // Karmaşık başlatma mantığı
        connectionString = "jdbc:mysql://localhost:3306/mydb";
        maxConnections = 10;
        System.out.println("Database configuration loaded");
    }
}

Statik blok, sınıf belleğe yüklendiğinde otomatik olarak çalışır. Kaç tane nesne oluşturursanız oluşturun, bu yalnızca bir kez gerçekleşir. Birden fazla ifade, hesaplama veya koşullu mantık gerektiren başlatma işlemleri için mükemmeldir.

Bir sınıf içinde birden fazla statik bloğa sahip olabilirsiniz ve bunlar göründükleri sırayla yürütülürler:

public class AppSettings {
    private static int[] values;
    
    static {
        values = new int[5];
    }
    
    static {
        for (int i = 0; i < values.length; i++) {
            values[i] = i * 10;
        }
    }
}

Statik bloklar; statik dizileri veya koleksiyonları başlatmak, hesaplama gerektiren yapılandırma değerlerini ayarlamak ve sınıf düzeyinde bir kerelik kurulum görevlerini gerçekleştirmek için yaygın olarak kullanılır.

challenge icon

Görev

Kolay

Sınıf ilk yüklendiğinde oyun ayarlarını başlatmak için statik bloklar kullanan bir GameConfig sistemi oluşturalım. Bu, herhangi bir oyun nesnesi oluşturulmadan önce bir kez hesaplanması veya kurulması gereken yapılandırmalar için mükemmeldir.

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

  • GameConfig.java: Ayarlarını statik bloklar kullanarak başlatan bir yapılandırma sınıfı oluşturun:
    • Her seviyeye ulaşmak için gereken puanı saklayan özel bir statik dizi levelThresholds (int[])
    • Toplam seviye sayısını saklayan özel bir statik değişken maxLevel (int)
    • Başlatmanın gerçekleşip gerçekleşmediğini izlemek için özel bir statik değişken configLoaded (boolean)
    • maxLevel değerini 5 olarak başlatmak ve "Initializing game configuration..." yazdırmak için bir statik blok kullanın
    • levelThresholds dizisini maxLevel boyutunda oluşturmak için ikinci bir statik blok kullanın, ardından her seviye level * 100 puan gerektirecek şekilde doldurun (seviye 1 için 100, seviye 2 için 200, vb.) ve configLoaded değerini true olarak ayarlayın
    • O seviye için puan eşiğini döndüren statik bir getThreshold(int level) metodu (seviyeler 1 tabanlıdır)
    • Maksimum seviyeyi döndüren statik bir getMaxLevel() metodu
    • Yapılandırmanın yüklenip yüklenmediğini döndüren statik bir isConfigLoaded() metodu
  • Main.java: Sınıfa erişildiğinde statik blokların otomatik olarak çalıştığını gösterin. Bir girdi alacaksınız: sorgulanacak bir seviye numarası. Dört satır yazdırın:
    • Config loaded: true veya Config loaded: false
    • Max level: [maxLevel]
    • Level [level] threshold: [threshold]
    • Level 1 threshold: [threshold] (her zaman seviye 1'i de gösterin)

Bir girdi alacaksınız: sorgulanacak seviye numarası (int).

Başlatma mesajının Main kodunuz çalışmadan önce nasıl yazdırıldığına dikkat edin - bu, sınıf ilk yüklendiğinde çalışan statik bloktur!

Kopya kağıdı

Bir statik blok (veya statik başlatıcı), sınıf ilk yüklendiğinde, herhangi bir nesne oluşturulmadan veya statik metotlar çağrılmadan önce bir kez çalışır. Birden fazla ifade gerektiren karmaşık başlatma mantığı için kullanılır.

public class Example {
    private static String value;
    
    static {
        // Başlatma mantığı
        value = "initialized";
        System.out.println("Static block executed");
    }
}

Statik bloklar, sınıf belleğe yüklendiğinde otomatik olarak çalışır ve kaç nesne oluşturulduğuna bakılmaksızın yalnızca bir kez yürütülür.

Bir sınıfta birden fazla statik blok bulunabilir. Göründükleri sırayla yürütülürler:

public class Example {
    private static int[] values;
    
    static {
        values = new int[5];
    }
    
    static {
        for (int i = 0; i < values.length; i++) {
            values[i] = i * 10;
        }
    }
}

Yaygın kullanım alanları arasında statik dizilerin veya koleksiyonların başlatılması, hesaplama gerektiren yapılandırma değerlerinin ayarlanması ve sınıf düzeyinde bir kerelik kurulum görevlerinin gerçekleştirilmesi yer alır.

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Statik blok yürütmesini göstermek için GameConfig'e erişin
        // GameConfig içindeki statik bloklar, sınıfa ilk kez eriştiğinizde otomatik olarak çalışacaktır
        
        // TODO: Yapılandırmanın yüklenip yüklenmediğini yazdırın
        // Format: "Config loaded: true" veya "Config loaded: false"
        
        // TODO: Maksimum seviyeyi yazdırın
        // Format: "Max level: [maxLevel]"
        
        // TODO: Giriş seviyesi için eşik değerini yazdırın
        // Format: "Level [level] threshold: [threshold]"
        
        // TODO: Seviye 1 için eşik değerini yazdırın
        // Format: "Level 1 threshold: [threshold]"
    }
}
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