Phase 9 of 20 · Topic 9.2

Constructors, this() Chaining & Instance Initializers

1Concept

Constructors initialize newly instantiated objects. Constructor chaining with `this(...)` allows one constructor to invoke another constructor in the same class, eliminating duplicated initialization code. Instance Initializer Blocks run before constructors whenever an instance is created.

2Architecture Diagram

Constructor Invocation Order:
1. Superclass Constructor (`super()`) ---> 2. Instance Initializer Block ---> 3. Constructor Body

3Code Example

Core Java
public class ConstructorChainingDemo {
    static class DatabaseConnection {
        private String host;
        private int port;
        private int timeoutMs;

        // Default Constructor chaining to 2-arg constructor
        public DatabaseConnection() {
            this("localhost", 5432);
        }

        // 2-arg Constructor chaining to 3-arg constructor
        public DatabaseConnection(String host, int port) {
            this(host, port, 5000);
        }

        // Master parameterized constructor
        public DatabaseConnection(String host, int port, int timeoutMs) {
            this.host = host;
            this.port = port;
            this.timeoutMs = timeoutMs;
        }

        public void display() {
            System.out.println("Connected to " + host + ":" + port + " (Timeout: " + timeoutMs + "ms)");
        }
    }

    public static void main(String[] args) {
        DatabaseConnection conn = new DatabaseConnection();
        conn.display();
    }
}

4Expected Output

Connected to localhost:5432 (Timeout: 5000ms)

5Key Takeaways

  • `this(...)` must be the FIRST statement in a constructor body.
  • You cannot call both `this()` and `super()` in the same constructor.
  • Recursive constructor chaining causes a compile-time error.