Bird
Raised Fist0
Kotlinprogramming~10 mins

Primary constructor and init blocks in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Primary constructor and init blocks
Class Declaration with Primary Constructor
↓
Object Creation
↓
Primary Constructor Parameters Assigned
↓
Init Blocks Run
↓
Object Ready
When creating an object, Kotlin assigns primary constructor parameters to properties first, then runs init blocks in order, preparing the object.
Execution Sample
Kotlin
class Person(val name: String) {
    init {
        println("Init block: Name is $name")
    }
}

fun main() {
    val p = Person("Alice")
}
This code creates a Person object with a primary constructor and an init block that prints the name.
Execution Table
StepActionEvaluationOutput
1Call Person("Alice")Primary constructor parameter name = "Alice"
2Enter init blockAccess name = "Alice"Init block: Name is Alice
3Finish init blockNo further action
4Object creation completePerson object with name="Alice" ready
💡 Init block runs after primary constructor parameters are set; object is ready after init blocks finish.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
nameundefined"Alice""Alice""Alice"
Person objectnonecreatinginit block runningcreated
Key Moments - 2 Insights
Why can the init block access the primary constructor parameter 'name'?
Because the primary constructor parameters are available as properties during init block execution, as shown in step 2 of the execution_table.
Does the init block run before or after the primary constructor parameters are assigned?
The parameters are assigned first, then init blocks run, so init blocks can use those parameters (see step 1 and 2 in execution_table).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'name' during the init block (step 2)?
A"Alice"
Bundefined
Cnull
D"Bob"
💡 Hint
Check the 'Evaluation' column at step 2 in execution_table.
At which step does the init block finish running?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column describing init block progress in execution_table.
If we add another init block after the first, when will it run?
ABefore primary constructor parameters are assigned
BBefore the first init block
CAfter the first init block
DNever
💡 Hint
Init blocks run in the order they appear, after parameters are assigned (see concept_flow).
Concept Snapshot
class ClassName(val param: Type) {
  init {
    // code runs after primary constructor parameters are set
  }
}

- Primary constructor parameters are available in init blocks.
- Init blocks run in order during object creation.
- Useful for initialization logic needing constructor data.
Full Transcript
In Kotlin, when you create a class with a primary constructor, the parameters are set first. Then, any init blocks run in the order they appear. These init blocks can use the constructor parameters to run code during object creation. For example, if you have a class Person with a parameter name, the init block can print the name. The object is fully ready after all init blocks finish running.

Practice

(1/5)
1. What is the main purpose of the init block in a Kotlin class with a primary constructor?
easy
A. To declare secondary constructors
B. To run additional code right after the primary constructor initializes properties
C. To define class-level constants
D. To override functions from a superclass

Solution

  1. Step 1: Understand the role of primary constructor

    The primary constructor initializes the properties of the class when an object is created.
  2. Step 2: Identify the purpose of the init block

    The init block runs immediately after the primary constructor to execute extra setup code or validations.
  3. Final Answer:

    To run additional code right after the primary constructor initializes properties -> Option B
  4. Quick Check:

    Init block = extra setup after constructor [OK]
Hint: Init blocks run right after primary constructor [OK]
Common Mistakes:
  • Confusing init block with secondary constructor
  • Thinking init block declares constants
  • Assuming init block overrides superclass methods
2. Which of the following is the correct syntax to declare a primary constructor with two parameters name and age in Kotlin?
easy
A. class Person(name: String, age: Int) { }
B. class Person { constructor(name: String, age: Int) }
C. class Person(name String, age Int) { }
D. class Person(name: String; age: Int) { }

Solution

  1. Step 1: Recall Kotlin primary constructor syntax

    Primary constructor parameters are declared in parentheses after the class name, separated by commas, with types after colons.
  2. Step 2: Check each option

    class Person(name: String, age: Int) { } uses correct syntax: parentheses, commas, colons for types. Options A, B, and D have syntax errors.
  3. Final Answer:

    class Person(name: String, age: Int) { } -> Option A
  4. Quick Check:

    Primary constructor = class Name(params) [OK]
Hint: Primary constructor parameters go inside parentheses after class name [OK]
Common Mistakes:
  • Using semicolons instead of commas
  • Omitting colons before types
  • Confusing primary with secondary constructor syntax
3. What will be the output of this Kotlin code?
class User(val name: String) {
    init {
        println("Welcome, $name!")
    }
}

fun main() {
    val user = User("Anna")
}
medium
A. Compilation error
B. Welcome, name!
C. No output
D. Welcome, Anna!

Solution

  1. Step 1: Understand object creation and init block

    When creating User("Anna"), the primary constructor sets name to "Anna" and then the init block runs.
  2. Step 2: Analyze the init block output

    The init block prints "Welcome, $name!" where $name is replaced by "Anna".
  3. Final Answer:

    Welcome, Anna! -> Option D
  4. Quick Check:

    Init block prints welcome message with name [OK]
Hint: Init block runs on object creation, prints with property values [OK]
Common Mistakes:
  • Expecting no output because println is inside class
  • Confusing variable interpolation syntax
  • Thinking init block runs only on demand
4. Identify the error in this Kotlin class:
class Product(val id: Int) {
    init {
        println("Product ID: $productId")
    }
}
medium
A. Init block cannot use println
B. Primary constructor must be empty
C. Variable productId is not declared
D. Class must have a secondary constructor

Solution

  1. Step 1: Check variable usage in init block

    The init block tries to print productId, but the class has only id declared.
  2. Step 2: Confirm variable declaration

    Since productId is not declared anywhere, this causes a compilation error.
  3. Final Answer:

    Variable productId is not declared -> Option C
  4. Quick Check:

    Use declared property names in init block [OK]
Hint: Use exact property names inside init blocks [OK]
Common Mistakes:
  • Assuming init block can't use println
  • Thinking primary constructor must be empty
  • Believing secondary constructor is mandatory
5. You want to create a Kotlin class Employee with a primary constructor that takes name and salary. You also want to print a welcome message and calculate a 10% bonus right after object creation. Which is the best way to do this?
hard
A. Use primary constructor for parameters and an init block to print message and calculate bonus
B. Use only secondary constructors for all initialization
C. Put all code inside the primary constructor parentheses
D. Use companion object to run code after object creation

Solution

  1. Step 1: Understand primary constructor role

    Primary constructor is for receiving parameters and initializing properties simply.
  2. Step 2: Use init block for extra setup

    Init block runs after constructor to print messages and calculate bonus, keeping code organized.
  3. Step 3: Evaluate other options

    Secondary constructors are unnecessary here; code can't go inside constructor parentheses; companion object is unrelated.
  4. Final Answer:

    Use primary constructor for parameters and an init block to print message and calculate bonus -> Option A
  5. Quick Check:

    Primary constructor + init block = clean setup [OK]
Hint: Use init block for extra setup after primary constructor [OK]
Common Mistakes:
  • Trying to put logic inside constructor parentheses
  • Using secondary constructors unnecessarily
  • Misusing companion object for instance initialization
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard