Building Your Learning Module...
Getting things ready for you!
Find videos you like?
Save to resource drawer for future reference!
Run complex setup code when a class is first loaded! Static blocks let you execute statements during class initialization - perfect for complex setup logicthat doesn't fit in simple static field assignments.
class DatabaseConnection {
static connection;
static isReady = false;
// Static initialization block
static {
console.log('Initializing database connection...');
// Complex setup logic here
this.connection = {
host: 'localhost',
port: 5432,
connected: true
};
this.isReady = true;
console.log('Database ready!');
}
}
// Output when class is first loaded:
// "Initializing database connection..."
// "Database ready!"
console.log(DatabaseConnection.isReady); // true
console.log(DatabaseConnection.connection); // { host: 'localhost', ... }class Config {
static data = {};
static {
console.log('Block 1: Loading config...');
this.data.env = 'production';
}
static version = '1.0.0';
static {
console.log('Block 2: Setting up features...');
this.data.features = ['auth', 'api'];
}
static {
console.log('Block 3: Validation...');
if (!this.data.env) {
throw new Error('No environment set!');
}
console.log('Config validated!');
}
}
// Output:
// "Block 1: Loading config..."
// "Block 2: Setting up features..."
// "Block 3: Validation..."
// "Config validated!"class APIClient {
static #apiKey;
static #endpoint;
static {
// Complex initialization for private fields
console.log('Setting up API client...');
// Read from environment or config
this.#apiKey = 'secret-key-123';
this.#endpoint = 'https://api.example.com';
// Validate
if (!this.#apiKey) {
throw new Error('API key required!');
}
console.log('API client configured');
}
static getEndpoint() {
return this.#endpoint;
}
static makeRequest(path) {
return `${this.#endpoint}${path}?key=${this.#apiKey}`;
}
}
console.log(APIClient.getEndpoint()); // 'https://api.example.com'
console.log(APIClient.makeRequest('/users'));
// 'https://api.example.com/users?key=secret-key-123'class FeatureFlags {
static #flags = new Map();
static #initialized = false;
static {
console.log('Loading feature flags...');
// Simulate loading from config
const config = {
newUI: true,
betaFeatures: false,
analytics: true
};
// Process and store
for (const [key, value] of Object.entries(config)) {
this.#flags.set(key, value);
console.log(` ${key}: ${value}`);
}
this.#initialized = true;
console.log('Feature flags loaded!');
}
static isEnabled(feature) {
if (!this.#initialized) {
throw new Error('Flags not initialized!');
}
return this.#flags.get(feature) || false;
}
static listAll() {
return Array.from(this.#flags.entries());
}
}
// Automatic initialization when class loads!
console.log(FeatureFlags.isEnabled('newUI')); // true
console.log(FeatureFlags.isEnabled('betaFeatures')); // falseWhen simple field assignment isn't enough - need loops, conditionals, try-catch
Initialize private static fields with complex logic
Configuration, connections, registrations that happen once when class loads
Run code when class is first loaded
Can initialize private static fields
Loops, conditionals, error handling
Modern class initialization