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.
Tantangan
MudahMari 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
maxLevelmenjadi 5 dan mencetak"Initializing game configuration..." - Gunakan blok statis kedua untuk membuat array
levelThresholdsdengan ukuran yang sama denganmaxLevel, lalu isi agar setiap level membutuhkanlevel * 100poin (level 1 membutuhkan 100, level 2 membutuhkan 200, dan seterusnya), lalu aturconfigLoadedmenjaditrue - 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
- array statis privat
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: trueatauConfig loaded: falseMax 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]"
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online