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.
Görev
KolaySı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 hazırlanması gereken yapılandırmalar için idealdir.
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 skoru depolayan özel bir statik dizi
levelThresholds(int[]) - Toplam seviye sayısını depolayan özel bir statik değişken
maxLevel(int) - Başlatmanın gerçekleşip gerçekleşmediğini izleyen özel bir statik değişken
configLoaded(boolean) maxLeveldeğerini 5 olarak başlatmak ve"Initializing game configuration..."yazdırmak için bir statik blok kullanınlevelThresholdsdeğerine eşit boyuttamaxLeveldizisi oluşturmak, ardından her seviyeninlevel * 100puan gerektirmesi için diziyi doldurmak (1. seviye 100, 2. seviye 200 vb.) veconfigLoadeddeğerinitrueolarak ayarlamak için ikinci bir statik blok kullanın- Bu seviye için skor eşiğini döndüren (seviyeler 1 tabanlıdır) bir statik metot
getThreshold(int level) - En yüksek seviyeyi döndüren bir statik metot
getMaxLevel() - Yapılandırmanın yüklenip yüklenmediğini döndüren bir statik metot
isConfigLoaded()
- Her seviyeye ulaşmak için gereken skoru depolayan özel bir statik dizi
Main.java: Sınıfa erişildiğinde statik blokların otomatik olarak çalıştığını gösterin. Bir girdi alacaksınız: sorgulanacak seviye numarası. Dört satır yazdırın:Config loaded: trueveyaConfig loaded: falseMax level: [maxLevel]Level [level] threshold: [threshold]Level 1 threshold: [threshold](1. seviyeyi de her zaman gösterin)
Bir girdi alacaksınız: sorgulanacak seviye numarası (int).
Başlatma mesajının Main kodunuzun herhangi bir bölümü çalışmadan önce yazdırıldığına dikkat edin; bunun nedeni, sınıf ilk yüklendiğinde statik bloğun çalıştırılmasıdı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]"
}
}
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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi