Exception Handling এবং Try-Catch

কটলিন (Kotlin) - Mobile App Development

395

Exception Handling এবং Try-Catch

কটলিনে Exception Handling একটি গুরুত্বপূর্ণ বিষয়, যা প্রোগ্রাম চলাকালীন অপ্রত্যাশিত ত্রুটি বা সমস্যা মোকাবেলা করতে সাহায্য করে। কটলিনে try, catch, finally, এবং throw কিওয়ার্ড ব্যবহার করে এক্সসেপশন হ্যান্ডলিং করা হয়। নিচে Exception Handling এবং Try-Catch নিয়ে বিস্তারিত আলোচনা করা হলো:


১. Exception Handling

Exception Handling একটি প্রক্রিয়া যার মাধ্যমে আপনি আপনার কোডে ত্রুটি পরিচালনা করতে পারেন, যাতে আপনার প্রোগ্রাম ক্র্যাশ না করে এবং ব্যবহারকারীর জন্য একটি ভাল অভিজ্ঞতা থাকে।

i) Exception কি?

একটি Exception হলো একটি সমস্যা বা ত্রুটি যা প্রোগ্রাম চলাকালীন ঘটতে পারে। যেমন: সংখ্যা বিভাজন, নাল পয়েন্টার, ফাইল পাওয়া না যাওয়া ইত্যাদি।


২. Try-Catch Block

Try-Catch Block ব্যবহার করে আপনি এক্সসেপশন ধরতে পারেন এবং এর উপর নির্ভর করে আপনার কোডের কার্যকারিতা নির্ধারণ করতে পারেন।

i) Try Block

try ব্লকে আপনি সেই কোড লিখবেন যেটি ত্রুটি ঘটতে পারে।

ii) Catch Block

catch ব্লকে আপনি ত্রুটি ধরবেন এবং সেটি পরিচালনা করবেন।

উদাহরণ:

fun main() {
    val number1 = 10
    val number2 = 0
    try {
        val result = number1 / number2 // এখানে Division by Zero Exception হতে পারে
        println("Result: $result")
    } catch (e: ArithmeticException) {
        println("Caught an exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে, try ব্লকে একটি বিভাজন অপারেশন করা হয়েছে যা number2 এর জন্য শূন্য হতে পারে, ফলে একটি ArithmeticException উত্থাপন করবে।
  • catch ব্লকটি সেই ত্রুটিটি ধরবে এবং একটি ম্যাসেজ প্রিন্ট করবে।

iii) Multiple Catch Blocks

আপনি একাধিক catch ব্লক ব্যবহার করতে পারেন বিভিন্ন ধরনের এক্সসেপশন ধরতে।

উদাহরণ:

fun main() {
    val numbers = listOf(1, 2, 3)
    try {
        println(numbers[5]) // IndexOutOfBoundsException হতে পারে
    } catch (e: IndexOutOfBoundsException) {
        println("Caught an IndexOutOfBoundsException: ${e.message}")
    } catch (e: Exception) {
        println("Caught a general exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে, numbers[5] একটি IndexOutOfBoundsException ত্রুটি সৃষ্টি করবে, যা প্রথম catch ব্লকে ধরা হবে।

৩. Finally Block

Finally Block একটি বিশেষ ব্লক যা try এবং catch এর পর থাকে এবং এটি ত্রুটি ঘটুক বা না ঘটুক, সবসময় এক্সিকিউট হয়। এটি সাধারণত ক্লিনআপ কোডের জন্য ব্যবহৃত হয়, যেমন: ফাইল বন্ধ করা বা নেটওয়ার্ক সংযোগ বিচ্ছিন্ন করা।

উদাহরণ:

fun main() {
    val number1 = 10
    val number2 = 0
    try {
        val result = number1 / number2
        println("Result: $result")
    } catch (e: ArithmeticException) {
        println("Caught an exception: ${e.message}")
    } finally {
        println("This block always executes.") // এটি সবসময় চলবে
    }
}

৪. Throwing Exceptions

কটলিনে আপনি নিজের এক্সসেপশনও তৈরি করতে পারেন throw কিওয়ার্ড ব্যবহার করে।

উদাহরণ:

fun checkAge(age: Int) {
    if (age < 18) {
        throw IllegalArgumentException("Age must be at least 18.")
    }
    println("Access granted.")
}

fun main() {
    try {
        checkAge(16) // এখানে IllegalArgumentException হতে পারে
    } catch (e: IllegalArgumentException) {
        println("Caught an exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে checkAge ফাংশনটি একটি IllegalArgumentException ছুঁড়বে যদি age ১৮ এর কম হয়।

উপসংহার

কটলিনে Exception Handling এবং Try-Catch Blocks প্রোগ্রামের নিরাপত্তা এবং স্থিরতা বাড়াতে সাহায্য করে। আপনি যেকোনো ধরনের ত্রুটি প্রতিরোধ করতে পারেন এবং ব্যবহারকারীদের একটি ভাল অভিজ্ঞতা দিতে পারেন। finally ব্লক ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে আপনার ক্লিনআপ কোড সবসময় চলবে।

Content added By

Exception কী এবং কেন ব্যবহার হয়

Exception হলো একটি ঘটনা যা প্রোগ্রামের স্বাভাবিক কার্যকলাপকে ব্যাহত করে। যখন কোনো সমস্যা ঘটে, যেমন একটি ফাইল না পাওয়া, নেটওয়ার্ক সংযোগের সমস্যা, বা ইনপুট ভুল হওয়া, তখন এটি একটি exception তৈরি করে। প্রোগ্রামিংয়ে exception-handling ব্যবহার করে এই সমস্যা সমাধানের জন্য বিভিন্ন পদ্ধতি রয়েছে, যা আপনার কোডকে আরো স্থিতিশীল এবং রিডেবল করে তোলে।


১. Exception কি?

একটি exception হলো একটি অবাঞ্ছিত পরিস্থিতি যা একটি প্রোগ্রামের কার্যক্রমকে ব্যাহত করে। এটি সাধারণত রানটাইমে ঘটে এবং তা যদি সঠিকভাবে পরিচালনা না করা হয়, তবে প্রোগ্রামটি ক্র্যাশ করতে পারে। কটলিনসহ অনেক প্রোগ্রামিং ভাষায় exceptions পরিচালনা করার জন্য বিশেষ ব্যবস্থা রয়েছে।

২. Exception এর প্রকারভেদ

Exception প্রধানত দুই ধরনের হয়ে থাকে:

i) Checked Exceptions

এই ধরনের exceptions কম্পাইলার দ্বারা চেক করা হয়। আপনাকে এটি পরিচালনা করতে হবে, যেমন IOException, SQLException ইত্যাদি। এগুলো সাধারণত ইনপুট/আউটপুট অপারেশনের সময় ঘটে।

ii) Unchecked Exceptions

এই ধরনের exceptions রানটাইমে ঘটে এবং এগুলো কম্পাইলার দ্বারা চেক করা হয় না। এর মধ্যে NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException ইত্যাদি অন্তর্ভুক্ত রয়েছে।


৩. Exception Handling কেন ব্যবহার হয়?

Exception Handling ব্যবহারের কিছু মূল কারণ হলো:

i) কোডের স্থিতিশীলতা

কোনো সমস্যা হলে প্রোগ্রামটি ক্র্যাশ হওয়া থেকে রক্ষা করতে exception-handling ব্যবহার করা হয়। এটি আপনাকে সমস্যাটি সনাক্ত এবং সমাধান করার সুযোগ দেয়।

ii) ইউজার ফিডব্যাক

আপনি exception-handling ব্যবহার করে ব্যবহারকারীদের জন্য আরো অর্থপূর্ণ বার্তা প্রদান করতে পারেন, যাতে তারা বুঝতে পারে কী সমস্যা হয়েছে।

iii) লজিকাল প্রোগ্রামিং

এটি প্রোগ্রামের লজিককে পরিষ্কার করে। আপনি সহজেই দেখতে পারেন কোথায় এবং কেন সমস্যা ঘটছে।

iv) রিসোর্স ম্যানেজমেন্ট

Exception handling ব্যবহার করে আপনি রিসোর্স (যেমন ফাইল, নেটওয়ার্ক কনেকশন) সঠিকভাবে বন্ধ করতে পারেন, এমনকি কোনো সমস্যা ঘটলেও।


৪. কটলিনে Exception Handling

কটলিনে exception-handling করার জন্য try, catch, এবং finally ব্লক ব্যবহার করা হয়।

উদাহরণ:

fun main() {
    val number = "123a" // একটি ইনপুট যা সংখ্যার মধ্যে নয়

    try {
        val result = number.toInt() // NumberFormatException ঘটতে পারে
        println("Converted number: $result")
    } catch (e: NumberFormatException) {
        println("Error: ${e.message}") // এরর বার্তা প্রিন্ট হবে
    } finally {
        println("Execution finished.") // এটি সবসময় চলবে
    }
}

ব্যাখ্যা:

  • try ব্লকে কোড লেখা হয় যা exception তৈরি করতে পারে।
  • catch ব্লকে সেই exception ধরার জন্য কোড লেখা হয়।
  • finally ব্লক সবসময় এক্সিকিউট হয়, এটি সফলভাবে প্রক্রিয়া শেষ হলে অথবা exception ঘটলে। এটি সাধারণত পরিষ্কার করার জন্য ব্যবহৃত হয়, যেমন ফাইল বন্ধ করা।

৫. Exception তৈরি করা

আপনি নিজের exception তৈরি করতে পারেন একটি ক্লাস তৈরি করে যা Exception ক্লাস থেকে ইনহেরিট করে।

উদাহরণ:

class CustomException(message: String) : Exception(message)

fun main() {
    try {
        throw CustomException("This is a custom exception!")
    } catch (e: CustomException) {
        println("Caught: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে CustomException একটি কাস্টম exception তৈরি করা হয়েছে, যা একটি বার্তা গ্রহণ করে।
  • throw কিওয়ার্ড ব্যবহার করে এই exception তোলা হয়েছে।

উপসংহার

Exceptions প্রোগ্রামে অপ্রত্যাশিত ঘটনা এবং ত্রুটিগুলোর জন্য একটি গুরুত্বপূর্ণ মেকানিজম। সঠিকভাবে exception-handling ব্যবহার করে আপনি কোডের স্থিতিশীলতা, ব্যবহারকারীর অভিজ্ঞতা এবং রিসোর্স ব্যবস্থাপনা উন্নত করতে পারেন। কটলিনে exception-handling করার সহজ পদ্ধতি রয়েছে, যা প্রোগ্রামিংকে আরও মডুলার এবং নিরাপদ করে তোলে।

Content added By

Try-Catch-Finally Structure

কটলিনে Try-Catch-Finally স্ট্রাকচার ব্যবহার করে আপনি এক্সেপশন হ্যান্ডলিং করতে পারেন। এটি আপনার প্রোগ্রামের স্থিতিশীলতা বৃদ্ধি করে এবং runtime error-গুলোর জন্য একটি নিরাপদ উপায় প্রদান করে। নিচে Try-Catch-Finally স্ট্রাকচার সম্পর্কে বিস্তারিত আলোচনা করা হলো।


১. Try Block

Try block হলো এমন একটি ব্লক যেখানে আপনি কোড লিখবেন যা একটি এক্সেপশন তৈরি করতে পারে। যদি try ব্লকের কোডে কোনো এক্সেপশন ঘটে, তাহলে সেই এক্সেপশনটি catch ব্লকে ক্যাচ করা হয়।

উদাহরণ:

fun main() {
    try {
        val result = 10 / 0 // এটি একটি এক্সেপশন তৈরি করবে
        println(result)
    } catch (e: ArithmeticException) {
        println("Caught an exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে, 10 / 0 কোডটি একটি ArithmeticException তৈরি করবে।
  • catch ব্লকে এই এক্সেপশনটি ক্যাচ করা হয়েছে এবং এর মেসেজ প্রিন্ট করা হয়েছে।

২. Catch Block

Catch block হলো সেই স্থান যেখানে আপনি এক্সেপশন হ্যান্ডলিং করেন। আপনি একাধিক catch ব্লকও ব্যবহার করতে পারেন বিভিন্ন ধরনের এক্সেপশনের জন্য।

উদাহরণ:

fun main() {
    try {
        val numbers = listOf(1, 2, 3)
        println(numbers[5]) // এটি IndexOutOfBoundsException তৈরি করবে
    } catch (e: IndexOutOfBoundsException) {
        println("Caught an IndexOutOfBoundsException: ${e.message}")
    } catch (e: Exception) {
        println("Caught a general exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে catch ব্লকগুলো ব্যবহার করে বিভিন্ন ধরনের এক্সেপশন হ্যান্ডলিং করা হয়েছে। প্রথম catch ব্লকটি IndexOutOfBoundsException ক্যাচ করবে এবং দ্বিতীয় ব্লকটি সাধারণ Exception

৩. Finally Block

Finally block হলো সেই ব্লক যেখানে আপনি কোড লিখবেন যা যেকোনো পরিস্থিতিতে এক্সিকিউট হবে, অর্থাৎ এক্সেপশন ঘটুক বা না ঘটুক। এটি সাধারণত ক্লিনআপ কোড (যেমন ফাইল বন্ধ করা, নেটওয়ার্ক সংযোগ বন্ধ করা) রাখতে ব্যবহৃত হয়।

উদাহরণ:

fun main() {
    var resource: String? = null

    try {
        resource = "Resource opened"
        println(resource)
        val result = 10 / 0 // এটি এক্সেপশন তৈরি করবে
    } catch (e: ArithmeticException) {
        println("Caught an exception: ${e.message}")
    } finally {
        // Finally block will execute irrespective of exception
        resource = null
        println("Resource closed.")
    }
}

ব্যাখ্যা:

  • এখানে finally ব্লকটি নিশ্চিত করে যে resource অবশ্যই বন্ধ বা রিসেট হবে, যদিও try ব্লকে এক্সেপশন ঘটে।

৪. Multiple Catch Blocks

একাধিক catch ব্লক ব্যবহার করে বিভিন্ন এক্সেপশন ধরার জন্য প্রয়োজনীয়।

উদাহরণ:

fun main() {
    try {
        val number = "abc".toInt() // NumberFormatException তৈরি করবে
    } catch (e: NumberFormatException) {
        println("Caught a NumberFormatException: ${e.message}")
    } catch (e: Exception) {
        println("Caught a general exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে, NumberFormatException ক্যাচ করা হচ্ছে এবং সাধারণ Exception ক্যাচ ব্লক ব্যবহার করা হচ্ছে অন্য এক্সেপশনের জন্য।

উপসংহার

কটলিনে Try-Catch-Finally স্ট্রাকচার ব্যবহার করে আপনি সহজেই এক্সেপশন হ্যান্ডলিং করতে পারেন, যা প্রোগ্রামের স্থিতিশীলতা এবং সুরক্ষা বাড়ায়। try ব্লকে এমন কোড রাখুন যা এক্সেপশন তৈরি করতে পারে, catch ব্লকে এক্সেপশন হ্যান্ডলিং করুন এবং finally ব্লকে ক্লিনআপ কোড রাখুন।

Content added By

Custom Exceptions তৈরি করা

কটলিনে Custom Exceptions তৈরি করা একটি সাধারণ প্রক্রিয়া যা আপনাকে আপনার প্রোগ্রামের জন্য নির্দিষ্ট ত্রুটির অবস্থা সংজ্ঞায়িত করতে দেয়। এটি আপনার কোডের রিডেবিলিটি এবং ব্যবহারকারীদের কাছে আরও স্পষ্ট ত্রুটি বার্তা প্রদান করতে সাহায্য করে। নিচে কটলিনে Custom Exceptions তৈরি করার প্রক্রিয়া এবং উদাহরণ দেওয়া হলো:


১. Custom Exception তৈরি করা

Custom Exception তৈরি করতে, আপনাকে একটি ক্লাস তৈরি করতে হবে যা Exception ক্লাস বা তার সাবক্লাস (যেমন RuntimeException) থেকে ইনহেরিট করবে।

i) Custom Exception Class তৈরি করা

উদাহরণ:

class InsufficientFundsException(message: String) : Exception(message)

ব্যাখ্যা:

  • এখানে InsufficientFundsException নামে একটি Custom Exception ক্লাস তৈরি করা হয়েছে, যা Exception ক্লাস থেকে ইনহেরিট করছে।
  • এটি একটি কনস্ট্রাক্টর গ্রহণ করে, যা ত্রুটি বার্তা ধারণ করবে।

২. Custom Exception ব্যবহার করা

Custom Exception ব্যবহার করতে, আপনাকে একটি ফাংশনে ত্রুটির অবস্থায় throw কিওয়ার্ড ব্যবহার করে Custom Exceptionটি ছুঁড়তে হবে।

ii) Custom Exception ছুঁড়া

উদাহরণ:

fun withdraw(amount: Double, balance: Double) {
    if (amount > balance) {
        throw InsufficientFundsException("Insufficient funds: tried to withdraw $amount but balance is only $balance.")
    }
    println("Withdrawal successful: $amount")
}

fun main() {
    val balance = 100.0
    try {
        withdraw(150.0, balance)
    } catch (e: InsufficientFundsException) {
        println("Caught an exception: ${e.message}") // আউটপুট: Caught an exception: Insufficient funds: tried to withdraw 150.0 but balance is only 100.0.
    }
}

ব্যাখ্যা:

  • এখানে withdraw ফাংশনে চেক করা হয়েছে যে amount ব্যালেন্সের চেয়ে বেশি কিনা। যদি তাই হয়, তবে InsufficientFundsException ছোঁড়া হয়।
  • main ফাংশনে withdraw ফাংশন কল করা হয়েছে এবং try-catch ব্লক ব্যবহার করে Custom Exceptionটি ধরা হয়েছে।

৩. Custom Exception এর কার্যকারিতা

Custom Exceptions এর মাধ্যমে আপনি স্পষ্ট এবং কাস্টমাইজড ত্রুটি বার্তা প্রদান করতে পারেন যা কোডের রিডেবিলিটি এবং ডিবাগিং প্রক্রিয়া সহজ করে।

iv) Custom Exception এর বিভিন্ন ধরনের বার্তা

Custom Exception এ ভিন্ন ভিন্ন কনস্ট্রাক্টর তৈরি করে ভিন্ন ভিন্ন ধরনের বার্তা প্রদান করতে পারেন।

উদাহরণ:

class InsufficientFundsException : Exception {
    constructor(message: String) : super(message)
    constructor(message: String, cause: Throwable) : super(message, cause)
}

fun main() {
    try {
        throw InsufficientFundsException("Insufficient funds.")
    } catch (e: InsufficientFundsException) {
        println("Caught an exception: ${e.message}")
    }
}

ব্যাখ্যা:

  • এখানে InsufficientFundsException ক্লাসে দুটি কনস্ট্রাক্টর তৈরি করা হয়েছে, একটি সাধারণ ত্রুটি বার্তা এবং অন্যটি একটি ত্রুটির কারণের সাথে।

উপসংহার

কটলিনে Custom Exceptions তৈরি করা সহজ এবং এটি আপনাকে আপনার প্রোগ্রামে নির্দিষ্ট ত্রুটির অবস্থা পরিচালনা করতে সক্ষম করে। Custom Exception ব্যবহার করে আপনি আপনার কোডের রিডেবিলিটি বাড়াতে পারেন এবং ব্যবহারকারীদের কাছে আরও স্পষ্ট ত্রুটি বার্তা প্রদান করতে পারেন।

Content added By

Checked এবং Unchecked Exceptions

Exceptions হল এমন ঘটনা যা প্রোগ্রামের কার্যকলাপকে ব্যাহত করে। Exception handling-এর মাধ্যমে আপনি এই সমস্যা মোকাবেলা করতে পারেন। Exceptions সাধারণত দুই ধরনের হয়ে থাকে: Checked Exceptions এবং Unchecked Exceptions। নিচে এদের মধ্যে পার্থক্য এবং ব্যবহার নিয়ে বিস্তারিত আলোচনা করা হলো।


১. Checked Exceptions

Checked Exceptions হলো এমন এক ধরনের exception যা কম্পাইল টাইমে চেক করা হয়। অর্থাৎ, যদি আপনার কোডে কোনো checked exception ঘটতে পারে, তাহলে আপনাকে এটি পরিচালনা করতে হবে। যদি না করেন, তবে কম্পাইলার একটি এরর দেখাবে এবং কোডটি কম্পাইল হবে না।

উদাহরণ:

import java.io.File
import java.io.FileNotFoundException

fun readFile(fileName: String) {
    try {
        val file = File(fileName)
        val content = file.readText() // FileNotFoundException হতে পারে
        println(content)
    } catch (e: FileNotFoundException) {
        println("File not found: ${e.message}")
    }
}

fun main() {
    readFile("non_existent_file.txt")
}

ব্যাখ্যা:

  • এখানে FileNotFoundException একটি checked exception। যখন একটি ফাইল খুঁজে পাওয়া যায় না, তখন এটি উঠবে। কম্পাইলার আপনাকে try-catch ব্লক ব্যবহার করতে বাধ্য করে, অন্যথায় কোডটি কম্পাইল হবে না।

Checked Exceptions-এর উদাহরণ:

  • IOException
  • SQLException
  • ClassNotFoundException

২. Unchecked Exceptions

Unchecked Exceptions হলো এমন এক ধরনের exception যা রানটাইমে ঘটে এবং কম্পাইল টাইমে চেক করা হয় না। অর্থাৎ, যদি আপনার কোডে কোনো unchecked exception ঘটে, তাহলে এটি রানটাইমে ঘটে এবং সাধারণত এই ধরনের exceptions একটি প্রোগ্রামকে ক্র্যাশ করে। Unchecked exceptions হল মূলত RuntimeException এর সাবক্লাস।

উদাহরণ:

fun divide(a: Int, b: Int): Int {
    return a / b // ArithmeticException ঘটতে পারে যদি b = 0 হয়
}

fun main() {
    try {
        val result = divide(10, 0)
        println("Result: $result")
    } catch (e: ArithmeticException) {
        println("Error: ${e.message}") // আউটপুট: Error: / by zero
    }
}

ব্যাখ্যা:

  • এখানে ArithmeticException একটি unchecked exception। যখন b শূন্য হবে, তখন এটি ঘটবে। কম্পাইলার এটি চেক করে না, কিন্তু আপনি এটিকে try-catch ব্লক দিয়ে পরিচালনা করতে পারেন।

Unchecked Exceptions-এর উদাহরণ:

  • NullPointerException
  • IndexOutOfBoundsException
  • ArithmeticException

৩. Checked এবং Unchecked Exceptions-এর পার্থক্য

বৈশিষ্ট্যChecked ExceptionsUnchecked Exceptions
চেকিংকম্পাইলার দ্বারা চেক করা হয়রানটাইমে ঘটে, কম্পাইলার দ্বারা চেক করা হয় না
প্রয়োজনীয়তাMust be handled (try-catch)Optional (can be handled, but not required)
উদাহরণIOException, SQLExceptionNullPointerException, ArithmeticException
ইনহেরিটেন্সException ক্লাসের সাবক্লাসRuntimeException ক্লাসের সাবক্লাস

৪. Exception Handling এর জন্য টিপস

  • Checked Exceptions ব্যবহার করুন যখন আপনি জানেন যে একটি নির্দিষ্ট পরিস্থিতিতে exception ঘটতে পারে এবং আপনি এটি পরিচালনা করতে চান।
  • Unchecked Exceptions সাধারণত প্রোগ্রামের লজিক্যাল ত্রুটির জন্য ঘটে, সুতরাং এগুলির জন্য উপযুক্ত exception handling ব্যবহার করা গুরুত্বপূর্ণ।
  • Exception handling এর মাধ্যমে আপনি ব্যবহারকারীদের জন্য অর্থপূর্ণ বার্তা প্রদান করতে পারেন এবং প্রোগ্রামের স্থিতিশীলতা বজায় রাখতে পারেন।

উপসংহার

Checked এবং Unchecked Exceptions কটলিনে error handling-এর গুরুত্বপূর্ণ অংশ। আপনার কোডের স্থিতিশীলতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে এই exceptions সঠিকভাবে পরিচালনা করা আবশ্যক। checked exceptions কম্পাইলার দ্বারা চেক করা হয়, যেখানে unchecked exceptions রানটাইমে ঘটে এবং এদের জন্য exception handling কম্পাইলারের দ্বারা বাধ্যতামূলক নয়।

Content added By
Promotion

Are you sure to start over?

Loading...