Exception Instance means Exception এর Object :p
কম্পাইলার
একটু বলদ টাইপ হইতে পারে, কিন্তু তার ভাবের শেষ নাই। বলদ কেন? সে নিজে তো সব ধরনের
এক্সেপশন চেক করতে পারেনা, ভাব বেশি কেন? কারণ, কম্পাইলার যেগুলা চেক করতে পারে আপনার
কোডে যদি ঐরকম এরর হওয়ার সম্ভাবনা থাকে আর আপনি যদি সেগুলা আগে থেকেই কম্পাইলারকে রিপোর্ট
না করেন আপনার কোড জীবনেউ কম্পাইল করবে না, আর কম্পাইল না হইলে রানটাইমেউ এরর পাবেন :D
মানে
কমিউনিটি সেন্টারে অনুষ্ঠান করবেন , কতজন লোক হবে তার আইডিয়া আগে থেকেই দিয়ে রাখতে
হবে এমন টাইপ আর কি। চেকড এক্সেপশন নিয়ে কাজ করলে এমন ভাবেই আগে থেকে কম্পাইলারকে জানিয়ে
রাখতে হবে, যে উমুক এক্সেপশন হতে পারে, আমি এটা হ্যান্ডেল করার জন্য প্রস্তুত। প্রস্তত
বললেই কি প্রস্তুত? কিভাবে হ্যান্ডেল করবেন??
দুই ভাবে করতে পারেন। কি কি ভাবে?
১।
try , catch ইউজ করে
২। throws keyword ইউজ করে
কম্পাইল
ধরতে পারে যে এক্সেপশন গুলা তাদের কি বলে মনে আছে? চেকড এক্সেপশন, আর যেগুলা কম্পাইলার
ধরতে পারে না রানটাইমে যেয়ে ধরা খায় তারা আনচেকড অথবা রানটাইম এক্সেপশন।
তার
মানে এই যে আমাদের কোডে যদি চেকড এক্সেপশন হওয়ার সম্ভাবনা থাকে তাহলে আমাদের কম্পাইলারকে
আগে থেকেই রিপোর্ট করতে হবে ,তা নাহলে কম্পাইলার আমাদের কোড কম্পাইল করবে না, আপনি
চেকড এক্সেপশন নিয়ে কাজ করতে গেলে কম্পাইলারকে রিপোর্ট করতে বাধ্য।
কয়েকটা
চেকড এক্সেপশনের নাম রিমাইন্ড করে নেই, ওকে?
IOException>FileNotFoundException
, ClassNotFound,SQLException, InterruptedException.
IOException নিয়ে কোড দেখব এখন।
import java.io.IOException;public class M {void m(int a){if(a<10){8. throw new IOException("device error");}}public static void main(String[] args) {M m=new M();13. m.m(5);}}
আউটপুটঃ
Exception
in thread "main" java.lang.RuntimeException: Uncompilable
source code - unreported exception java.io.IOException; must be caught or
declared to be thrown
at package.Test.m(Test.java:8) //method
“m”, Line “8”
at package.Test.main(Test.java:13)
//method”main”, Line” 13”
আমাদের কোডের কাজ ছিল , ভ্যালু যদি 10 (a<10) এর চেয়ে ছোট হয় তাহলে আমরা এক্সেপশন থ্রো করব । Line 13 এ আমরা মেইন মেথড থেকে ভ্যালু পাস করেছি 5 ( m.m(5) )। 5<10 তাই এক্সেপশন থ্রো হইসে, থ্রো করসি IOException (ইচ্ছা মতো অন্যকোনো এক্সেপশন ও থ্রো করতে পারতাম)।
IOException হইসে এইটা আপনি আগে থেকে রিপোর্ট করনেনি, তাই আপনার সোর্স কোড Uncompilable source code , আর যে এক্সেপশনটা রিপোর্ট করতে হতো সেটা হলো unreported exception java.io.IOException
IOException হইসে এইটা আপনি আগে থেকে রিপোর্ট করনেনি, তাই আপনার সোর্স কোড Uncompilable source code , আর যে এক্সেপশনটা রিপোর্ট করতে হতো সেটা হলো unreported exception java.io.IOException
প্রোগ্রাম
চালাইতে চাইলে রিপোর্ট তো করাই লাগবে, দুই ভাবে করা যায়, 1.throws and 2.(try, catch)
আগে
throws এর টা দেখি, throws
কিন্তু সবসময় মেথড এর সাথে লাগাতে হয়, মানে আপনার কোডের যেই মেথড থেকে চেকড
এক্সেপশন পইদা হউয়ার চান্স আছে সেই মেথডের সাথে
throws “উমুক এক্সেপশন”।
Syntax:
এই
মেথড() throws “উমুক এক্সেপশন”{
//Codes
or exceptions
}
উপরের
কোডে মেথডের নাম m(); তাহলে কিভাবে লিখব?
void
m() throws IOException{
//এক্সেপশন
হবে এমন লাইন // int a=”Rifat”; integer এর মধ্যে String
এক্সেপশন
হবে এমন কোন ইকুয়েশন(5/0) লিখতে পারেন, অথবা নিজে এক্সেপশন throw করতে পারেন।
throw
new IOException();
}
উপরের
কোডে ১৩ নাম্বার লাইনেউ এরর দেখাইসে, কারণ ১৩ নাম্বার লাইনে আমরা M ক্লাসের অবজেক্ট
বানিয়ে m() মেথডকে কল করেছি, আর m(); মেথড IOException throw করে, যেটা একটা
চেকড এক্সেপশন, যেটা এখন মেইন মেথডের মধ্যে চলে এল এই লাইন লিখার মাধ্যমে,
m.m(5);
তাই
আমাদের মেইন মেথডেউ IOException রিপোর্ট করতে হবে।
কোড
দেখেন বুঝেন কিনা এখন,
import
java.io.IOException;
public
class M {
void m(int a)throws IOException{
if(a<10){
throw new IOException("Code kaj
korse");
}
}
public static void main(String[]
args)throws IOException {
M m=new M();
m.m(5);
}
}
আউটপুটঃ
Exception in thread "main" java.io.IOException: Code kaj
korse
at package.class.m(M.java:8)
at package.class.main(M.java:13)
আউটপুট
এমন আসার কারণ, আপনি এক্সেপশন throw করেছেন ভাল কথা, কিন্তু কোনো catch ব্লক লেখেননি,
তাই JVM আপনার থ্রো করা এক্সেপশন Default
Exception Handler এর কাছে পাঠিয়ে দিয়েছে,
তাই সে আপনার এক্সেপশন ক্যাচ করে প্রিন্ট করে বন্ধ করে দিয়েছে।
Same
Code using try, catch
import
java.io.IOException;
public
class M {
void m(int a){
try{
if(a<10){
throw new IOException();
}
}catch(IOException e){
System.out.println("Kire
");
}
}
public static void main(String[] args){
M m=new M();
m.m(5);
}
}
আউটপুটঃ
Kire
BUILD SUCCESSFUL (total time: 0 seconds)
মেইন
মেথডে এইবার এক্সেপশন throws , try, catch কিছুই লাগেনি, কারণ m(); মেথডেই এক্সেপশন
try থেকে throw করে, ক্যাচ ব্লক দিয়ে রিসিভ করে এক্সেপশন হ্যান্ডেল করে ফেলেছে।আউটপুট
টা শুধু মেইন মেথডে পাঠাইসে তাই এইখানে কিছুই লাগেনি।
throw keyword: Built in এক্সেপশন হইলে জাভা Auto থ্রো করে,
কিন্তু আমরা যখন নিজের দেয়া শর্তের মধ্যে কোনো এক্সেপশন থ্রো করতে চাই তখনতো আর জাভা কাজটা করে দিবে না, তাই আমরা এক্সেপশন থ্রো করতে throw ইউজ করব। throw ইউজ করলে এক্সেপশন থ্রো হবে, then আগের এক্সেপশন যেভাবে হ্যান্ডেল করেছি এইটাও ঐভাবেই হ্যান্ডেল করতে পারব । আমরা ক্যাচ মেথডের মাধ্যমেউ রিসিভ করতে পারি, ক্যাচ না করলে JVM নিজের ক্যাচ মেকানিজম দিয়ে রিসিভ করবে , then এক্সেপশন show করে প্রোগ্রাম বন্ধ করে দিবে
কিন্তু আমরা যখন নিজের দেয়া শর্তের মধ্যে কোনো এক্সেপশন থ্রো করতে চাই তখনতো আর জাভা কাজটা করে দিবে না, তাই আমরা এক্সেপশন থ্রো করতে throw ইউজ করব। throw ইউজ করলে এক্সেপশন থ্রো হবে, then আগের এক্সেপশন যেভাবে হ্যান্ডেল করেছি এইটাও ঐভাবেই হ্যান্ডেল করতে পারব । আমরা ক্যাচ মেথডের মাধ্যমেউ রিসিভ করতে পারি, ক্যাচ না করলে JVM নিজের ক্যাচ মেকানিজম দিয়ে রিসিভ করবে , then এক্সেপশন show করে প্রোগ্রাম বন্ধ করে দিবে
থ্রো
এর ব্যবহার তো এতক্ষনে জেনে গেছেন হইতো, থ্রো দিয়ে আমরা নিজের ইচ্ছা মত শর্ত দিয়ে এক্সেপশন
থ্রো করতে পারি। তো কথা হচ্ছে throw keyword ArithmeticException,
IOException,SQLException এগুলা থ্রো করার
জন্য না, এগুলাও করা যায়। কিন্তু মূলত এটার আবির্ভাব হইসে User Define
Exception throw করার জন্য ।।।
মানে
৫/০ এইটা জাভার কাছে ArithmeticException , কিন্তু আপনার কখনো এমন দরকার পড়তে পারে
যে ৫/২ ইনপুট করলে এক্সেপশন থ্রো করতে চান
IntegerResultNotFound তো এগুলা আপনি
নিজে নিজে বানাইতে পারবেন, এগুলা পরের পোষ্টে থাকবে ইনশাল্লাহ।
Move to:
Post 7 Post 8
Post 6 Post 9
Post 5
Post 4
Post 3
Post 2
Post 1

Comments
Post a Comment