🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Introduction
In Kotlin, the Throwable class is the root of the exception hierarchy. It is used to represent any kind of error or exceptional condition that can occur during the execution of a program. The Throwable class has two main subclasses: Exception and Error. While Exception is used for conditions that a reasonable application might want to catch, Error is used for serious problems that a reasonable application should not try to catch.
Table of Contents
- What is the
ThrowableClass? - Creating and Throwing Exceptions
- Commonly Used Methods
- Examples of
Throwable - Real-World Use Case
- Conclusion
1. What is the Throwable Class?
The Throwable class in Kotlin is the superclass of all errors and exceptions in the language. It contains information about the state of the program at the time the error occurred and provides several methods for retrieving detailed information about the error.
Syntax
open class Throwable(
message: String? = null,
cause: Throwable? = null
) : Serializable
2. Creating and Throwing Exceptions
To create and throw an exception in Kotlin, you can use the throw keyword followed by an instance of Throwable or its subclasses.
Example
fun main() {
throw Exception("This is an exception")
}
Custom Exceptions
You can create custom exceptions by extending the Exception class.
class MyCustomException(message: String) : Exception(message)
fun main() {
throw MyCustomException("This is a custom exception")
}
3. Commonly Used Methods
The Throwable class provides several useful methods for working with exceptions:
message: Returns the detail message string of this throwable.cause: Returns the cause of this throwable ornullif the cause is nonexistent or unknown.stackTrace: Returns an array of stack trace elements representing the stack dump of this throwable.printStackTrace(): Prints the stack trace to the standard error stream.toString(): Returns a short description of this throwable.
Example
fun main() {
try {
throw Exception("This is an exception")
} catch (e: Exception) {
println("Message: ${e.message}")
println("Cause: ${e.cause}")
println("Stack trace: ${e.stackTrace.joinToString("\n")}")
e.printStackTrace()
}
}
4. Examples of Throwable
Example 1: Catching and Handling Exceptions
This example demonstrates how to catch and handle exceptions using a try-catch block.
fun main() {
try {
val result = 10 / 0
} catch (e: ArithmeticException) {
println("Caught an arithmetic exception: ${e.message}")
}
}
Output:
Caught an arithmetic exception: / by zero
Explanation:
This example demonstrates catching an ArithmeticException when dividing by zero.
Example 2: Nested Try-Catch Blocks
This example demonstrates using nested try-catch blocks to handle different types of exceptions.
fun main() {
try {
val result = 10 / 0
} catch (e: ArithmeticException) {
println("Caught an arithmetic exception: ${e.message}")
try {
val str: String? = null
println(str!!.length)
} catch (e: NullPointerException) {
println("Caught a null pointer exception: ${e.message}")
}
}
}
Output:
Caught an arithmetic exception: / by zero
Caught a null pointer exception: null
Explanation:
This example demonstrates catching an ArithmeticException and then a NullPointerException in nested try-catch blocks.
Example 3: Using finally Block
This example demonstrates using a finally block to execute code after the try or catch blocks.
fun main() {
try {
val result = 10 / 0
} catch (e: ArithmeticException) {
println("Caught an arithmetic exception: ${e.message}")
} finally {
println("This block is always executed")
}
}
Output:
Caught an arithmetic exception: / by zero
This block is always executed
Explanation:
This example demonstrates that the finally block is always executed, regardless of whether an exception is thrown or caught.
5. Real-World Use Case: Validating User Input
In a real-world scenario, you might need to validate user input and throw custom exceptions for invalid input.
Example: Validating User Input
class InvalidInputException(message: String) : Exception(message)
fun validateInput(input: String) {
if (input.isBlank()) {
throw InvalidInputException("Input cannot be blank")
}
if (input.length < 3) {
throw InvalidInputException("Input must be at least 3 characters long")
}
}
fun main() {
try {
validateInput("")
} catch (e: InvalidInputException) {
println("Invalid input: ${e.message}")
}
try {
validateInput("ab")
} catch (e: InvalidInputException) {
println("Invalid input: ${e.message}")
}
try {
validateInput("abc")
println("Input is valid")
} catch (e: InvalidInputException) {
println("Invalid input: ${e.message}")
}
}
Output:
Invalid input: Input cannot be blank
Invalid input: Input must be at least 3 characters long
Input is valid
Explanation:
This example validates user input and throws custom exceptions for invalid input, demonstrating how to catch and handle these exceptions.
Conclusion
The Throwable class in Kotlin is the root of the exception hierarchy, providing a way to represent and handle errors and exceptional conditions in your programs. By understanding how to create, throw, catch, and handle exceptions, you can write more robust and error-resistant Kotlin code. Custom exceptions can help you provide more meaningful error messages and handle specific error conditions in your applications.
Comments
Post a Comment
Leave Comment