Menu
CoddyTech

Blok Statis

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 17 dari 87.

Terkadang kamu perlu menginisialisasi variabel statis dengan logika yang lebih rumit daripada penugasan sederhana. Blok statis (juga disebut inisialisasi statis) dijalankan sekali saat class pertama kali dimuat, sebelum object apa pun dibuat atau method statis dipanggil.

public class DatabaseConfig {
    private static String connectionString;
    private static int maxConnections;
    
    static {
        // Logika inisialisasi yang kompleks
        connectionString = "jdbc:mysql://localhost:3306/mydb";
        maxConnections = 10;
        System.out.println("Database configuration loaded");
    }
}

Blok statis dijalankan secara otomatis saat class dimuat ke memori. Ini hanya terjadi sekali, terlepas dari berapa banyak object yang kamu buat. Blok ini cocok untuk inisialisasi yang memerlukan beberapa pernyataan, perhitungan, atau logika percabangan.

Kamu dapat memiliki beberapa blok statis dalam sebuah class, dan blok-blok tersebut dijalankan sesuai urutan kemunculannya:

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;
        }
    }
}

Blok statis biasanya digunakan untuk menginisialisasi array atau koleksi statis, menyiapkan nilai konfigurasi yang memerlukan perhitungan, dan melakukan tugas penyiapan satu kali pada tingkat class.

challenge icon

Tantangan

Mudah

Mari buat sistem GameConfig yang menggunakan blok statis untuk menginisialisasi pengaturan game saat class pertama kali dimuat. Ini cocok untuk konfigurasi yang perlu dihitung atau disiapkan sekali sebelum object game dibuat.

Kamu akan membuat dua file untuk mengatur kodemu:

  • GameConfig.java: Buat class konfigurasi yang menginisialisasi pengaturannya menggunakan blok statis:
    • array statis privat levelThresholds (int[]) yang menyimpan skor yang dibutuhkan untuk mencapai setiap level
    • variabel statis privat maxLevel (int) yang menyimpan jumlah total level
    • variabel statis privat configLoaded (boolean) untuk melacak apakah inisialisasi sudah dilakukan
    • Gunakan blok statis untuk menginisialisasi maxLevel menjadi 5 dan mencetak "Initializing game configuration..."
    • Gunakan blok statis kedua untuk membuat array levelThresholds dengan ukuran yang sama dengan maxLevel, lalu isi agar setiap level membutuhkan level * 100 poin (level 1 membutuhkan 100, level 2 membutuhkan 200, dan seterusnya), lalu atur configLoaded menjadi true
    • method statis getThreshold(int level) yang mengembalikan ambang skor untuk level tersebut (indeks level dimulai dari 1)
    • method statis getMaxLevel() yang mengembalikan level maksimum
    • method statis isConfigLoaded() yang mengembalikan apakah konfigurasi sudah dimuat
  • Main.java: Tunjukkan bahwa blok statis berjalan otomatis saat class diakses. Kamu akan menerima satu input: nomor level yang ingin diperiksa. Cetak empat baris:
    • Config loaded: true atau Config loaded: false
    • Max level: [maxLevel]
    • Level [level] threshold: [threshold]
    • Level 1 threshold: [threshold] (selalu tampilkan level 1 juga)

Kamu akan menerima satu input: nomor level (int) yang ingin diperiksa.

Perhatikan bahwa pesan inisialisasi dicetak sebelum kode Main-mu berjalan. Itulah blok statis yang dijalankan saat class pertama kali dimuat!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Akses GameConfig untuk menunjukkan eksekusi blok statis
        // Blok statis di GameConfig akan berjalan otomatis saat kamu pertama kali mengakses class tersebut
        
        // TODO: Cetak apakah konfigurasi sudah dimuat
        // Format: "Config loaded: true" atau "Config loaded: false"
        
        // TODO: Cetak level maksimum
        // Format: "Max level: [maxLevel]"
        
        // TODO: Cetak ambang batas untuk level input
        // Format: "Level [level] threshold: [threshold]"
        
        // TODO: Cetak ambang batas untuk level 1
        // Format: "Level 1 threshold: [threshold]"
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online