Bird
Raised Fist0
Kotlinprogramming~10 mins

Custom exception classes in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Custom exception classes
Define custom exception class
↓
Throw custom exception
↓
Catch exception in try-catch
↓
Handle or print exception message
↓
End
This flow shows how to create a custom exception, throw it, catch it, and handle it in Kotlin.
Execution Sample
Kotlin
class MyException(message: String) : Exception(message)

fun test() {
  throw MyException("Oops!")
}

fun main() {
  try { test() } catch (e: MyException) { println(e.message) }
}
This code defines a custom exception, throws it in a function, and catches it in main to print the message.
Execution Table
StepActionEvaluationResult
1Define class MyExceptionclass MyException(message: String) : Exception(message)Class created
2Call test()test() calledInside test function
3Throw MyException("Oops!")throw MyException("Oops!")Exception thrown with message 'Oops!'
4Catch exception in main try-catchcatch (e: MyException)Exception caught
5Print e.messageprintln(e.message)Output: Oops!
💡 Exception caught and handled, program ends normally.
Variable Tracker
VariableStartAfter throwAfter catchFinal
e (exception)nullMyException("Oops!") thrownMyException("Oops!") caughtMyException("Oops!")
Key Moments - 3 Insights
Why do we create a class that extends Exception?
Creating a class that extends Exception lets us make a special error type to identify and handle specific problems, as shown in step 1 and step 3 of the execution_table.
What happens when we throw the custom exception?
Throwing the exception immediately stops normal flow and jumps to the nearest catch block that matches, as seen in step 3 and step 4.
Why do we catch the exception in main?
Catching the exception prevents the program from crashing and lets us handle the error gracefully, shown in step 4 and step 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is printed at step 5?
A"Error occurred"
BNothing is printed
C"Oops!"
DProgram crashes
💡 Hint
Check the 'Result' column at step 5 in execution_table.
At which step is the custom exception created?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'Action' and 'Result' columns in execution_table for class creation.
If we remove the catch block, what happens?
AException is ignored
BProgram crashes with uncaught exception
CProgram prints "Oops!" automatically
DNothing changes
💡 Hint
Refer to key_moments about catching exceptions to prevent crashes.
Concept Snapshot
Custom exception classes in Kotlin:
- Define by extending Exception class
- Throw using throw keyword
- Catch with try-catch block
- Allows specific error handling
- Prevents program crashes by handling errors
Full Transcript
This example shows how to create a custom exception class in Kotlin by extending the Exception class. The custom exception is thrown inside a function called test(). In the main function, the test() call is wrapped in a try-catch block that catches the custom exception type. When the exception is thrown, normal execution stops and control jumps to the catch block. The catch block prints the exception's message, "Oops!", preventing the program from crashing. This flow helps handle specific errors clearly and safely.

Practice

(1/5)
1. What is the main purpose of creating a custom exception class in Kotlin?
easy
A. To speed up program execution
B. To define a specific type of error with a clear name
C. To automatically fix errors in code
D. To replace all built-in exceptions

Solution

  1. Step 1: Understand what exceptions represent

    Exceptions represent errors or unexpected events in a program.
  2. Step 2: Purpose of custom exceptions

    Custom exceptions let you name specific error types clearly, making code easier to read and debug.
  3. Final Answer:

    To define a specific type of error with a clear name -> Option B
  4. Quick Check:

    Custom exceptions = clear error types [OK]
Hint: Custom exceptions give clear names to specific errors [OK]
Common Mistakes:
  • Thinking custom exceptions fix errors automatically
  • Believing they speed up code execution
  • Confusing them with replacing built-in exceptions
2. Which of the following is the correct way to declare a custom exception class named MyError in Kotlin?
easy
A. exception MyError extends Exception
B. fun MyError() : Exception
C. class MyError inherits Exception
D. class MyError : Exception()

Solution

  1. Step 1: Recall Kotlin class declaration syntax

    In Kotlin, classes are declared with class ClassName.
  2. Step 2: Inherit from Exception class

    Use colon : to inherit, so class MyError : Exception() is correct.
  3. Final Answer:

    class MyError : Exception() -> Option D
  4. Quick Check:

    Custom exception syntax = class Name : Exception() [OK]
Hint: Use colon : to inherit Exception in class declaration [OK]
Common Mistakes:
  • Using 'fun' instead of 'class' to declare exception
  • Using 'extends' or 'inherits' which are not Kotlin keywords
  • Missing parentheses after Exception
3. What will be the output of this Kotlin code?
class MyException : Exception("Custom error")

fun test() {
  throw MyException()
}

fun main() {
  try {
    test()
  } catch (e: MyException) {
    println(e.message)
  }
}
medium
A. Custom error
B. MyException
C. null
D. No output, program crashes

Solution

  1. Step 1: Understand the custom exception message

    The class passes "Custom error" to Exception constructor, so e.message is "Custom error".
  2. Step 2: Catch block prints the exception message

    The catch block catches MyException and prints e.message, which is "Custom error".
  3. Final Answer:

    Custom error -> Option A
  4. Quick Check:

    Exception message printed = Custom error [OK]
Hint: Exception message prints from e.message in catch block [OK]
Common Mistakes:
  • Expecting class name instead of message
  • Thinking program crashes without output
  • Assuming message is null if not set explicitly
4. Identify the error in this Kotlin custom exception class:
class MyException extends Exception() {}
medium
A. Class body cannot be empty
B. Missing parentheses after class name
C. Using 'extends' instead of ':' for inheritance
D. Exception class cannot be inherited

Solution

  1. Step 1: Check Kotlin inheritance syntax

    Kotlin uses colon ':' for inheritance, not 'extends'.
  2. Step 2: Identify the incorrect keyword

    The code uses 'extends' which is from Java, causing syntax error.
  3. Final Answer:

    Using 'extends' instead of ':' for inheritance -> Option C
  4. Quick Check:

    Kotlin inheritance uses ':' not 'extends' [OK]
Hint: Use ':' not 'extends' for inheritance in Kotlin [OK]
Common Mistakes:
  • Confusing Java syntax with Kotlin
  • Thinking empty class body is invalid
  • Believing Exception cannot be subclassed
5. You want to create a custom exception InvalidAgeException that takes an age value as a property and shows a message like "Invalid age: 15". Which Kotlin code correctly implements this?
hard
A. class InvalidAgeException(val age: Int) : Exception("Invalid age: $age")
B. class InvalidAgeException(age: Int) : Exception("Invalid age: ${age}")
C. class InvalidAgeException(age: Int) : Exception("Invalid age: $age")
D. class InvalidAgeException(age: Int) : Exception("Invalid age: " + age)

Solution

  1. Step 1: Understand primary constructor properties and string interpolation

    In Kotlin, val param: Type creates a read-only property accessible as e.age.
  2. Step 2: Constructor param available in super call

    Params (with or without val) are in scope for superclass constructor, use $age for interpolation (braces optional for simple identifiers).
  3. Step 3: Evaluate options

    A correctly uses val age: Int for property + $age interpolation. B/C/D lack val, so no age property (only private param). D uses concatenation (valid but less idiomatic).
  4. Final Answer:

    class InvalidAgeException(val age: Int) : Exception("Invalid age: $age") -> Option A
  5. Quick Check:

    val age: Int + $age interpolation for property + message [OK]
Hint: Use val age: Int and $age for property + message interpolation [OK]
Common Mistakes:
  • Omitting 'val' (no public age property)
  • Using unnecessary braces ${age} (optional for simple vars)
  • Using string concatenation instead of interpolation
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