Java in Bengali

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 143

বাংলায়

জাভা

সূিচপ
পিরিচিত 0
উপ মিণকা 1
পাঠ ১: তামার থম জাভা া াম 2
পাঠ ২: িসনট া 3
পাঠ ৩: ডাটা টাইপস এবং অপােরটর 4
পাঠ ৩.১: এের 4.1
পাঠ ৩.২: এ ে শান(Expressions), টেম (Statements) এবং ক(Blocks) 4.2
পাঠ ৪: কে াল া -লুিপং- াি ং 5
পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১ 6
পাঠ ৫.১: ইনেহিরট া 6.1
পাঠ ৫.২: পিলফরিফজম 6.2
পাঠ ৫.৩: এনক াপসুেলশান 6.3
পাঠ ৬: জাভা এে পশান হ াে িলং 7
পাঠ ৬.১: াজার লুক 8
পাঠ ৭: ি ং অপােরশান 9
পাঠ ৮: জেনিরকস 10
পাঠ ৯: জাভা আই/ও 11
পাঠ ১০: জাভা এন আই/ও 12
পাঠ ১১: জাভা কােলকশান মওয়াক 13
পাঠ ১২: জাভা জিডিবিস 14
পাঠ ১৩: জাভা লিগং 15
পাঠ ১৪: িডবািগং 16
পাঠ ১৫: ািফক াল ইউজার ই ারেফইস 17
পাঠ-১৬: ড 18
পাঠ ১৭: নটওয়ািকং 19
পাঠ ১৮: জাভা কনকােরি 20
পাঠ ১৯: াস ফাইল এবং বাইটেকাড 21
পাঠ ২০: Understanding performance tuning 22
পাঠ ২১: মডান জাভা ইউেজস 23
অনুশীলন 24

1
বাংলায় জাভা

2
বাংলায় জাভা

জাভা া ািমং
Like Share 9.9K people like this. Sign Up to see what your friends like.

য়ংি য় কি িবউটেরর তািলকা


( থম ৫ জন)

[139] A. N. M. Bazlur Rahman (Rokon)


[012] Nuhil Mehdy
[012] Md. Ashikuzzaman
[004] Nazmul Hussain
[002] Mushrit Shabnam

সংে প
কােসর বণনা: জাভা বতমােন ব ল ব ব ত একিট া ািমং ল াং েয়জ। এ ার াইজ এি ক াশান
ডেভেলপেমে এখেনা জাভার িবক তির হয়িন বেল ধরা হয়। জাভার জনি য়তার মুল কারণ এর portability,
িনরাপ া, এবং অবেজ ওিরেয়ে ড া ািমং ও ওেয়ব া ািমং এর পিরপূণ সােপাট। এই কােস জাভার অ আ
ক খ থেক কের এর ব বহািরক েয়াগ এবং অন ন িবষয় েলা িনেয় আেলাচনা করা হেব।

কােদর জেন কাস: এই কাস মূলত িব িবদ ালয় এর থম বেষর ছা -ছা ীেদর জেন যারা অবেজ ওিরেয়ে ড
কনেস করেত চায়। তেব য কও চাইেল এই কাসিট করেত পাের। ধের নওয়া হে য, িশ াথী অ ত য
কান একিট া ািমং ল াং েয়জ (িস/িস++) স েক আেগ থেকই ধারণা রােখ।

Statutory warning
This book may contain unexpected misspellings. Reader Feedback Requested.

ওেপন সাস
এই বইিট মূলত া েম লখা এবং বইিট স ূন ওেপন সাস । এখােন তাই আপিনও অবদান রাখেত পােরন
লখক িহেসেব । আপনার কি িবউশান গৃ হীত হেল অবদানকারীেদর তািলকায় আপনার নাম যাগ কের দওয়া হেব ।

এিট মূলত একিট িগটহাব িরেপািজেটাির যখােন এই বইেয়র আিটেকল েলা মাকডাউন ফরম ােট লখা হে ।
িরেপাজটিরিট ফক কের পুল িরকুেয় পাঠােনার মাধ েম আপনারাও অবদান রাখেত পােরন । িব ািরত দখেত পােরন
এই িভিডওেত Video

Like 170 Share

পিরিচিত 3
বাংলায় জাভা

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives


4.0 International License.

পিরিচিত 4
বাংলায় জাভা

উপ মিণকা
১৯৯৫ সােলর ২৩ শ ম। ঝকঝেক ঝলমেল চমৎকার একিট িদন। জন গইজ, িডের র অব সান মাইে ািসে ম
সােথ Marc Andreesen, কা ফাও ার এবং ভাইস িসেড অব নটে প ঘাষণা দন য, জাভা টকেনালিজ
মােটই কান উপকথা নয়, বরং এিটই বা বতা এবং তারা এিট Netscape Navigator এর সংযু হেত যাে ।

স সময় জাভােত কাজ কের এমন লােকর সংখ া ি েশরও কম। তারা কখেনাই িচ া কের িন, তােদর এই িটম
ভিবষ ৎ পৃিথবীর ধানতম টকেনালিজ িনধারণ করেত যাে । ২০০৪ সােলর ৩ জানুয়ারী Mars Exploration
Rover ম ল েহর মানিটেত পা রােখ যার কে াল িসে ম থেক কের পৃিথবীর অিধকাংশ কনজুমার
ইেলক িন - (ক াবল সট-টব ব , িভিসআর, টা ার, িপিডএ, াটেফান) ৯৭% এ া াইজ ড টপ ৮৯%
ড টপ অব ইউএসএ, ৩ িবিলওন মাবাইল ফান, ৫ িবিলওন জাভা কাড, ১২৫ িমিলওন িটিভ িডভাইস, ১০০%
ু - র িড য়ার … এই িল ল া হেতই থাকেব) জাভা রান কের।

িনেচর িভিডও িট চমৎকার। একবার দেখ নওয়া যেত পাের।

চলুন একটু পছেনর ইিতহাস জেন নই।

তখন িস- াস াস এর এক ািধপত ।

সান মাই ািসে ম- মূলত হাডওয় ার ক ািন। ১৯৭২ থেক ১৯৯১ সােল কি উটােরর হাডওয় ােরর এক
রভু েলশান হয়। ত এবং উ মতা স হাডওয় ার অ দােম পাওয়া যাে এবং সই সােথ কমে
সফটওয় ােরর চািহদা তই বেড় যাে । ১৯৭২ Dennis Ritchie িস া ািমং ল াং েয়জ ডেভলপ কেরন যা
া ামারেদর মেধ সব থেক জনি য়। িক ততিদেন া ামারেদর কােছ িস -এর াকচাড া ািমং িকছু টা
াি কর মেন হেত কেরেছ। এর ফল িতেত Bjarne Stroustrup 1979 সােল ডেভলপ কের িস াস াস যা
িকনা িস এর এনহা েম । এিট সােথ অবেজ ওিরেয়ে ড া ািমং ধারণােক পিরিচত কের তুেল। অবেজ
ওিরেয়ে ড া ািমং এর সুিবেধ হে া ামার পুনব বহারেযাগ (reusable) কাড িলখেত পাের যা িকনা পের অন
কােজ পুনরায় ব বহার করা যায়।

উপ মিণকা 5
বাংলায় জাভা

১৯৯০ সাল। সান মাই ািসে ম -এ িস াস াস এর আিধপেত িস- ত লখা টুল এবং এিপআই েলা ায়
অবসু েলট হেত কেরেছ। Patrick Naughton,ইি িনয়ার অব সান মাই ািসে ম, মাটামুিট হতাশ এবং এক
ধরেণর অকওয় াড পিরি িতর ীকার। ততিদেন ি ভ জব অ াপল কি উটার থেক িবতািড়ত হেয় NeXT
Computer, Inc িত া কের ফেলেছন( যা িকনা সফটওয় ার ই াি েত ব িবক পিরবতন আনেত যাে এবং যার
ফল িতেত তির হেয়েছ আজেকর ম াক-ওস) এবং NeXTSTEP নােম একিট অপােরিটং িসে ম তির কেরন।
এেত িকছু অসাধারণ ব াপার িছল যার মেধ অবেজ ওিরেয়ে ড এি ক শান লয়ার এর ধারণািট িছল অসাধারণ
যােত িকনা অবেজ ধের ধের কা মাইজড সফটওয় ার তির কের ফলা যায়। Patrick Naughton ইিতমেধ
NeXT এর িদেক যাওয়ার জন মনি র কের ফেলেছন িক তখন একবার তােক শষ সুেযাগ িহেসেব একিট অিত
গাপন েজে র অনুেমাদন দওয়া হয় যার কথা কউ জানেতা না। িকছু িদন পেরই তার সােথ যু হয় James
Gosling এবং Mike Sheridan । তখন এর নাম দওয়া হয় ি ন েজ । সমেয়র সােথ ি ন েজ এর দে া ম
হয় এবং তারা কি উটার ছাড়াও িবিভ িডভাইস িনেয় নাচার করেত থােক।

এর মেধ ১৩ জন াফ এই ি ন িটম ক ািলেফািনয়ার মনেলা পােকর স িহল রাড এর একিট ছা অিফেস কাজ
করেত থােক। তােদর ধান উে শ িস াস াস এর একিট ভাল ভাসন তির করা যা িকনা হেব অেনক তগামী
এবং র ি ভ। সই সমেয় কি উটার ছাড়াও কনজুমার ইেলক িন যমন -িপিডএ, Cable-Set Top Box
ইত ািদর চািহদা বেড় গেছ। একদল ইি িনয়ার এক সােথ থাকেল যা হয়, তারা নানারকম িজিনস িনেয় িচ া করেত
থােক, নানা রকম আইিডয়া তির হয়, তা থেক ােটাটাইপ তির করেত থােক। এর মেধ জমস গসিলং তার িস
াস াস এনহা েম চািলেয় যেত থােকন। িতিন এর নাম দন িস াস াস াস াস মাইনাস মাইনাস (C++ ++ - -
) । এখােন বাড়িত ++ মােন হে নতুন িজিনস যাগ করা এবং - - মােন হে িকছু িজিনস ফেল দওয়া। জমস
গসিলং এর জানালা িদেয় একিট ওক গাছ দখা যায়। একিদন িতিন অিফস থেক বর হেয় ঐ গাছিটর িনেচ দাড়ান
এবং সােথ সােথ C++ ++ - - নাম পিরবতন করার িস া নন এবং নতুন নাম দন ওক।

এর মেধ ইি য়াররা িমেল এে েডড িসে ম িনেয় নাচার করেত থাকা অব ায় নানা রকম সমস ার স ুখীন হন।
এে েডড িসে ম এ মমির কম থােক, েসিসং পাওয়ার ও কম থােক। এই িসে েম িস++ (যা িকনা কি উটার এর
মেতা বড় ু িটি ে র হাডওয় ােরর জেন িডজাইন করা) চালােত িগেয় তারা অ ু ত অ ু ত সমস ার স ুখীন হেত
থােক। এইসব সমস ার সমাধান করার জেন ি ন িটম নানা রকম িচ া ভাবনা করেত থােক। এই সমেয় মানুষ িপিডএ,
Cable-Set Top Box েলার মরণদশা দখেত কের। কারণ যিদও ওক িনেয় যেথ এিগেয়েছ িক এিট
কানভােবই এেদরেক সাহায করেত পারিছল না। একমা একিট অেলৗিকক ঘটনায় পাের এই েজ সফল করেত।
িঠক তখিন সই তীি ত ত াশা আেলার মুখ দেখ। জমস জমস গসিলং আউট অব দ া ব একটা যুগা কারী
ধারণা িনেয় আেস। সিট হেলা ভাচুয়াল মিশন। অথাৎ আমরা একিটা কা িনক মিশেনর জেন কাড িলখেবা যা
িকনা ক াইল হেয় একিট অ বতীকালীন কাড তির করেব। এবং জাভা ভাচুয়াল মিশন সই অ বতীকালীন
কাডেক রান টাইম-এ িরেয়ল িডভাইেসর জেন েয়াজন অনুযায়ী মিশন কাড তির করেব।

িঠক সই সমেয়ই National Center for Supercomputing Applications (NCSA) একিট কমািশয়াল ওেয়ব
াউজার বর কের এবং তােদর িটম ই ারেনট এর ভিবষ ৎ িনেয় ভাবেত কের। তারা একিট নতুন ধারণা িনেয়
আেস সিট হেলা, একধরেণর ছা া াম যা িকনা াউজার এর মেধ চলেব - এর নাম দয় অ াপেলট। অ াপেলট
ধারণা থেক তারা িঠক কের অ াপেলট এর জেন িকছু াডাড – এিট হেত হেব ছা , খুব িস ল, এর াডাড
এিপআই থাকেত হেব, এিট হেব াটফম ইি েপে , এবং আউট-অব-দ া ব নটওয়ািকং া ািমং করা যােব।
তারা তখনকার সমেয়র ই ারেনট বুমেক উে শ কের ন ট জনােরশান াডা ডেভলপ করেত চেয়িছল। এই
েজ এর কাটুন নাম িছল Duke ( যা িকনা এখন জাভা-এর মা ট িহেসেব িচিন)। িক সমস া হে এর কানিটই
িঠক মেতা িস++ িদেয় করা যাি ল না। সুতরাং পরবতীেত তারা িস া নয় য এমেবেডড িসে েমর সমস ার
সমাধানিট তারা ওেয়ব াউজার এর ে ও ব বহার করেব । সই সমেয় মানুষ ওেয়ব াউজার এর ধুমা ািটক

উপ মিণকা 6
বাংলায় জাভা

পইজ এ ট ট আর ইেমজ ছাড়া িকছু দখেত পত না। এই টকেনালিজ ব বহার করায় াউজার এিনেমশান থেক
কের ই ােরকিটভ অ াপেলট সকেলর নজর কােড় যা িকনা জাভা া ািমং ল াং েয়জ এর সফলতার মূল
কারণ।

জমস গসিলং এর এই ভাচুয়াল মিশন-এর সলু শান িছল সিত কার অেথই যুগা কারী এবং Û Æ Û½Ì এর িরিলজ

িদেত ত। িক তখন-ই নতুন ঝােমলার সূচনা হয়, lawyers এেস তােদর জানায় এর নাম Oak দওয়া যােব না,
কারণ এিট ইিতমেধ ই Oak Technologies এর ড মাক। সুতরাং নাম পিরবতন করেত হেব। হয় ইন িমং
। িক কান ভােবই একিট ভাল নাম িনবাচন করা যাি ল না। অেনেকই অেনক ধরেণর নাম উপ াপন কের, যমন -
DNA, Silk , Ruby, yuck, Silk, Lyric, Pepper, NetProse, Neon, Java ইত ািদ ইত ািদ। এর সব েলা
িলগাল িডপাটেম এ সাবিমট করার পর মা Java, DNA, and Silk এই িতনিট নাম িফের আেস যা িকনা ি ন।
নাম িনেয় ঘ ার পর ঘ ার িমিটং চলেত থােক। এর মেধ Chris Warth েপাজ কের Java, কারণ তখন তার হােত
িছল এক কাপ গরম Peet's Java (কিফ)। শষ পয নাম িঠক করা হয় Java কারণ একমা এই নােমই সব থেক
পিজিটভ িরএকশান পাওয়া যাি ল।

১৯৯৫ সােলর ম মােস জাভা এর থম পাবিলক ভাসন িরিলজ হয়।

এর পেরর ইিতহাস আমরা সবাই জািন। জাভা হে এই েহর সবেচেয় সফল া ািমং ভাষা।

উপ মিণকা 7
বাংলায় জাভা

তামার থম জাভা া াম
আমরা এই চ া ার এ য য িবষয় েলা দখেবা স েলা হেলা-

া ািমং ল াং েয়জ িক এবং কন


কন জাভা
জাভা িকভােব কাজ কের, ভতেরর বৃ া
জাভা একিট ক াই ল াং েয়জ না ই ারে েটড ল াং েয়জ
জাভা ভাচুয়াল মিশন িক এবং িকভােব কাজ কের
জাভা রানটাইম
জাভা ডেভলপেম িকট এবং আইিডই
জিডেক ইন েলশন
একিট হ ােলা ওয়া া াম

া ািমং ল াং েয়জ িক ?

া ািমং ল াং েয়জ হে এক ধরেণর কৃি ম ভাষা যা িকনা য িবেশষ কের কি উটার-এর আচরণ িনয় ণ করার
জেন ব বহার করা হয়। মানুেষর ভাষার মেতা এর িকছু িসনট া এবং সম াি স অথাৎ িনয়মকানুন ও অথ থােক।
আমােদর এই বই এর উে শ হে একিট িবেশষ ভাষার(জাভা) িনয়মকানুন েলা জেন নওয়া। সুতরাং পড়েত
থাকুন।

কন জাভা?

পৃিথবীেত এখন পয অেনক েলা া ািমং ভাষা তির করা হেয়েছ। এেদর েত কিটর উে শ িভ িভ ।
http://en.wikipedia.org/wiki/List_of_programming_languages এখােন একিট া ািমং ল াং েয়জ এর
একিট িল দওয়া আেছ- দেখ নওয়া যেত পাের। েত কিট ল াং েয়জ এর িকছু সুিবধা অসুিবধা আেছ, এবং
ল াং েয়জ েলা িতিনয়ত উ ত হে , এবং নতুন নতুন ল াং েয়জ তির হে ।

য য কারেণ জাভা শখা যেত পাের এখন স েলা িনেয় আেলাচনা করা যাক-

এিট খুব-ই (Readable)পাঠেযাগ , সহেজ বুঝা যায়। অন য কান া ািমং ব াক াউ এর া ামার খুব
সহেজই একিট জাভা-ফাইল দেখ বুঝেত পারেব আসেল কাড এ িক লখা আেছ।
িস িকংবা িস++ এ কাড করার সময় আমােদর অেনক সময়-ই িলংিকং, অপিটমাইেজশান, মমির
এেলােকশান, মমির িড-এেলােকশান, পেয় ার িডেরফােরি ং ইত ািদ নানা রকম িজিনস িনেয় ভাবেত হয়, িক
জাভার ে এ েলার কথা ভাবেতই হয় না। খুব বিশ িচ া না কের আমরা িনি তভােব জাভা ক াইলার
এর উপর সব িকছু ছেড় িদেত পাের।
জাভােত অসংখ API আেছ য েলা খুবই বল, খুব বিশ িচ াভাবনা না কেরই এেদর িনেয় খুব সহেজই কাজ
কের ফলা যায়।
জাভা -র সব িকছু ই ওেপন সাস।
জাভা ভাচুয়াল মিশন স বত সফটওয় ার- জগেত সব থেক চমৎকার সৃ ি । জাভা-এর সােথ এর আরও
অেনক েলা ল াং েয়জ যমন- িভ, ালা ইত ািদ িনেয় কাজ করা যায়।

পাঠ ১: তামার থম জাভা া াম 8


বাংলায় জাভা

গত ১৫ বছের চমৎকার অেনক েলা ডেভলপেম এনভায়রনেম তির হেয়েছ য েলা খুবই ইে িলেজ –
যমন- Eclipse, IntelliJ IDEA, netbeans etc. । এ েলা মাধ েম খুব আেয়েশর সােথই কাড করা যায়,
িডবাগ করা যায়।
এিট একিট অবেজ ওিরেয়ে ড- টাইপ সইফ া ািমং ল াং েয়জ।
এিট পােটবল য কান াটফেম চেল। একবার কাড িলেখ সিট য কান মিশেন( উইে াজ , িলনা , ম াক)
চালােনা যায়।
অেনক বড় কিমউিনিট সােপাট- সারা দুিনয়ােত িমিলয়নস অব জাভা া ামার ছিড়েয় িছিটেয় আেছ।
এিটর পারফরেম িনেয় বলা চেল কান সে হ নই।
ই াি েডড, বড় বড় এ ার াইজ অ াপ েলা সাধারণত জাভা িদেয় লখা হয়।
এিট পৃিথবীেত ি তীয় জনি য় ল াং েয়জ-
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

এই িল এখােনই থািমেয় দই- কারণ এিট শষ হেত চাইেব না কখেনাই।

জাভা িকভােব কাজ কের ?

জাভা কাডেক ক াইল করেল সিট একিট অ বতীকালীন ল াং েয়জ এ পা িরত হয়। এিট িঠক িহউম ান
িরডএবল না আবার মিশন িরডএবল ও না। এেক আমরা বিল বাইট কাড। এই বাইটেকাড ধুমা জাভা ভাচুয়াল
মিশন(JVM) বুঝেত পাের। JVM বাইট কাড ক ই ারে ট কের মিশন ল াং েয়জ এ পা িরত কের। এর জেন
JVM জা ইন টাইম(JIT) ক াইলার ব বহার কের। সুতরাং দখা যাে , জাভা কাডেক থেম ক াইল করা হয়,
তারপর সই আউটপুট ক ই ারে ট করা হয়। এে ে হেত পাের, জাভা আসেল িক? ক াই ল াং েয়জ
নািক ই ারে েটড ল াং েয়জ? উ র হে জাভা এিক সােথ দুেটাই।

উপেরর বণনা থেক আমরা িতনিট িজিনস জানলাম -

১. বাইট কাড – এিট হে এক ধরেণর ই াকশান সট- যা িকনা ধুমা জাভা ভাচুয়াল মিশন বুঝেত পাের। জাভা
কাড ( িহউম ান িরডএবল) অথাৎ আমরা য কাড েলা িলখেবা স েলা ক জাভা ক াইলার ারা ক াইল
করেল বাইটেকাড তির হয়। এই বাইটেকাড েলা .class এ েটনশন যু বাইনারী ফাইেল ার করা হয়।

পাঠ ১: তামার থম জাভা া াম 9


বাংলায় জাভা

২. জাভা ভাচুয়াল মিশন(JVM) - এিট মূলত একটা বা ব মিশেনর ভতর একটা কা িনক মিশন। সহজ কথায়-
এিট একিট স টওয় ার যা িকনা বাইট কাড পেড় স েলা মিশন এি িকউেটবল কাড-এ পা িরত করেত পাের।
JVM অেনক লা মিশেনর জেন লখা হেয়েছ- অথাৎ এিট উইে াজ, ম াক OS, িলনা , আইিবএম
mainframes, সালািরস ইত ািদ অপােরিটং িসে েমর জেন আলাদা আলাদা কের লখা হেয়েছ। এর ফেল, আমরা
যিদ একবার কান জাভা া াম িলিখ, সিট যেকান মিশেন চালােনা যােব। এর কারণ আমরা এখন কান িনিদ
মিশনেক উে শ না কের ধু মা JVM ক উে শ কের কাড িলিখ । যেহতু সব মিশেনর জেন ই JVM আেছ,
সুতরাং আমােদর কাড সব মিশেনই চলেব। আর এভােবই - “Write once, run anywhere” বা WORA
স ব হেয়েছ।

৩. জা ইন টাইম( JIT) ক াইলার – এিট মূলত JVM এর একিট অংশ। আমরা য জাভা কাড ক াইল করার
সময় তির কির স েলা মূলত JIT ক াইলার েসস কের। এেক dynamic translator ও বলা যায়- কারণ এিট
রানটাইম-এ অথাৎ া াম চলাকািলন সমেয় বাইটেকাড েসস কের।

এবার আমরা আরও িকছু টািমেনােলািজ(পিরভাষা) এর সােথ পিরিচত হই।

জাভা রানটাইম এনভায়রনেম (JRE) –এিট মূলত একিট জাভা া াম রান করার জেন অ ত:পে য সব
কে ােন লােগ তার একিট প ােকজ। এর মেধ থােক JVM এবং িকছু া াড এিপআই।

জাভা ডেভলপার িকট (JDK) – এিট হে JRE এবং জাভা কাড লখার জেন য সব টুল েলা লােগ তার
একিট সট। জাভা া াম লখার জন ধু মা JDK থাকেলই চেল কারণ এর মােঝই সব িকছু দয়া থােক।

জাভার িতনিট সাবেসট আেছ স েলা হেলা -

জাভা া াড এিডশন (JSE)

ড টপ এবং া -অ েলান সাভার এি েকশান তির করার জেন য সব টুল এবং এিপআই দরকার হয়
স েলােক আলাদা কের এর নাম দওয়া হেয়েছ জাভা া াড এিডশন।

জাভা এ ার াইস এিডশন (JEE) – এিট JSE এর উপর তির ওেয়ব এবং অেনক বড় মােপর এ ার াইজ
এি েকশান তির করার জেন য সব কে ােন দরকার হয় স েলােক আলাদা কের এর নাম দওয়া হেয়েছ জাভা
এ ার াইস এিডশন- উদারহরণস প এর কে ােন েলা হে -

Servlets
Java Server Pages (JSP)
Java Server Faces (JSF)
Enterprise Java Beans (EJB)
Two-phase commit transactions
Java Message Service message queue API's (JMS)
etc.

জাভা মাইে া এিডশন (JME)

এিট মূলত জাভা া াড এিডশন এর সংি এিডশন। ই ারেনট অব িথংস, এমেবড িডভাইস, মাবাইল
িডভাইস, মাইে াকে ালার, স র, গটওেয়, মাবাইল ফান, ব ি গত িডিজটাল সহায়ক (িপিডএ), িটিভ
সট টপ ব , ি ার ইত ািদ জেন তির জাভার এই সংি এিডশন ক বলা য় - জাভা মাইে া এিডশন ।

পাঠ ১: তামার থম জাভা া াম 10


বাংলায় জাভা

এবার তাহেল জাভা চলুন জাভা ই টল কের ফিল--

িলনা মিশেন জাভা ইন ল করেত িনেচর ধাপ েলা apply করেত হেব-

ধাপ ১: িনেচর িলংক থেক জাভা ডাউনেলাড কের িনন।

Oracle JDK 7 Download Link

ধাপ ২: এরপর টািমনাল থেক যখােন জাভা ডাউনেলাড হেয়েছ সখােন যান-
cd ~/Download

ধাপ ৩: এবার JDK ইন ল কির-


sudo tar -xzvf jdk-7u21-linux-i586.tar.gz --directory=/usr/local/

sudo ln -s /usr/local/[jdk_folder_name]/ /usr/local/jdk

jdk_folder_name - আপনার পছ মত একিট নাম িদন।

ধাপ ৪: আবার টািমনােল িফের যান- .bashrc অেপন ক ন।


sudo gedit .bashrc

ধাপ ৫ : .bashrc ফাইল-এ িনেচর লাইনিট এড ক ন।


export JAVA_HOME=/usr/local/jdk

Save and close .bashrc file.

ধাপ ৬: ক াইল .bashrc ফাইল


source .bashrc

ধাপ ৭: এবার পরী া কের দখা যাক জাভা ইন ল হেয়েছ িকনা। আবার টািমনাল ওেপন ক ন এবং িনেচর
লাইনিট টাইপ ক ন।
java -version

যিদ সবিকছু িঠকঠাক থােক তাহেল আপিন িনেচর তথ েলা দখেত পারেবন-

java version "1.7.0_65"


Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

আর উইে াজ মিশেনর ে এিট আেরা সহজ। এর জেন ধুমা JDK িট ডাউনেলাড কের ডাবল-ি ক কেরই
এিট ইন ল করা যােব।

IDE-

এে ে আিম দুিট আইিডইর কথা বলেত পাির-

১. Eclipse - https://www.eclipse.org/downloads/

পাঠ ১: তামার থম জাভা া াম 11


বাংলায় জাভা

২. IntelliJ IDEA - http://www.jetbrains.com/idea/download/

তেব এই িটউেটািরয়ােল আমরা Eclipse ব বহার করেবা।

তা চলুন- এবার তাহেল আমােদর থম Hello world া ামিট িলেখ ফিল।

package bd.com.howtocode.java.helloworld;

public class HelloWorld {

public static void main(String[] args) {


System.out.println("Hello, world!");
}
}

পাঠ ১: তামার থম জাভা া াম 12


বাংলায় জাভা

পাঠ ২: িসনট া
প ােকজ িডে য়ােরশান
ইে াট
াস
িফ স
মথডস
ক াকটরস
কেম স

এই চ া াের আিম একিট জাভা া াম এর মৗিলক িকছু ওভারিভউ দয়ার চ া করেবা। তেব েত সুিবধােথ
আমােদর িকছু টামস স েক জেন নওয়া জ ির।

অবেজ

যেহতু জাভা একিট অবেজ ওিরেয়ে ড ল াং েয়জ, সুতরাং েত জানেত হেব অবেজ িক। অবেজ এর
মােন আমারা যা জািন, সটা হে আমােদর জড়জগেতর কান ব , যােক িঠক শ করা যায়। তেব যেহতু আমরা
ক না করেত পাির, আমরা অেনক িকছু ধের িনেত পাির, মেন ক ন - একিট বাইসাইেকল। বাইসাইেকল বলেতই
আমেদর মাথায় একিট িচ চেল আেস। আমরা এর বিশ েলা জািন, যমন এিটর দুইিট চাকা থােক, একিট বসার
িসট থােক, এর ক আেছ। তারপর এও জািন য এিট িক কের, অথাৎ সাইেকল এর কাজ েলাও আমরা জািন-
যমন এিট চেল। দখা যাে য আমরা একিট বাইসাইেকল এর অব া ও আচরণ স েক জািন। এই অব া ও
আচরণ েলা িনেয়ই বাইসাইেকল একিট অবেজ ।

আমরা যিদ আমােদর ক নাটুকু আেরকটু বািড়েয় িনেয় বিল, সাইেকল হে একিট সফটওয় ার কে ােন যা িকনা
কি উটাের চেল, আমার মেন হয় কােরা আপি থাকার কথা নয়।

যেহতু আমারা া ািমং িনেয় আেলাচনা করিছ, সুতরাং এভােব বিল, আমরা যিদ একটা া াম িলিখ, সই
া ােমর ছা একিট অংশ যার আমােদর এই বাইসাইেকল এর মেতা বিশ থােক, এবং একিট িকছু কাজ স াদন
করেত পাের, তাহেল সই ছা অংশিটেক অবেজ বলেত পাির।

াস

মেন কির আমরা একটা বািড় বানােত চাই। থেম আমরা িচ া কির বািড়টা আসেল িকভােব বানােবা। আমরা জায়গা
িনবাচন কির। তারপর িচ া কির বািড়িট কত-তলা হেব, কয়টা এপাটেম হেব, এপাটেম েলা কত য়ারিফেটর
হেব। তারপর িচ া কির, একটা এপাটেম এ কয়িট ম হেব, িয়ং েমর দঘ কত হেব, কয়টা বাথ থাকেব,
বলকিন কাথায় থাকেব, রা া ঘর কাথায় হেব ইত ািদ ইত ািদ। আ া এ েলা িঠক হেয় গল, এখন আমরা িচ া
করেবা আরও জিটল কাজ িনেয়। ওয় ািরং িনেয়, েত ক েম কয়টা পেয় থাকেব, পািনর লাইন িকভােব নব।
তারপের বাথ েম িক ধরেণর টাইল ব বহার করেবা, াের কান েলা।

অথাৎ বািড়িট বানােনার আেগই আমরা সব িকছু িনধারণ কের ফলিছ এবং আমরা এই িবষয় েলা সব িলিপব কের
রািখ। তারপর এই িলিপব লখা েলােক নানাভােব পরী া কের স চক কের চূড়া কির। এর একিট গলাভরা
নাম আেছ, সটা হে - blueprint.

পাঠ ২: িসনট া 13
বাংলায় জাভা

আমােদর এে বাড়িট হে অবেজ । এই অবেজ বানােনার আেগ আমােদর blueprint এর দরকার হয়। আর এই
blueprint কই আমরা বিল াস।

আমরা তাহেল এখন অবেজ এবং াস এর ধারণা জািন। এবার তাহেল আমােদর মূল িবষয় িসনট িনেয় কথা বিল-

আমরা যারা িস িকংবা অন কান া ািমং ল াং েয়জ আেগ থেকই জািন, একিট া ােম দুিট িজিনস অবশ ই
কমন থােক - স েলা হেলা - ফাংশান এবং ডটা ।

একিট জাভা া াম িলখেত হেল আমােদরেক অবশ এই একিট ফাইল তির করেত হেব যার এ েটনশন হেব .java.
উদাহরণস প- HelloWorld.java এবার আমরা ল কির একিট জাভা া ােম িক িক থােক-

প ােকজ িড ােরশন
ইে াট টেম স
টাইপ িড ােরশন
িফ স
মথডস

উপেরর নাম েলা িনেয় লাগেল সমস া নই, এ িণ স েলা িনেয় আেলাচনা করিছ, তেব তার আেগ একিট
জাভা া াম দেখ িনই।

package bd.com.howtocode.java.tutotorial.syntax;

import java.util.HashMap;

public class HelloWorld {


protected final String hello = "value";

public static void main(String[] args) {


}
}

এই কাডিটর েতই আেছ প ােকজ িড ােরশন। আমরা আমােদর কি উটাের নানা ধরেণর ফাইল িবিভ ফা াের
সািজেয় রািখ। যমন- মুিভ ফা াের হয়েতা আমরা ধুই মুিভ রািখ, সখােন অন ফাইল রািখ না। আবার মুিভ
ফা াের এর মেধ আেরা সাব- ফা ার তির কির আেরা আলাদা করার জেন , যমন – বাংলা মুিভ, ইংেরিজ মুিভ
ইত ািদ। জাভােত প ােকজ বলেত এই ধারণিটই বুঝায়। একিট জাভা া ািমং ভাষায় লখা স টওয় ার এ শত শত
বা হাজার হাজার পৃথক াস থাকেত পাের। এজেন প ােকজ িড ােরশন এর মাধ েম আমরা এিক রকম াস েলা
একিট প ােকেজর মেধ আলাদা কের রািখ।

উদাহরণস প এখােন প ােকজ াকচার এর একিট ি নশট দওয়া হল-

পাঠ ২: িসনট া 14
বাংলায় জাভা

প ােকজ নাম েলােক লায়ার কস অ ের-এ িলখেত হয়।

কা ািন েলা তােদর ই ারেনট ডােমইন নইম ক উে া কের তােদর প ােকেজর নাম িলেখ। যমন -
example.com এর একিট া ামার একিট প ােকেজর নাম িলখেব এইভােব- com.example.package.

আমােদর ে -

পাঠ ২: িসনট া 15
বাংলায় জাভা

package bd.com.howtocode.java.tutotorial.syntax;

তারপর আমােদর া ােমর ি তীয় লাইনিট হেলা - ইে াট টেম স। অন কান প ােকেজর াস যিদ আমােদর
া ােম দরকার হয় তাহেল আমারা সিটেক এভােব ইে াট করেত পাির। এিট িস া ািমং এর ইন ু ড টেম স
এর মেতা।

import java.util.HashMap;

এর পেরর লাইনিট হেলা টাইপ িড ােরশন। জাভােত একিট টাইপ একটা াস অথবা ই ারেফইস অথবা এনাম হেত
পাের(ই ারেফইস এবং এনাম িনেয় পের আেলাচনা করা হেব)। াস ে েত class িকওয়াড িলেখেত হয়
তারপর কািল স { এবং শষ } করেত হয়। আমােদর পরবিত িতটা লাইন কাড এই কািল স { } এর
ভতের িলখেত হেব।

public class HelloWorld { }

এখােন অিতির একিট public িকওয়াড দখা যাে । এই মু েত ধু মেন রাখুন াস এর েত এিট িলখেত হয়।
পের এিট িনেয় আেলাচনা করা হেব।

এর পেরই আমরা যা দখিছ তােক বলা হয় িফ িড ােরশন। অথাৎ আমরা য িবিভ রকম ভ ািরয়বল িড ার কির,
স েলা।

protected final String hello = "value";

এবং এর পেরই থােক মথড। িস িকংবা অন ান া ািমং ল াং েয়জ এ যােক আমরা ফাংশন িকংবা সাব িটন বেল
থােক, এখােন আমরা স েলােক মথড বিল।

এে ে আমােদর মথড হে -

public static void main(String[] args) {


}

এিট হে মইন মথড। জাভা া ামেক রান করেত হেল অবশ ই কান ােস একিট মইন মথড থাকেত হেব।
এবার আমরা িকছু িজিনস ি করার চ া কির-

জাভােত কনসেল িকছু ি করার জেন System.out.println() অথবা System.out.print() ব বহার করা হয়।

আমরা যিদ িনেচর া মিট রান কির-

পাঠ ২: িসনট া 16
বাংলায় জাভা

package bd.com.howtocode.java.tutotorial.syntax;

public class HelloWorld {


public static void main(String[] args) {
System.out.println("Hello, world!"); // Advance the cursor to the beginning of next l
System.out.println(); // Print a empty line
System.out.print("Hello, world!"); // Cursor stayed after the printed string
System.out.println("Hello,");
System.out.print(" "); // Print a space
System.out.print("world!");
System.out.println("Hello, world!");
}
}

তাহেল কনসেল িনেচর লাইন েলা ি হেব-

Hello, world!

Hello, world!Hello,
world!Hello, world!

আমরা ইিতমেধ জািন াস িক- তাহেল এবার একিট াস িলেখ ফলা যাক-

পাঠ ২: িসনট া 17
বাংলায় জাভা

package bd.com.howtocode.java.tutotorial.syntax;

/**
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/
public class Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;

void changeCadence(int newValue) {


cadence = newValue;
}

void changeGear(int newValue) {


gear = newValue;
}

void speedUp(int increment) {


speed = speed + increment;
}

void applyBrakes(int decrement) {


speed = speed - decrement;
}

void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}

আমরা াস এবং অবেজ িক জািন, িক িকভােব াস থেক অবেজ তির করেত হয় সিট এবার দখা যাক-

পাঠ ২: িসনট া 18
বাংলায় জাভা

package bd.com.howtocode.java.tutotorial.syntax;

/**
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/

public class BicycleDemo {


public static void main(String[] args) {
// Create two different
// Bicycle objects

Bicycle bike1 = new Bicycle();


Bicycle bike2 = new Bicycle();

// Invoke methods on
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();

bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates();
}
}

আমরা জািন য জাভা া াম চালু করেত হেল একিট মইন মথড দরকার হয়। উপেরর া ামিটেত একিট মইন
মথড আেছ। এবং এর ভতের েত আমরা দুইিট অবেজ তির কেরিছ।

Bicycle bike1 = new Bicycle();


Bicycle bike2 = new Bicycle();

জাভােত অবজ তির করা খুব সহজ। এর জেন আমােদর িতনিট প দরকার হয়-

িড ােরশন
ইনসেটনিশেয়শান
ইিনিশয়ালাইেজশান

Bicycle bike1 = new Bicycle(); ​​

পাঠ ২: িসনট া 19
বাংলায় জাভা

উপেরর বা অ ের লখাটুকু হে িড ােরশন, তারপর সমান িচ এর পর new িকওয়াড পয হে


ইনসেটনিশেয়শান এবং এর পেরর অংশটুকুেক ইিনিশয়ালাইেজশান বলা হয়। ইিনিশয়ালাইেজশান এর জেন আমােদর
াসিটর কন াকটরেক কল করেত হয়। কন াকটর িনেয় একটু পেরই কথা বলিছ।

এখােন িড ােরশন টাইপ িড ােরশন এর মেতাই। ভ ািরয়বল চ া াের আমরা আেরা িডেটইলস দখেবা।

তারপর অবেজ িট ধের ডট অপােরটর ব বহার কের সই ােসর মথড েলা কল করা হয়েছ। এই া ামিট রান
করেল আউটপুট আসেব-

cadence:50 speed:10 gear:2


cadence:40 speed:20 gear:3

কন াকটর

কন াকটর অন ান মথড বা ফাংশেনর মতই একিট মথড বা ফাংশেন। তেব এিটর কান িরটান টাইপ নই। একিট
াসেক একিট অবেজ -এ তির করেত য েয়াজনীয় কাজ েলা করেত হয়, কন াকটর সই কাজ েলা কের
থােক। তেব মজার ব পার হে সই েয়াজনীয় কাজ েলা জেন আমােদর কাড িলখেত হয় না।

আমােদর উপেরর াসিটেত আমরা কান কন াকটর িলিখ িন। তাহেল এর অবেজ তির হেলা িকভােব? উ রিট
হে আমরা যিদ কান কন াকটর না িলিখ তাহেল জাভা ক াইলার িনেজ থেকই একিট কন াকটর িলেখ
ক াইল কের, যােক আমরা বিল িডফ কন াকটর। তেব আমরা চাইেল িনেজর একিট িলখেত পাির।

public class Bicycle {


int cadence = 0;
int speed = 0;
int gear = 1;

public Bicycle() {
}
}

এবার আমরা দখেবা িকভােব জাভােত কেম িলখেত হয়-

জাভা িতন ধরেণর কেম সােপাট কের-

Comment | Description
/* text */ | ºÚËÚ ³ ÈÚ¦ÑÚÏ /* áÃá³ */ È
// text | ºÚËÚ ³ ÈÚ¦ÑÚÏ // áÃá³ ÑÚ
/** documentation */ | ¬Û½ Øá ¹ ¿³ÝáÌ ½ÚÕÚÆ ³áÌèƽ । ¬á³ doc comment ÊÑ

উদাহরণ-

পাঠ ২: িসনট া 20
বাংলায় জাভা

package bd.com.howtocode.java.tutotorial.syntax;

/**
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
*
* @author Bazlur Rahman Rokon
* @since 9/20/14.
*/
public class HelloWorld {
public static void main(String[] args) {
// Prints Hello, World! on standard output.
System.out.println("Hello, world!");

/*
for (int i = 0; i < 100; i++) {
System.out.println(i);
}*/
}
}

আরও িকছু িনয়ম:

জাভােত েত কিট টেম এর পর সিমেকালন (;) িদেয় টেম শষ করেত হয়।


জাভা একিট কইস সনিসিটভ ল াং েয়জ- অথাৎ hello এবং Hello দুিট আলাদা শ ।

অনুশীলন:

িনেচর প াটান েলা ি করেত চ া ক ন -

* * * * * * * * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * * * *
(a) (b) (c)

পাঠ ২: িসনট া 21
বাংলায় জাভা

পাঠ ৩: ডাটা টাইপস এবং অপােরটর


ভিরেয়বল
ি িমিটভ ডাটাটাইপ, ইি জার, লং, ডাবল, ইি জার, াট এবং কার
রপার াস
িলটােরল
িবিভ রকম অপােরটর

ভ ািরয়বল

ভ ািরয়বল হে একিট নাম যা কি উটােরর একিট মেমাির লােকশান ক িনেদশ কের। উদাহরণ-

int cadence = 0;

একিট ভ ািরয়বল িড ােরশন এর জেন একিট ডাটাটাইপ দরকার হয়, অথাৎ ভ ািরয়বল িট িক ধরেণর ডাটা হা
করেত তা বেল িদেত হেব। উপেরর উদাহরণিটেত আমরা একিটভ ািরয়বল িড ার কেরিছ যার নাম cadence এবং
এিট ইি জার টাইপ ডাটা হা কের।

যেহতু জাভা একিট ািটক ািল টাইপড ল াং েয়জ সুতরাং ভ ািরয়বল িড ােরশন এর সময় ডাটাটাইপ উ্ে খ
করা অত াবশ ক।

জাভােত আমরা চার ধরেণর ভিরেয়বল িনেয় কাজ কের থািক -

1. Instance Variables (Non-static fields)


2. Class Variables (Static Fields)
3. Local variables
4. Parameters variables

জাভােত ভ ািরয়বল এবং িফ দুই শ ই ব বহার করা হয়, তেব এর িকছু টকিনকাল পাথক আেছ। স েলা িনেয়ই
আেলাচনা করা হেব –

আমরা আবার একিট উদাহরণ দিখ –

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 22


বাংলায় জাভা

public class Bicycle {


static int numGears = 6;

int cadence = 0;
int speed = 0;
int gear = 1;

public Bicycle() {
}

void changeCadence(int newValue) {


cadence = newValue;
}

void changeGear(int newValue) {


gear = newValue;
}

void speedUp(int increment) {


speed = speed + increment;
}

void applyBrakes(int decrement) {


speed = speed - decrement;
}

void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}

আমরা জািন য একিট াস থেক আমরা অবেজ তির কির। আমরা একটা াস থেক অেনক েলা অবেজ তির
করেত পাির। এবং েত ক অবেজ -ই আলাদা আলাদা। যমন -

Bicycle bike1 = new Bicycle();


Bicycle bike2 = new Bicycle();

এখােন bike1 এবং bike2 দুিট স ূণ আলাদা অবেজ ।

এখন bike1 এবং bike2 ত িকছু ভ ািরয়বল েলাও আলাদা। অথাৎ আমরা যত েলা অেজ তির করেতবা িঠক
তেতা েলা আলাদা ভ ািরয়বল থাকেব মেমািরেত। এে ে মেমািরেত ২টা cadence থাকেব, ২টা gear থাকেব
এবং ২ speed ধাকেব।

এই ভ ািরয়বল েলােক Instance Variables বা Non-static fields বলা হয়। এই ভ ািরয়বল েলা আেগ
static িকওয়াডিট থােক না।

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 23


বাংলায় জাভা

static int numGears = 6;

উপেরর উদাহরণিটেত numGears নােম একিট ভ ািরয়বল আেছ, এিটর আেগ একিট static িকওয়াডিট আেছ।
এ ধরেণর ভ ািরয়বল ক Class Variables বা Static Fields বলা হয়। static িকওয়াডিট ক াইলারেক বেল য
numGears নােম একিট মা ভ ািরয়বল থাকেব মেমািরেত, অবেজ এর সংখ া যতই হাক।

লাকাল ভ ািরয়বল হেলা সসব ভ ািরয়বল য েলা কান মথেডর মােঝ িড ার করা হয়। একিট লাকাল
ভ ািরয়বল ধু মা সই মথেডর ভতর থেকই একেসস করা যােব।

আর Parameters variables হেলা সই ভ ািরয়বল েলা য েলা মথড কল করার সময় পাস করা হয়। এ
েলাও ধুমা মথেডর ভতর থেকই একেসস করা যায়।

আমরা Instance Variables এবং Class Variables েলােক িফ বিল।

এখােন িকছু ভ ািরয়বল িড ারােশেনর উদাহরণ দওয়া হেলা -

byte myByte;
short myShort;
char myChar;
int myInt;
long myLong;
float myFloat;
double myDouble;

েত আেগ টাইপ িলখেত হেব, তারপর একিট নাম, তারপর সিমেকালন িদেয় শষ করেত হেব। তেব আমরা চাইেল
ভ ািরয়বল ক ইিনিশয়ালাইেজশান করেত পাির। যমন -

int cadence = 0;

অথাৎ েত আমরা cadence এর ভ ালু 0 এসাইন করালাম।

এরপর যিদ আমরা কান ভ ািরয়বেল ভ ালু এসাইন করেত চাই তাহেল -

myByte = 127;
myFloat = 199.99;

জাভা ভ ািরয়বল লখার িকছু িনয়ম কানুন আেছ-

1. ভ ািরয়বল েলা কইস সনিসিটভ। অথাৎ money, Money,MONEY িতনিট আলাদা।


2. ভ ািরয়বল অবশ ই যেকান একিট লটার িদেয় করেত হেব। তেব $ অথবা _ িদেয়ও করা যায়।
3. ভ ািরয়বল এর মােঝ না ার িকংবা _ থাকেত পাের।
4. ভ ািরয়বল জাভার কান reserved িকওয়াড হেত পারেব না।

ডাটা টাইপ

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 24


বাংলায় জাভা

জাভা ত আট ধরেণর ি িমিটভ ডাটা টাইপ আেছ ।

Data
Description
type

byte 8 bit signed value, values from -128 to 127


short 16 bit signed value, values from -32.768 to 32.767
char 16 bit Unicode character
int 32 bit signed value, values from -2.147.483.648 to 2.147.483.647

64 bit signed value, values from -9.223.372.036.854.775.808 to


long
9.223.372.036.854.775.808
float 32 bit floating point value

double 64 bit floating point value

এ েলা িমিটভ , এর মােন হে এ েলা অবেজ নয়। এরা মেমািরেত সরাসির ভ ালু রােখ।

রপার াস

তেব জাভােত িকছু ডাটা টাইপ আেছ য েলা অবেজ ।

Data
Description
type
Byte 8 bit signed value, values from -128 to 127
Short 16 bit signed value, values from -32.768 to 32.767
Character 16 bit Unicode character
Integer 32 bit signed value, values from -2.147.483.648 to 2.147.483.647

64 bit signed value, values from -9.223.372.036.854.775.808 to


Long
9.223.372.036.854.775.808
Float 32 bit floating point value

Double 64 bit floating point value

এ েলােক ি িমিটভ টাইপ এর রপার রপার াস বলা হয়। ল ক ণ, এ েলার সব েলার নাম ক ািপটাল অ র
িদেয় হেয়েছ।

তেব আমরা চাইেল অবেজ ডাটাটাইপ এবং ি মিটভ ডাটাটাইপ এেক অপেরর পিরপূরক িহসােব ব বহার করেত
পাির।

Integer a;
int b = 9;
a = b;

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 25


বাংলায় জাভা

তেব ি িমিটভ ভ ালু েলা িডফ ভ ালু থােক। অথাৎ আমরা যিদ ভ ালু এসাইন না কির, তাহেল এেদর মেধ
বাইিডফ ভ ালু থােক। যমন -

Data Type Default Value (for fields)


byte 0

short 0
int 0
long 0L
float 0.0f

double 0.0d
char '\u0000'

boolean false

িলটােরল-

া ািমং ল াং েয়জ িকছু মজার মজার িব -ইন সুিবধা থােক, তার মেধ িলটােরল একিট। আমরা জািন য একটা
ভ ািরয়বল িড ােরশান এর জন থেম টাইপ িলখেত হয়, তারপর একটা নাম িদেত হয়, তারপর এেক
ইিনিশয়ালাইেজশান করেত হয়। ভিরেয়বলিট যিদ অবেজ হয়, তাহেল ইনেটনিশেয়শান করেত হয়।

উদাহরণ-

List list = new ArrayList();

or

Int x = 5;

উপেরর দুিট উদাহরেণর মােঝ একিটেত আমরা new িকওয়াড ব বহার কের নতুন অবেজ তির কেরিছ। িক পেরর
উদাহরণিটেত সিট করেত হয় িন। আমরা সরাসির একিট ভ ালু এসাইন কেরিছ। এখােন 5 একিট ভ ালু। এখােন 5
হে িলটােরল।

এরকম অেনক ে আমরা new িকওয়াড ব বহার না কেরই ভিরেয়বল initialize করেত পাির।

জাভােত ি িমিটভ টাইপ সকল ডাটাটাইপ িলটােরল সােপাট কের। যমন -

boolean result = true;


char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;

িনেচ আেরা িকছু উদাহরণ দওয়া হেলা –

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 26


বাংলায় জাভা

ইি জার িলটােরল-

// ¬´ÚáÆ 26 Øá ¹ á¿Û×ÌÚÑ ÆÚÌ ÚÏ


int decVal = 26;
// ¬´ÚáÆ 26 ×¢ ÍÚÛ½ áØ Úá¿Û×áÌÑ ¬ áÄ´ÚáÆÚ ØáÎá¹
int hexVal = 0x1a;
// ¬´ÚáÆ 26 ×¢ ÍÚÛ½ ÊÚ¦ÆÚÛÏ-á ¬ áÄ´ÚáÆÚ ØáÎá¹
int binVal = 0b11010;

ািটং পেয় িলটােরল-

double d1 = 123.4;
// ¬Û³ ÍÚÑÝ âÊ ÚÛƳ ¨ÈÚáÎ áÑ´Ú ØáÎá¹
double d2 = 1.234e2;
float f1 = 123.4f;
ÍÚáÏ ÚÏ ¬ ¿ Û ¢ ÛѽÚáÏÑ--

char এবং String উ ৃ িত িচে র ভতের লখা হয়। char ে একক উ ৃ িত িচ String এর জেন ডবল
উ ৃ িত িচ ব বহার করেত হয়- যমন-

char chr = 'A'; // ÍÚáÏ ÚÏ ÛѽÚáÏÑ


String name = "Bazlur"; // Û ¢ ÛѽÚáÏÏ

char এবং String ইউিনেকাড ক াের ার হেত পাের।

আমরা জািন িকভােব ভিরেয়বল ইিনিশয়ালাইজ করেত হয় জািন, এবার তাহেল এই ভ ািরয়বল েলা িদেয় িক কাজ
করা যায় স েলা দিখ।

কান কাজ করেত হেল একজন কাযকারী বা অপােরটর লােগ। অপােরটর িকছু অপাের িনেয় কাজ কের থােক
তারপর ফলাফল িরটান কের। জাভা া ািমং ল াং েয়জ এ বশ িকছু অপােরটর আেছ- স েলা দখা যাক-

এসাইনেম অপােরটর (Assignment Operator)

“=” এিট হে এসাইনেম অপােরটর বাংলায় যােক বেল সমান সমান িচ । আমরা একিট Bicycle াস দেখিছ,
এর মােঝ িকছু ভিরেয়বল দেখিছ-

int cadence = 0;
int speed = 0;
int gear = 1;

এই ভ ািরয়বল েলার ডান পােশ সমান সমান িচে র পর আমরা একটা ভ ালু বা মান বিসেয়িছ। এভােব আমরা
একিট ভ ািরয়বল এর মােঝ ভ ালু এসাইন করেত পাির।

এিরথেমিটক অপােরটর(Arithmetic Operator)

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 27


বাংলায় জাভা

জাভা া ািমং ল াং েয়জ-এ যাগ, িবেয়াগ, ন, ভাগ করার জেন িকছু অপােরটর আেছ। এ েলা আমরা যখন
বিসক গিণত িশিখ তখন থেকই জািন। ধু একিট অপােরটর নতুন মেন হেত পাের, যা হেলা “%”। এিটেক
অেনেকই পারেসে জ বা শতকরা িচ িহেসেব ভুল করেত পাের, িক এিট আসেল তা নয় । এিট মূলত একিট
সংখ ােক আেরকিট সংখ া ারা ভাগ কের ভাগেশষ িরটান কের।

অপােরটর এর কাজ

+ আিডিটভ(Additive) অপােরটর, যা দুিট সংখ া বা ি ং যাগ করার জেন ব বহার করা হয়।
সাব াকশান (Subtraction) অপেরটর যা একিট সংখ া থেক আেরকিট সংখ া িবেয়াগ করার
-
জেন ব বহার করা হয়।
* মাি ি েকশান (Multiplication)অপােরটর যা দুিট সংখ ােক ন কের।

/ িডিভশান(Division) অপােরটর , যা িদেয় একিট সংখ ােক আেরকিট সংখ ােক ভাগ করা যায়।
িরমাই ার (Remainder) অপােরটর যা একিট সংখ ােক আেরকিট সংখ া ারা ভাগ কের
%
ভাগেশষ িরটান কের।

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 28


বাংলায় জাভা

class ArithmeticDemo {

public static void main (String[] args) {

int result = 1 + 2;
// ¬´ÚáÆ result ¬Ï ÌÚÆ Øá ¹ 3
System.out.println("1 + 2 = " + result);
int original_result = result;

result = result - 1;
//¬´ÚáÆ result áÃá³ ò ×ÚÊ Ú ³ÏÚÎ ¬Ï ÌÚÆ ó
System.out.println(original_result + " - 1 = " + result);
original_result = result;

result = result * 2;
// ¬´ÚáÆ result ¬Ï ×Úáà ó ÌÚÛ ½ ÑÚ¦ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ 4
System.out.println(original_result + " * 2 = " + result);
original_result = result;

result = result / 2;
//¥ÊÚÏ result Û¿ËÚ¦¿ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ ØáÎ áµÑ 2
System.out.println(original_result + " / 2 = " + result);
original_result = result;

result = result + 8;
// ù áÍÚµ ³ÏÚÏ ÉáÑ ¬Ï result ØáÑÚ 10
System.out.println(original_result + " + 8 = " + result);
original_result = result;

result = result % 7;
// result ¬Ï ×Úáà ø ÛÏÌÚ¦ ¿ÚÏ ¤ÈÚáÏ½Ï ÍÊØÚÏ ³ÏÚÏ ÉáÑ ¬Ï ÌÚÆ ØáÎ áµÑ 3, ³ÚÏÁ ¬Û½ ÕÝÅÝ ÌÚ ÛÏÌÚƦ ¿ÚÏ
System.out.println(original_result + " % 7 = " + result);
}
}

এই া ামিট রান করেল িনেচর ফলাফল কািশত হেব।

1 + 2 = 3
3 - 1 = 2
2 * 2 = 4
4 / 2 = 2
2 + 8 = 10
10 % 7 = 3

ইউনাির (Unary) অপােরটর

উপেরর সব অপােরটর এর জেন আমােদর দুিট কের অপাের দরকার হেতা, তেব এই অপােরটর এর লােগ একিট।

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 29


বাংলায় জাভা

এ েলা িবিভ ধরেণর কাজ কের থােক যমন – এক কের ইনি েমি ং/িডি েমি ং বা একটা এ ে শান নেগট
করা বা একটা বুিলয়ান- ক ইনভাট করা । এ েলা হল - +, -, ++, –-, ! উহাহরণ -

class UnaryDemo {

public static void main(String[] args) {

int result = +1;


// ¬Û½ ¬³ ³áÏ ¦ÆÛ áÌ ½ ³áÏ, ×ÝÂÏÚ¢ ¬´ÚáÆ result ¬Ï ÌÚÆ 1
System.out.println(result);

result--;
// ¬Û½ ¬³ ³áÏ Û¿Û áÌ ½ ³áÏ, ×ÝÂÏÚ¢ ¬´ÚáÆ result ¬Ï ÌÚÆ 0
System.out.println(result);

result++;
// ¬Û½° ¬³ ³áÏ ¦ÆÛ áÌ ½ ³áÏ, ×ÝÂÏÚ¢ ¬´ÚáÆ result ¬Ï ÌÚÆ ¥ÊÚÏ ò
System.out.println(result);

result = -result;
// ¬´ÚáÆ result á³ áÆáµ½ ³áÏ, ×ÝÂÏÚ¢ ¬Ï ÌÚÆ ¬´Æ -1
System.out.println(result);

boolean success = false;


// ¬´ÚáÆ ÊÝÛÑÎÚáÆÏ ÌÚÆ Øá ¹ false
System.out.println(success);
// Û³ ÂÝ ¬Ï ¥áµ ¬³Û½ áÆáµ½ ¤ÈÚáÏ½Ï ¬¿ ³ÏáÑ ¬Û½ ØáÎ ÍÚÎ
System.out.println(!success);
}
}

ইকুয়ািলিট (Equality) এবং রশনাল(Relational) অপােরটরস

ইকুয়ািলিট (Equality) এবং রশনাল(Relational) অপােরটর েলা িনধারণ কের একিট ভ ালু অন িট থেক বড় বা
ছাট িকনা।

== ÄÝÛ½ ÍÚÑÝ ×ÌÚÆ ØáÑ ¬¦ ¬ á ÕÚÆ ¬Ï ÌÚÆ true ØÎ


!= ÄÝÛ½ ÍÚÑÝ ×ÌÚÆ ÆÚ ØáÑ true ØÎ
> ÃÌ ÍÚÑÝ ÈáÏÏ ÍÚÑÝ áÃá³ Ê¿é ØáÑ true ØÎ
>= ÃÌ ÍÚÑÝ ÈáÏÏ ÍÚÑÝ áÃá³ Ê¿é ÊÚ ×ÌÚÆ ØáÑ true ØÎ
< ÃÌ ÍÚÑÝ ÈáÏÏ ÍÚÑÝ áÃá³ á¹Ú½ ØáÑ true ØÎ
<= ÃÌ ÍÚÑÝ ÈáÏÏ ÍÚÑÝ áÃá³ á¹Ú½ ÊÚ ×ÌÚÆ ØáÑ true ØÎ

উদাহরণ

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 30


বাংলায় জাভা

class ComparisonDemo {

public static void main(String[] args){


int value1 = 1;
int value2 = 2;
if(value1 == value2)
System.out.println("value1 == value2");
if(value1 != value2)
System.out.println("value1 != value2");
if(value1 > value2)
System.out.println("value1 > value2");
if(value1 < value2)
System.out.println("value1 < value2");
if(value1 <= value2)
System.out.println("value1 <= value2");
}
}

কি শনাল( Conditional) অপােরটর

&& এবং || এই দুই্ অপােরটরেক কি শনাল অপােরটর বেল।

&& ³Û ¿ÕÆÚÑ ¤èÍÚ ¿ (Conditional-AND)


|| ³Û ¿ÕÆÚÑ °Ï ( Conditional-OR)

উদাহরণ-

class ConditionalDemo1 {

public static void main(String[] args){


int value1 = 1;
int value2 = 2;
if((value1 == 1) && (value2 == 2))
System.out.println("value1 is 1 AND value2 is 2");
if((value1 == 1) || (value2 == 1))
System.out.println("value1 is 1 OR value2 is 1");
}
}

চলেব --

পাঠ ৩: ডাটা টাইপস এবং অপােরটর 31


বাংলায় জাভা

## এের (Array)

এের
এের হে একধরেণর কে ইনার অবেজ যা অেনক েলা এিকধরেণর ডাটা টাইেপর এর একিট িফ ড সাইেজর
ভ ালু ধের রাখেত পাের।

এের িড ার করার জেন থেম ডাটাটাইপ (িক ধরেণর ডাটাটাইপ রাখেব) এর সােথ ([]) য়ার ােকট তারপর এর
একিট ভিরেয়বল নাম িদেত হয়।

জাভােত দুই ধরেনর এের রেয়েছ ১/ িসে ল ডাইেমনশনাল এের ২/ মাি ডাইেমনশনাল এের

িসে ল ডাইেমনশনাল এের ক আমরা এইভােব িডি য়ার করেত পািরঃ

//¬³Û½ ¦Û ½ºÚÏ ¬áÏ


int[] anArray;

তেব য়ার ােকট ভিরেয়বল নাম এর পেরও দওয়া যেত পাের - উদহরণ-

int anArray[];

এভােব আমরা অন ডাটাটাইপ এর অ াের িলখেত পাির -

long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;

এের একিট অবেজ , সুতরাং এেক িনউ(new) অপােরটর িদেয় থেম ি েয়কট করেত হেব।

// ¬´ÚáÆ òñ ×Ú¦áºÏ ¬³Û½ ¬áÏ Û áν ³ÏÚ ØáÑÚ


anArray = new int[10];

এই াটেম যিদ না লখা হয় তাহেল া ামিট ক াইল হেব না।

এরপর আমরা এর এর ভতর ভ ালু রাখেত পাির।

anArray[0] = 100; //¬´ÚáÆ ÃÌ ÍÚ ÍÝ ÏÚ´Ú ØÑ


anArray[1] = 200; // ¬ËÚáÊ ÛÄ ÂÜÎ ÍÚÑÝ
anArray[2] = 300; // ¬ËÚáÊ ÊÚÛ³ µÝáÑÚ

জাভা া ািমং ল া ুেয়েজ িজেরা বজড না ািরং( ইনেড ন থেক ) করা হেয় থােক। অথাৎ, এেরর এই
ভ ালু েলা যিদ পড়েত চাই তাহেল -

পাঠ ৩.১: এের 32


বাংলায় জাভা

System.out.println("Element 1 at index 0: " + anArray[0]);


System.out.println("Element 2 at index 1: " + anArray[1]);
System.out.println("Element 3 at index 2: " + anArray[2]);

এছাড়াও এের লখার শটকাট প িত আেছ -

int[] anArray = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};

একিট এের এর মেধ আেরকিট অ াের রাখা যেত পাের - িনেচ মাি ডাইেমনশনাল এের এর িডি য়ােরশন এবং ভ ালু
এসাইন করার একিট প িত দখােনা হল ।

int[][] anArray = {{1, 2, 3}, {4, 6, 7}, {8, 9}};

আমরা যিদ একিট এের এর ল বা সাইজ জানেত চাই তাহেল –

int length = anArray.length;

সুিবধাঃ এেরেত আমরা খুব সহেজ ডটা েলােক ছাট থেক বড় - বড় থেক ছাট আকাের সািজেয় িনেত পাির ।
খুব সহেজই যেকােনা ইনেডে এে স িনেত পাির । অসুিবধাঃ এেরর সাইজ আেগ থেক বেল িদেত হয় এবং এিট
িফ ড সাইজ তাই রানটাইেম আমরা এটার সাইজ বাড়ােত পািরনা । অবশ এই সমস া দূর করেত জাভােত
কােলকশন মওয়াক ব বহার করেত পাির য েলা পযায় েম আমরা আেলাচনা করেবা ।

পাঠ ৩.১: এের 33


বাংলায় জাভা

এ ে শান(Expressions), টেম (Statements) এবং


ক(Blocks)
আমরা ইিতমেধ ভিরেয়বল এবং অপােরটর স েক জেন ফেলিছ, এবার তাহেল আমরা জেন িনই এ ে শান
িক।

এ ে শান(Expressions)

একে শান হে কত েলা ভ ািরেয়বল, অপােরটর এবং মথড বা ফাংশান কল এর মাধ েম একিট আউটপুট তির
করার জেন য কাড লখা হয়। উদাহরণ-

​​int cadence = 0;
anArray[0] = 100;

int result = 1 + 2;
if (value1 == value2)
System.out.println("value1 == value2");

উপেরর cadence = 0 একিট এ ে শান। এিটর ”=” অপােরটেরর মাধ েম একিট ভ ালু cadence ভ ািরেয়বল এ
এসাইন হয়। তারপর anArray[0] = 100 এই এ ে শােনর মাধ েম anArray এের এর থম ঘের 100 এসাইন করা
হল।

1 + 2 একিট এ ে শান যা “+” অপােরটর এর মাধ েম দুিট সংখ া যাগ হয় এবং “=” অপােরটর এর মাধ েম result
ভ ািরেয়বল এ এসাইন হয়। সুতরাং এখােন দুইটা এ ে শান।

জাভা া ািমং ল াং েয়জ ক াউ এ ে শান সােপাট কের। এর মােন হে অেনক েলা ছাট ছাট
এ ে শান িনেয় আমরা একিট বড় এ ে শান তির করেত পাির। একিট এ ে শান মূলত একিট িনিদ ডাটাটাইপ
এর ভ ালু দান কের, সুতরাং ক াউ এ ে শান এর ে সব এ ে শান এর ফলাফল এিক ডাটাটাইপ এর
হেত হেব।

1 * 2 * 3

এখােন 1 * 2 একিট এ ে শান যার ইি জার টাইপ এর ডাটাটাইপ এর আউটপুট দান কের, এবং এিট যখন আবার
3 এর মাি াই করা হয়, তখনও এর আউটপুট ইি জার টাইপ হয়।

তেব ক াউ এ ে শান এর ে এি িগউিট দূর করার জেন স “()” ব বহার করা উ ম। উদাহরণ -

x + y / 100

এবং (x + y) / 100

এই দুিট এ ে শান এর ফলাফল িভ হেব।

পাঠ ৩.২: এ ে শান(Expressions), টেম (Statements) এবং ক(Blocks) 34


বাংলায় জাভা

তেব যিদ এ ে শান এর অডার স িদেয় না িঠক কের দওয়া হয় তেব অপােরটর এর অ গণ তা(precedence)
অনুযায়ী এ ে শান এর অডার িনধািরত হয়।

টেম স(Statements)

টেম স হে অেনকটা একটা পূণা বা সাথক বাংলা বােেক র মেতা। তেব া ািমং এর ভাষায় এিট হে -
একিট ছাট ইউিনট অব কাড যা িকনা এি িকউশান করা যায়। কত েলা এ ে শান শেষ সিমেকালন (;) িদেয়
শষ করেল টেম হেয় যায়। যমন-

এসাইনেম এ ে শান
++ অথবা-- এর ব বহার
মথড/ফাংশান কল
নতুন অবেজ তির করা, ইত ািদ ।

এেদরেক এ ে শানাল টেম বলা হয়।

// ¬Û½ ¬×Ú¦ÆáÌ ½ á ½½áÌ ½


aValue = 8933.234;
// ¬Û½ ¦ÆÛ áÌ ½ á ½½áÌ ½
aValue++;
// ¬´ÚáÆ ¬³Û½ áÌÿ ³Ñ ³ÏÚ ØáÎá¹
System.out.println("Hello World!");
// ¬´ÚáÆ ¬³Û½ ¤ÊẠâÂÛÏ ³ÏÚ ØáÎá¹
Bicycle myBike = new Bicycle();

আরও দু-ধরেণর টেম আেছ- িড ােরশান টেম –

double aValue = 8933.234;

কে াল া টেম – এিট িনেয় পরবতী চ া াের আরও িব ািরত বলা হেব।

কস(Blocks)

একিট কারিল স “{}” এর মােঝ শূণ অথবা একািধক টেম থাকেল তােক ক বলা হয়। উদারহরণ-

class BlockDemo {
public static void main(String[] args) {
boolean condition = true;
if (condition) { //¬´ÚáÆ Ñ³ -ò ¬Ï ÕÝÏÝ
System.out.println("Condition is true.");
} // ¬´ÚáÆ Ñ³ -ò áÕÖ
else { // ¬´ÚáÆ Ñ³-ó ÕÝÏÝ
System.out.println("Condition is false.");
} // ¬´ÚáÆ Ñ³-ó áÕÖ
}
}

পাঠ ৩.২: এ ে শান(Expressions), টেম (Statements) এবং ক(Blocks) 35


বাংলায় জাভা

পাঠ ৩.২: এ ে শান(Expressions), টেম (Statements) এবং ক(Blocks) 36


বাংলায় জাভা

# পাঠ ৪: কে াল া -লুিপং- াি ং

ইফ- দন-ইলস
সুইচ
ফর লুপস
য়াইল লুপ
ডু-ইয়াইল লুপ
ক াটেম
কি িনউ াটেম
িরটান াটেম
সারসংে প

আমােদর সাসেকােড -এ যসব টেম থােক তা সাধরারণত উপর থেক িনেচ য অডার এ দওয়া থােক সই
অডােরই এি িকউট হয়। িক কে াল া টেম এই অডারেক ভে িবিভ িডিসশান মিকং, লুিপং এবং
াি ং এর মাধ েম একিট িনিদ কাড ক- ক এি িকউট কের।

কে াল া টেম িল হে -

িডিসশান- মিকং টেম (if-then, if-then-else, switch)-


লুিপং টেম (for, while, do-while)
এবং াি ং টেম (break, continue, return)

if-then টেম হে সব চেয় বিসক কে াল া টেম ।

আমরা যিদ একিট া াম এর একিট িনিদ কাড ক ধু মা একিট িবেশষ কি শান বা শত সােপেে এি িকউট
করেত চাই তাহেল আমরা if-then টেম ব বহার কির-

উদাহরণ-

int x = 10;

if( x < 20 ){
System.out.print("This is if statement");
}

উপেরর কাড কিটেত আমরা ধু মা x এর মান 20 হেলই তা ি করেত চাই।

if টেম এর পেরনে িসস “()” মােঝ একিট বুিলয়ান এ ে শান থােক। বুিলয়ান এ ে শান হে এক ধরেণর
এ ে শান যার ফলাফল ধুমা true অথবা false হেত পাের। এই বুিলয়ান এ ে শানিটর মান যিদ true
হয় তাহেল এই if টেম এর কিট এি িকউট হেব, নতুবা হেব না।

তেব আমােদর থম কি শান বা শত বা বুিলয়ান এ ে শান যিদ সিত না হয়, এবং এে ে আমরা অন একিট ক
অব কাড এি িকউট করেত চাই, তাহেল if-then-else টেম ব বহার কির। উদাহরণ-

পাঠ ৪: কে াল া -লুিপং- াি ং 37
বাংলায় জাভা

if( x < 20 ){
System.out.print("This is if statement");
}else{
System.out.print("This is else statement");
}

উপেরর উদাহরণিট- ত একিট কি শান বা বুিলয়ান এ ে শান িছল, িক আমােদর মােঝ মােঝ একািধক কি শান
থাকেত পাের। তাহেল আেরকিট উদাহরণ দখা যাক-

int score = 76;


char grade;

if (score >= 90) {


grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else if (score >= 60) {
grade = 'D';
} else {
grade = 'F';
}

System.out.println("Grade = " + grade);

উপেরর উদাহরণিট যিদ আমরা রান কির তাহেল output হেব -

Grade = C

এখােন থম বুিলয়ান এ ে শানিট যিদ ​true হয, তাহেল grade = 'A'; কাড কিট এি িকউট হেব, আর
true না হয়, তাহেল পেরর কাড ক, অথাৎ else if (score >= 80) এ ে শানিট ই্ভালুেয়ট করা হেব,
এবং এিট যিদ true হয় তাহেল এর কািল স {} এর মােঝর কাড কিট এি িকউট হেব। অথাৎ আমােদর যিদ
অেনক েলা কি শান থােক তাহেল আমরা if কি শান এর সােথ else if িদেয় স েলা- ক এড করেত
পাির। এই কি শান েলার মেধ য কান একিট এ ে শান যিদ true হয় তাহেল সই ক এর কাডিট
এি িকউট হেব ।

এখােন ল রাখেত হেব য, থম এ ে শানিট যিদ true হয়, তাহেল িক বািক কি শান েলা আর ইভালুেয়ট
হেব না। অথাৎ রান টাইেম এই কাড ক েলা একদম থম ​if কি শান থেক যত ন পয কান true
এ ে শান না পাওয়া যায়, িঠক তত ণ পয এ ে শন েলা ইভালুেয়ট হেব। আমােদর উদাহরণিটেত - থম,
ি তীয় এবং তৃতীয় এই িতনিট এ ে শান ইভালুেয়েটড হেয়েছ, এবং তৃতীয়িটেত true এ ে শান পাওয়া গেছ,
এবং ​ grade = 'C'; এই কাড কিট এি িকউট হেয়েছ।

এভােব আমােদর যিদ একািধক কি শান এর জন আমরা if-then-else ব বহার কের কাড িলখেত পাির। যিদ
একািধক

পাঠ ৪: কে াল া -লুিপং- াি ং 38
বাংলায় জাভা

Switch
আমােদর কাড এ যিদ একািধক এি িকউশান পাথ থােক তাহেল, আমরা if-then এবং if-then-else ব বহার
কের কাড িলখেত পাির। তেব এর পিরবেত switch াটেম ও ব বহার করেত পাির। উদাহরণ-

পাঠ ৪: কে াল া -লুিপং- াি ং 39
বাংলায় জাভা

public static String getMonth(int month) {


String monthString;

switch (month) {
case 1:
monthString = "January";
break;
case 2:
monthString = "February";
break;
case 3:
monthString = "March";
break;
case 4:
monthString = "April";
break;
case 5:
monthString = "May";
break;
case 6:
monthString = "June";
break;
case 7:
monthString = "July";
break;
case 8:
monthString = "August";
break;
case 9:
monthString = "September";
break;
case 10:
monthString = "October";
break;
case 11:
monthString = "November";
break;
case 12:
monthString = "December";
break;
default:
monthString = "Invalid month";
break;
}
return monthString;
}

For Loop

পাঠ ৪: কে াল া -লুিপং- াি ং 40
বাংলায় জাভা

যখন আমােদর একই কাজ বারবার করার েয়াজন হয় তখন আমরা লুপ ব বহার কির । ধ ন আপনােক ১০ বার
বাংলােদশ শ িট ি িদেত বলা হল তাহেল আপিন System.out.println("Bangladesh"); দশবার না িলেখ For
Loop ব বহার করেত পােরন ।

for(int i=1;i<=10;i++)
{
System.out.println("Bangladesh");
}

উপেরর কাড টুকুর জন Bangladesh শ িট ১০ বার ি হেব । আমরা ই া করেল Bangladesh শ িট


অসংখ ক বার ি িদেত পাির এভােব-

for(;;)
{
System.out.println("Bangladesh");
}

উপেরর লুপটােক infinitive loop বেল ।

For-Each Loop: একটা এের র সব েলা এিলেম েক এে স করার জন আমরা For-Each Loop ব বহার
করেত পাির । িনেচর উদাহরণিট দখুনঃ

public class ForEachLoop {


public static void main(String[] args) {
int[] arr={3,6,9,10,30};
for(int i:arr){
System.out.println(i);
}
}
}

উপেরর কাডটুকুর জন আউটপুট আসেব এমনঃ

3
6
9
10
30

যত ণ এেরর সব এিলেম ি না হেব তত ণ লুপিট চলেব ।

While Loop

পাঠ ৪: কে াল া -লুিপং- াি ং 41
বাংলায় জাভা

ফর লুেপর মতই যত ন লুেপর কি শন সত হয় তত ণ while loop তার িভতেরর টেম এি িকউট করেত
থােক ।

while (condition) {
//block of statements
statement 1;
statement 2;
...........
statement n;
}

উদাহরনঃ

class WhileLoopExample {
public static void main(String args[]){
int i=7
while(i>1){
System.out.println(i);
i--;
}
}
}

আউটপুটঃ

7
6
5
4
3
2

Infinite while loop:

উদাহরনঃ

while(1==1){
System.out.println("Bangladesh");
}

উপেরর কাডিট দেখ বলুনেতা Bangladesh শ িট মাট কতবার ি হেব !!!

কােরা মেন হেত পাের য for loop িদেয়ও তা এসব করা যায় তাহেল আবার while loop কন? মেন ক ন
আপনার এক ব ু আপনােক ফান কের বলেলা , তুই ১ ঘ ার জন (for) ওখােন দাঁিড়েয় থাক আিম আসিছ !
আেরকজন ফান কের বলেলা আিম যত ণ (while) না আসেবা তুই ওখােন তত ণ দাঁিড়েয় থাক ।

পাঠ ৪: কে াল া -লুিপং- াি ং 42
বাংলায় জাভা

থম ে আপিন জােনন য আপনােক িঠক কত ণ দাঁিড়েয় থাকেত হেব । া ািমং এ যিদ আপিন জােনন য
িঠক কতবার এই কাজিট আমােক করেত হেব তাহেল সে ে আপিন for loop ব বহার করেত পােরন । ২য় ে
আপিন িঠক জােনননা য কত ণ আপনােক দাঁিড়েয় থাকেত হেব । যখন আমরা জািননা য িঠক করবার লুপ চালােত
হেব সসব ে আমরা while loop ব বহার করেত পাির । যমনঃ আপিন যিদ একিট ট ট ফাইল থেক লাইন বাই
লাইন ইনপুট িনেত চান তখন আপিন while loop ব বহার করেত পােরন কারন আপিন িঠক জােনন না য কতটা
লাইন ইনপুট িনেল ফাইলটার শষ লাইেন প ছােনা যােব ।

do-while loop
যখন আমরা িঠক কতবার লুপিট চলেব তা জািননা িক িমিনমাম একবার এি িকউট করার দরকার পেড় তখন do-
while loop ব বহার করেত পাির ।

do {
// Statements
}while(condition);

এে ে কি শন ট হবার আেগই টেম িট এি িকউট হয় ।

উদাহরনঃ

public class DoWhileLoop{

public static void main(String args[]) {


int i = 5;

do {
System.out.print(i);
i++; //increment by 1
System.out.print("\n");
}while( x < 10 );
}
}

আউটপুটঃ

5
6
7
8
9

চলেব ----

পাঠ ৪: কে াল া -লুিপং- াি ং 43
বাংলায় জাভা

পাঠ ৪: কে াল া -লুিপং- াি ং 44
বাংলায় জাভা

পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১


অবেজ
াস
ই ারেফইস
অ ব া াস
ািটক ম ার
অবেজ ওিরেয়ে ড কনেস
ইনেহিরট া
পিলমরিফজম
ইনেকপসুেলশান
সারসংে প

েত ব র ধারণা িনেয় একিট ছা ব াখ া দই, পরবতীেত আিম এই কথা েলা আেরা ব াখ া কের বলেবা। আমরা
সবাই কি উটার ব বহার কির, যারা একটু বিশ কৗতূ হলী তারা িন য় কি উটােরর ব খুেল খুেল দেখ ফেলেছ
য, এর মেধ নানা রকম য াংশ থােক, যমন, র ◌ াম, হাডিড , মাদারেবাড, িসিপইউ, কুিলং ফ ান ইত ািদ। এইসব
িমেলই কি উটার। িক মজার ব পার হেলা, এর সবই একিট কা ািন তির কেরিন। কও র ◌ াম তির কের,
কওবা মাদারেবাড, কও বা আবার িসিপইউ। িক সবাই আলাদা আলাদা ভােব সবিকছু তির করেলও আমরা যখন
পুেরা কি উটারিট এেস ল কির, িক সু র ভােব সব িঠক ঠাক ভােব লেগ যায়, কান সমস া হয় না। একজন
ম াকািনক-ও যার নািক কি উটার সােয় এ িডি নই, সও জােন িকভােব সব িকছু এেস ল করেত হয়। র ◌ াম
এর মেধ িক আেছ স স েক তার কানই ধারণা নই, িকংবা িসিপইউ । অবেজ ওিরেয়ে ড কনেস মূল
ব াপারিট হেলা এিট। একটা িসে েম অেনক েলা কে ােন থাকেত পাের, িক সব কে ােন েলা কও একা
তির করেব না এইটাই াভািবক, এবং এ েলা এমন ভােব তির করা হয় যােত খুব সহেজই এেদরেক এেস ল কের
পুেরা িসে ম দাড় করােনা যায়।

অবেজ ওিরেয়ে ড কনেস এর ধারণার সােথ পিরিচত হেত হেল েত আমােদর িকছু টাম বা শে র সােথ
পিরিচত হেত হয়। আিম েত এনালিজ বা উপমা িদেয় বুঝােনা চ া করেবা, তারপর মূল িবষেয় চেল আসেবা।

অবেজ (Object):

এর মােন হে ব । পৃিথবীেত যা িকছু দিখ, অনুভব কির, তার সবই ব । যমন- মাবাইল ফান, চশমা, এমনিক
আিম িনেজও একিট অবেজ । আমরা যেহতু া ামার, এখন একটু সভােব কথা বিল। া ািমং এ একটা
ধারণাও অবেজ । অবেজ ক িকভােব দখা হে তা িনভর কের য দখেছ তার উপর। মেন করা যাক, একিট
অিফেসর বেড়া কতা (CEO) স দখেব, এম িয়, িবি ং, িডিভশন, নাটপ , বিনিফট প ােকজ, লাভ িতর
িহেসব এ েলা অবেজ । একজন আিকেট দখেব, তার ান, মেডল, এেলেভশান, ডােনজ, ডি ল, আমাচার
ইত ািদ। সভােব একজন সফটওয় ার ইি িনয়ােরর অবেজ হেলা, াক, িকউ, উইে া, চক ব ইত ািদ। অবেজ
এর একিট ট থােক। ট হেলা িকছু তথ যা িদেয় ওই অবেজ েক আলাদা করা যায়, এবং তার বতমান অব ান
জানা যায়। যমন একিট ব াংক একাউ ট হেত পাের কাের ব ােল । একটা অবেজ এর মেধ আেরকিট
অবেজ থাকেত পাের, যা ওই অবেজ এর ট হেত পাের।

পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১ 45


বাংলায় জাভা

অবেজ সাধারণত িকছু কাজ কের থােক যােক বেল তার িবেহিভয়ার। যমন ধরা যাক, সাইক ােলর চাকা, চাকার ট
হেত পাের এর ব াসাধ, পিরিধ, গিত ইত ািদ এবং চাকার িবেহিভয়ার হেলা এিট ঘুের। এখন যেহতু আমরা সাইক াল
এর চাকােক ক আমরা া ািমং এর মাধ েম কাশ করেবা, সতুরাং এ েলােক আমরা ভ ািরেয়বল এ রাখেবা। আর
িবেহিভয়ার েলােক আমরা ফাংশন এর মাধ েম িলিখ। আমরা এর আেগ যােক ফাংশন বেল এেসিছ এখন থেক
আমরা ফাংশন ক ফাংশন বলেবা না, আমরা এেদরেক মথড বলেবা।

সুতরাং আমরা জানলাম, অবেজ এর দুইটা িজিনস থােক, ট ( অথাৎ িনেজর স েক ধারণা) এবং মথড ( স িক
িক কাজ করেত পাের)।

াস(Class)

অবেজ স েক আমরা জানলাম। াস হেলা সই অবেজ িট তির করার ি য়ার একিট অংশ। মেন কির আমরা
একিট কলম বানােত চাই, েত আমরা কান রকম িচ া ভাবনা না কের ফু িদেয় একটা িকছু বািনেয় ফলেত পাির
না। আমরা এর জেন পিরক না কির- কলমাটা দখেত কমন হেব, এিট ল া কতটুকু হেব, কলমিট িক িক কাজ
করেব ইত ািদ। এই পিরক না েলা আমরা আমরা কাথাও িলেখ রািখ। আমােদর এই লখা ডকুেম িট আসেল
াস। সহজ একিট ব াপার।

অবেজ ওিরেয় কনেস িতনিট ধারণার উপর িতি ত।

এক, ইনেহিরট া - নাম থেকই বুঝা যাে য এখােন বংশগিতর একটা িবষয় চেল এেসেছ। আসেলও তাই। ধরা যাক
একিট একটা চাকা। নানা রকম চাকা হেত পাের, যমন বােসর চাকা, সাইক াল এর চাকা, মটর সাইক াল এর চাকা
ইত ািদ। সব চাকার মেধ ই িক িকছু কমন ব াপার আেছ, এিটর ব াসাধ আেছ, পিরিধ আেছ এবং এিট ঘুের। সুতরাং
আমরা একটা চাকা নােমর অবেজ বানােত পাির যা বািক সব চাকা(বাস, সাইক াল এর) পূবপু ষ। এেত আমােদর
বিশ িকছু সুিবধা আেছ, ধান সুিবেধ হেলা, কমন িজিনস েলা িনেয় আমােদর পূবপু ষ তির করার কাজ একবার
কের ফলেলই হে , উ রপু ষ েলােত আপনা আপিন সই বিশ েলা চেল আসেব।

দুই, এনক াপসুেলশান- মােন হেলা িজিনসপ ক াপসুেলর মেধ ভের রাখা। আমরা অেনেকই ক াপসুল মিডিসন
খেয়িছ, এিটর বাইের একটা আবরণ িদেয় সব িকছু ভতের আটকােনা থােক । ব াপারিট এমিন।

িতন, পিলমরিফজম – ব িপতা। অথাৎ এিক অে নানা প। একটা অবেজ নানা সময় নানা রকম প ধারণ
করেত পাের।

তেব কন এই অবেজ ওিরেয়ে ড কনেস লাগেব সিট িনেয় হেত পাের। এবার তাহেল এই ে র উ র ব াখ া
করা যাক।

আমােদর পিরিচত থাগত বা িসিডউরাল া ািমং ল াং েয়জ যমন- িস এর িকছু অসুিবধা রেয়েছ। আমরা
চাইেলই সহেজ পুনরায় ব বহারেযাগ কে ােন তির করেত পাির না। সবেচেয় বড় অসুিবধা হেলা আমরা চাইেলই
একিট া াম থেক একিট ফাংশান কিপ কের অন একিট া ােম ব বহার করেত পাির না কারণ ফাংশন েলা
সাধারণত িকছু াবাল ভিরেয়বল এবং অন ান ফাংশন এর উপর িনভর কের। এই ল াং েয়জ েলা হাই- লেভল
এব াকশান এর জেন মানানসই নয়। যমন িস য কে ােন েলা ব বহার কের স েলা খুব লা- লেভল-এর যা
িদেয় একিট বা ব জগেতর সমস ােক খুব সহেজ িচ ায়ণ (portray) করা স ব হয় না। কা মার িরেলশনিশপ
ম ােনজেম বা িসআরএম অথবা ফুটবল খলােক সহেজ িস িদেয় িচ ায়ণ করা কিঠন।

পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১ 46


বাংলায় জাভা

১৯৭০ সােলর যু রাে র িতর া অিদদ েরর একিট টা েফাস তদ কের বর করার চ া কের কন আইিট(IT)
বােজট সবসময় িনয় ণ করা স ব হয় না। স েলার মেধ ধান েলা এমন- ৮০% বােজট ধুমা সফটওয় ার এর
জেন ব য় হয় আর বািক ২০% ব য় হয় হাডওয় ার এর জেন । এর মেধ ৮০% ব য় হয় ধুমা সফটওয় ার
মইনেটইন করার জেন , বািক ২০% তির হয় সফটওয় ার তির করার জেন । হাডওয় ার েলা সহেজই িরইউজ বা
পুনরায় ব বহার করা যায় এবং এেত এেদর ইি ি িট ন হয় না, এবং একিট হাডওয় ার একিট িবেশষ অংশ ন হেয়
গেল তা সহেজই আলাদা কের ফলা যায় এবং নতুন একিট িদেয় িরে স করা যায়। িক সফটওয় ার এর ে এমন
স ব হয় না, একিট া াম এর সমস ার জেন অন া াম এর সমস া তির হয় ইত ািদ।

এই সমস া সমাধান করার জেন এই টা েফাস পিরেশেষ াব কের য সফটওয় ার-ও হাডওয় ার এর মেতা হওয়া
উিচৎ। পরবতীেত তারা তােদর িসে ম এর ৪৫০ িট া ািমং ল াং েয়জ িরে স কের এডা (Ada) নােম একিট
অবেজ ওিরেয়ে ড া ািমং ল াং েয়জ ব বহার কের।

চলেব -------

পাঠ ৫: অবেজ ওিরেয়ে ড া ািমং-১ 47


বাংলায় জাভা

## ইনেহিরট া -

এবার আমরা অবেজ ওিরেয়ে ড কনেস -এর আরও ভতের েবশ করেবা। েতই আমরা ইনেহিরেট িনেয়া
আেলাচনা কির।

ইনেহিরেট িনেয় কথা বলেত হেল এর সােথ আেরকিট িবষয় চেল আেস সিট হেলা অবেজ কে ািজশান। এিট
মাটামুিটভােব একটু কিঠন অন ান টিপক থেক। তাই এই টিপকিট পড়ার সময় একটু ধয িনেয় পড়েত হেব।

তা করার যাক-

থেমই আমরা কথা বলেবা Is - A এবং Has – A িনেয়।

যেহতু আমরা জাভা া ািমং কেরিছ, তা আমরা যতই এর ভতের েবশ করেত করেবা, ততই বুঝেত
করেবা য াস আসেল একটা া এেলান কে ােন নয়, বরং এিট অন ান ােসর উপর িনভর কের।
অথাৎ াস েলা একিট িরেলশন মইনেটইন কের চেল। এই িরেলশন েলা সাধারণত দুই ধরেণর হয়- Is - A এবং
Has – A।

আমােদর বা ব জগৎ থেক একটা এনালিজ দয়া যাক । যমন একিট িবড়াল, িকংবা কার অথবা বাস। িবড়াল হে
একিট ািণ। কার এর থােক চাকা এবং ইি ন। বাস এরও থােক চাকা এব ইি ন। আবার কার এবং বাস দুিটই
ভিহকল বা যান।

এখােন য উদাহরণ েলা দয়া হেয়েছ এর সব েলা মূলত Is - A অথবা Has – A িরেলশনিশপ মইনেটইন কের ।
যমন -

A cat is an Animal (িবড়াল একিট ািণ ।) A car has wheels ( কার এর চাকা আেছ ।)
A car has an engine ( কার এর একিট ইি ন আেছ ।)

তা ব পারিট একদম সহজ। িঠক এই ব পারিটেক আমরা আমােদর অবেজ ওিরেয়ে ট কনেস এর মাধ েম বলেত
পাির। যখন কান অবেজ এর মােঝ Is – A এই স কিট দখেবা তােক বলেবা ইনেহিরেট । আবার যখন কান
অবেজ এর মােঝ Has – A এই স কিট দখেবা তখন সই ব পারিটেক বলেবা অবেজ কে ািজশান।

ইনেহিরেট মূলত একিট ি -িরেলশানিশপ। অথাৎ এিট একিট অবেজ থেক ইনেহিরট কের আেস।

আর যখন আমরা অেনক েলা অবেজ িনেয় আেরকিট অবেজ তির করেবা তখন সই নতুন অবেজ হেলা মইড-
আপ বা নতুন তির করা অবেজ এই ঘটনািট হেলা কে ািজশান।

এর সবই আসেল একিট কনেস এবং আইিডয়া থেক এেসেছ, সিট হেলা কাড িরইউজ করা এবং িস ল করা।
যমন দুিট অবেজ এর কাড এর িকছু অংশ যিদ কমন থােক তাহেল আমরা সই অংশিটেক দুইিট ােসর মেধ
পুনরায় না িলেখ বরং তােক ব বহার করেত পাির।

ধরা যাক, আমরা দুিট অবেজ তির করেত চাই- Animal এবং Cat

আমরা জািন য সব Animal খায়, ঘুমায়। সুতরাং আমরা এই ােস এই দুিট বিশ আমরা এই ােস িলখেত পাির।
আবার যেহতু আমরা জািন য Cat হে একিট Animal। সুতরাং আমরা যিদ এমন ভােব কাড িলখেত পাির, যােত
কের এই Cat ােসর মেধ নতুন কের আর সই দুি্ ট বিশে র কাড আর িলখেত হে না, বরং আমর এই Animal
াসিটেক িরইউজ করলাম, তাহেল য ঘটনািট ঘটেব তােকই মূলত ইনেহিরেট বলা হয়।

পাঠ ৫.১: ইনেহিরট া 48


বাংলায় জাভা

এইভােব আমরা আরও অন ান Animal যমন, Dog, Cow ইত ািদ াস িলখেত পাির।

কে ািজশান তুলনামূলক ভােব একটু সহজ।

যমন আমরা একিট Car তির করেত চাই। Car তির করেত হেল আমােদর লাগেব Wheel এবং Engine. সুতরাং
আমরা Wheel এবং Engine এই দুিট াসেক িনেয় নতুন আেরকিট াস িলখেবা।

এবার তাহেল একিট উদাহরণ দখা যাক।

public class Bicycle {

// the Bicycle class has three fields


public int cadence;
public int gear;
public int speed;

// the Bicycle class has one constructor


public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}

// the Bicycle class has four methods


public void setCadence(int newValue) {
cadence = newValue;
}

public void setGear(int newValue) {


gear = newValue;
}

public void applyBrake(int decrement) {


speed -= decrement;
}

public void speedUp(int increment) {


speed += increment;
}
}

উপেরর Bicycle াসিটেত িতনিট িফ এবং চারিট মথড আেছ। এবার এই Bicycle থেক আমরা এর একিট
সাব- াস িলখেবা-

পাঠ ৫.১: ইনেহিরট া 49


বাংলায় জাভা

public class MountainBike extends Bicycle {

// the MountainBike subclass adds one field


public int seatHeight;

// the MountainBike subclass has one constructor


public MountainBike(int startHeight,
int startCadence,
int startSpeed,
int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}

// the MountainBike subclass adds one method


public void setHeight(int newValue) {
seatHeight = newValue;
}
}

এই MountainBike াসিট উপের Bicycle এর সব িফ এবং মথড েলা ইনেহিরট কের এবং এেত নতুন কের
ধু একিট িফ এবং একিট মথড লখা হেয়েছ। তাহেল আমােদর MountainBike াসিটেত Bicycle াসিটর
সব া ািট এবং মথড অেটাম ািটক ািল পেয় গেলা।

এখােন এ Bicycle হে সুপার াস(Super Class) এবং MountainBike হে সাব- াস(Sub Class) । অথাৎ
য াস থেক ইনেহিরট করা হয় তােক বলা হয় সুপার াস এবং য াস সাব াস থেক ইনেহিরট কের

মথড অভাররাইিডং(Method Overriding)

যিদও সাব- াস সুপার- ােসর সব েলা া ািট এবং মথড ইনেহিরটর কের, তেব সাব- ােস সুপার ােসর য কান
া ািট বা মথড ক অভাররাইড করা যায়।

একিট উদাহরণ দখা যাক-

পাঠ ৫.১: ইনেহিরট া 50


বাংলায় জাভা

public class Circle {


double radius;
String color;

public Circle(double radius, String color) {


this.radius = radius;
this.color = color;
}

public Circle() {
radius = 1.0;
color = "RED";
}

public double getArea() {


return radius * radius * Math.PI;
}
}

এই াসিটেত getArea() মথড একিট বৃে র ফল িরটান কের।

এখন আমরা এই াসিটেক এ েট ( extends ) কের নতুন আেরকিট াস িলখেবা-

public class Cylinder extends Circle {


double height;

public Cylinder() {
this.height = 1.0;
}

public Cylinder(double radius, String color, double height) {


super(radius, color);
this.height = height;
}

@Override
public double getArea() {
return 2 * Math.PI * radius * height + 2 * super.getArea();
}
}

এই াসিটেত Circle এর মথডিট আমরা সাধারণ ভােবই পেয় যােবা। Cylinder এর ফল িনধারণ করেত
হেল getArea() কল করেলই হেয় যাে । িক আমরা জািন য Circle এবং Cylinder এর ফল
একভােব িনধারণ করা যায় না। এে ে আমরা যিদ Circle এর মথডিট ক ব বহার কির তাহেল আমােদর
ফেলর মান ভুল আসেব। এই সমস া সমধাণ করার জেন আমরা আমােদর Cylinder াসিটেত
getArea() মথডিটেক পুনারায় িলেখিছ।

এখােন ল রাখেত হেব য, দুিট মথড এর িসগেনচার, িরটান-টাইপ এবং প ারািমটার িল একই রকম হেত হেব।

পাঠ ৫.১: ইনেহিরট া 51


বাংলায় জাভা

এখন আমরা যিদ Cylinder াস-এর getArea() মথড কল কির, তাহেল অভারাইেডড মথডিট কল হেব।

অ েনােটশান(Annotation) @Override

@Override এই অ েনােটশানিট জাভা 1.5 ভাসেন থম িনেয় আসা হয়। কান মথডেক যিদ আমরা অভাররাইড
কির তাহেল সই মথড এর উপের @Override দয়া হয়। এিট ক াইলারেক ইনফম কের য, এই মথিট সুপার
ােসর অভাররাইেডড মথড।

তেব এিট অপশনাল হেলও অবশ ই ভাল যিদ ব বহার করা হয়।

super িকওয়াড

আমরা যিদ সাব াস থেক সুপার ােসর কান মথড বা ভিরেয়বল একেসস করেত চাই তাহেল আমরা এই
িকওয়াডিট ব বহার কির। িক আমরা জািন য সাব ােস অেটােমিটক ািল সুপার ােসর সব া ািট চেল আেস
তাহেল এর েয়াজিনয়তা িনেয় হেত পাের।

আমরা আবার উপেরর Cylinder াসিট আবার দিখ। এই াসিটেত আমরা নতুন আেরকিট মথড িলখেত চাই।

public double getVolume() {


return getArea() * height;
}

এই মথডিট- ত getArea() * height এই াটেম িট ল কির। এখােন getArea() এই মথিট কল করা


হেয়েছ। আমােদর এই Cylinder াসিটেত getArea() মথডিটেক আমরা Circle াস এর getArea()
মথড- ক অভারাইড কেরিছ। সুতরাং আমরা যখন এই Cylinder াস থেক getArea() মথডিট কল করেবা
তখন আসেল Cylinder াস এর মথডিট কল হেব।

িক এে ে আমােদর একিট সমস া হে য - আমরা জািন িসিল ােরর আয়তন

V = Pi * r^2 * h
= (Pi * r^2) * h
= Area of Circle * h

সুতরাং Cylinder ােসর getArea() মথডিট ব বহার করা যাে না। কারণ িসিল ােরর ফল-

A = (2 * Pi * r * h) + (2 * Pi * r^2)

িক আমরা যিদ Circle াস এর মথডিট ব বহার কির তাহেল আমােদর সমস া সমাধান হেয় যায়। এখন যিদ
আমরা সুপার াস(Circle) এর মথডিট কল কের এই মথডিট িলখেত চাই তাহেল -

public double getVolume() {


return super.getArea() * height;
}

পাঠ ৫.১: ইনেহিরট া 52


বাংলায় জাভা

অথাৎ সাব ােস যিদ মথড অভাররাইড করা হয় এবং তারপেরও কান কারেণ যিদ আমােদর সুপার ােসর মথড
ক কল করার েয়াজন হয় তাহেল আমরা সুপার( super ) িকওয়াডিট ব বহার কির।

ইনেহিরেট এর ে মেন রাখেত হেব –

জাভা মাি পল ইনেহিরেট সােপাট কের না। এর মােন হে আমার একিট াস ধুমা একিট াসেকই ইনেহিরট
করেত পাের।

কন া র অভাররাইিডং(Constructor Overriding)

মথেডর মত কন াকটরও অভাররাইড এবং ওভারেলাড (Overload) করা যায় । অভাররাইড করা যায় বলেত
অেনক ে কন াকটর অভাররাইড ম াে টির । প াের ক ােল যিদ এমন কান কন া র থােক যিট াইেভট নয়
এবং যিট এক বা একািধক ইনপুট প ারািমটার িনেয় থােক তেব চাই ােস অবশ ই সই কন া র অবশ ই
অভাররাইড করেত হেব । এটা বাধ তামূলক । একটা ছা উদাহরন িদেয় িবষয়িট আমরা পির ার কের িনেত পাির ।

class Animal {

String animalName ;
String animalColor ;

public Animal(String animalName, String animalColor){

this.animalName = animalName;
this.animalColor = animalColor;
}

public void showName(){


System.out.println("Animal Name is: "+this.animalName);
}
public void showColor(){
System.out.println("Animal Color is: "+this.animalColor);
}
}

class Cow extends Animal{

private String work ;


public Cow(String animalName, String animalColor) {
// this.work = "No Work";//This is not valid
super(animalName, animalColor);//super in constructor have to be on top
this.work = "Gives Milk";//This is valid
}

@Override
public void showColor() {
System.out.println("Before showColor in child");
super.showColor();
}

@Override
public void showName() {

পাঠ ৫.১: ইনেহিরট া 53


বাংলায় জাভা

super.showName();
System.out.println("After showName in child");
}
public void showDescription(){
this.showName();
System.out.println("Animal Work is: "+this.work);
this.showColor();
}
}

public class Main {

public static void main(String[] args) {

Cow cow = new Cow("White Cow", "White");


cow.showDescription();
}
}

উপেরর কাডিট মন িদেয় ল ক ন । প াের াস Animal এর মােঝ একিট পাবিলক কন া আেছ যিট দুিট
প ারািমটার িনেয় থােক । তাই এটার চাই ােসও আমােদর অবশ ই একিট কন া র থাকেত হেব যিটর মােঝ
প াের ােসর ওই কন াকটর ইনেভাক করেত হেব । এটা ম াে টির । এিট না করেল কাড ক াইেলশন এরর
শা করেব এবং ক াইলই হেবনা । আেরা একিট িবষয় চাই ােসর কন া েরর মাঝ থেক প াের ােসর
কন া রেক super িকয়াওড িদেয় কল করেত হেব তেব , super িকয়াওড অবশ ই সবার উপর থাকেত হেব ।
এমনিক একিট ি টেম ও থাকেত পারেব না । super এর পর যা খুিশ থাকেত পাের কান সমস া নাই ।
এছাড়া অন একািধক কন া র িডে য়ার করার েয়াজন হেল সটাও করেত পারেবন , এটােক বলা হেব কন া র
ওভারেলািডং । যথারীিত এর মােঝও super বাবািজ অিধপত িবরাজ কের বেস থাকেব ।

তেব মথড আর কন া েরর ওভাররাইিডং এর মােঝ এটা বড় একটা পাথক য মথেডর ে সুপার আপনারা
কােজর সুিবধার জন যেকান যায়গার ব াবহার করেত পারেবন । তেব কন া েরর েত আঈন খুবই কিঠন ।

অভারেলািডং অফ মথড & কন া র ( Overloading of method and constructor ):

অভারেলািডং বলেত খুব সাধারন ভাষায় বাঝায় একই নােমর এবং একই িরটান টাইেপর ( নাও হেত পাের ) একািধক
মথড বা কন া র ( এে ে কান িরটান টাইপ থাকেব না ) িবদ মান থাকা । তার অথ দাড়ােলা একই ােসর মােঝ
একই নােমর এবং িরটান টাইেপর একািধক মথড বা কন া র িবদ মান থাকেব । িবষয়টা একটু গালেমেল মেন হে
তাইনা ? আসেল তমন িকছু ই নয় , বরং িবষয়িট অন অেনক িকছু র থেকও অেনক বিশ সরল । একই নােমর
মথড বা কন া থাকেলও তােদর ইনপুট প ারািমটার িক একই হেবনা । ইনপুট টাইপ হয়ত িভ টাইেপর হেব নাহয়
একিট মথড থেক অন া মথেডর ইনপুট প ারািমটার সংখ া িভ হেব । উদাহরন সহকাের আমরা আমােদর
কনিফউশন দুর করেত পাির । চলুন একিট উদাহরন দেখ নওয়া যাকঃ

পাঠ ৫.১: ইনেহিরট া 54


বাংলায় জাভা

public class Main {

private int initialNumber;


private int terminalNumber;

public Main(int initialNumber, int terminalNumber) {

this.initialNumber = initialNumber;
this.terminalNumber = terminalNumber;
}

public Main(int terminalNumber) {

this(0, terminalNumber);
}

public Main() {

this(0, 100);
}

public void showNumbers() {

System.out.println("First Number: " + this.initialNumber + ", Second Number: " +


}

public static void main(String[] args) {

Main m = new Main(1, 5);


m.showNumbers();
Main m2 = new Main(5);
m2.showNumbers();
Main m3 = new Main();
m3.showNumbers();
}
}

উপেরর কাড সগেম িটেত আরা দখেত পারিছ য একই Main ােস একই নােমর কন া র ৩ িট । খয়াল
করেল দখা যােব য ৩ িট কন া র ায় একই কাজ করেলও তােদর ইনপুট প ারািমটার িক একই নয় । এেকক জন
এেকক রকম ইনপুট িনেয় কাজ করেছ । এভােব একই ােসর মােঝ একািধক কােজর জন একািধক কন া র
ব াবহার করােক বলাহয় কন া র অভারেলািডং । যখােন একই কন া েরর লাড অভার হেয় িগেয়েছ :P

ওেক, এবার আসা যাক মথড অভারেলািডং িবষেয় । কন া েরর মত মথড অভারেলািডংও সম ম াকািনজম
ফেলা কের । একিট উদাহরন িদেলই িবষয়িট পির ার হেয় যােবঃ

পাঠ ৫.১: ইনেহিরট া 55


বাংলায় জাভা

public class Main {

private int sum(int a, int b){


return a+b;
}
private int sum(int a, int b, int c){
return a+b+c;
}
private int sum(int ... a){

int result = 0;
for(int x : a){
result+=x;
}
return result;
}

public static void main(String[] args) {

Main m = new Main();


System.out.println(m.sum(3, 5));
System.out.println(m.sum(3, 5, 7));
System.out.println(m.sum(3, 5, 7, 17));
System.out.println(m.sum(3, 5, 7, 17, 23));
}
}

উপেরা কাডিটেত দখুন sum মথডিট ৩ বার লখা হেয়েছ । মথেডর আইেডি ফায়ার, িরটান টাইপ সবই িঠক
আেছ তবু কাজ করেছ ! হ া কারন আপনার ইনপুর প ারািমটার িভ িদেয়িছ । থম sum মথড কবল ২ িট
না ােরর যাগ কের িদেত পাের । ি তীয়িট পাের ৩ িট না ােরর , আর শেষরিট পাের যত সংখ ক ইি জার না ারই
দওয়া হাক না কন স যাগ কের রজা িদেব । িস িল এটােকই বলা হয় মথড ওভারেলািডং । যখােন একই
নােমর একািধক মথড থােক যােদর নাম এক হেলও ইনপুট প ারািমটার বা কােজর ধরন স ূন আলাদা হয় ।

অ াব া াস ( Abstract Class ):

অ াব া াস হল িবেশষ এক ধরেনর াস যিটর মােঝ কমপে একিট অ াব া মথড থাকেব । তাহেল হল


অ াব া মথড আসেল িক িজিনস । অ াব া মথড হল এমন এক ধরেনর মথড যটার কান বিড নই। সাজা
কথায় য মথেডর অ াে স মিডফায়ার আেছ, িরটান টাইপ আেছ, মথেডর নাম আেছ, ইনপুট প ারািমটার আেছ
িক কান বিড িডফাইন করা নই । বিড এ িট বা অ াব া সজন এই মথডেক অ াব া মথড বলা হেয়েছ ।
চলুন ছা একটা উদাহরন দেখ পের ব াখ ার িদেক যাই ।

public abstract class Animal{

public abstract String color();


public void name(){
System.out.println(“Tiger”);
}
}

পাঠ ৫.১: ইনেহিরট া 56


বাংলায় জাভা

উপেরা কাডিটেত Animal একিট অ াব া াস । অ াব া িডে য়ার করার সময় class িকওয়ােডর আেগ
abstract িকওয়াডিট িলখেত হেব । অ াব া াস পাবিলক বা িডফ যেকানিটই হেত পাের । এই াস
অ াব া িডে য়ার করার কারন এর মােঝ আমরা একিট অ াব া মথড িডে য়ার কেরিছ যিটর নাম color ।
সহেজই আমরা বুঝেত পারিছ য অ াব া মথড িডে য়ার করেত গেল তার আেগ abstract িকওয়াডিট
ব াবহার করেত হেব । ল কের দখুন color মথেডর অ াে স মিডফায়ার, িরটান টাইপ ( ইনপুট প ারািমটার
িদেল দওয়া স ব ) সবই আেছ িক কান বিড নই । এজন এই মথডেক বলা হেয়েছ অ াব া মথড । একিট
অ াব া ােস যমন একািধক অ াব া মথড থাকেত পাের তমন সাধারন মথডও থাকেত পাের চুর পিরমান ।
হল কন এই অ াব া মথড ?

অ াব া ােসর কান ই ট া ি েয়ট করা যায়না যত ন না সব লা অ াব া মথডেক ওভাররাইড করা হে ।


অ াব া মথড হল একটা েলর বা িনয়েমর মত । এই মথেডর মাধ েম বেল দওয়া হে য , য াসই এই
Animal াসেক এ েট করেব তােক অবশ ই color মথডিট ওভাররাইড করেত হেব এবং িনজ কােজর
উপর িভি কের তােক । যিদ Animal াসেক Bird াস এ েট কের িক color মথডিট ওভাররাইড না
কের তেব Bird াসিটেকও অবশ ই অ াব া াস হেত হেব ।

abstract class Animal{

abstract void color();


}

abstract class Bird extends Animal{


//abstract void color(); is present by default
}

class Crow extends Bird{

@Override
void color() {
System.out.println("Black");
}
}
public class Main {

public static void main(String[] args) {

//Animal animal = new Animal(); //This is not possible


//Bird animal = new Bird(); //This is not possible
Crow bird = new Crow();
bird.color();
}
}

উপেরা কাডিটেত আমরা Bird ােসর অবেজ কানভােবই ি েয়ট করেত পারেবা না যত ন পয না আমরা
এর সব অ াব া মথড ইি েম করিছ । স কাজিট করা স ব এই াসিটেক যিদ অন কান াস এ েট কের
এবং সব অ াব া মথড ইি েম কের অথবা অবেজ ি েয়ট করার সময় আমরা সব অ াব া মথড ইমি েম
কের দই । থম কাজিট আপনারা পােরন । এখােন ২য় উপায়িট দখােনা হলঃ

পাঠ ৫.১: ইনেহিরট া 57


বাংলায় জাভা

public class Main {

public static void main(String[] args) {

Bird bird = new Bird() {


@Override
void color() {
System.out.println("White");
}
};
bird.color();
}
}

ই ারেফস ( Interface ):

ইনেহিরট াে র খুব পূন এবং কাযকরী একিট টামস হল ই ারেফস । ই ারেফস িডে য়ার করেত হয়
interface িকওয়াডিট িদেয় । এিট public বা িডফ যেকানিটই হেত পাের ােসর মত । আমরা ইেতামেধ
জেন ফেলিছ Abstract াস এবং অ াব া মথড িক িজিনস । অ াব া াস এবং মথড বুেঝ থাকেল
ই ারেফস বুঝেত পারা খুব বিশ কিঠন িকছু ই নয় । ই ারেফস এমন একিট াস যখােন সব লা মথডই অ াব া
। অথাৎ ১০০% অ াব া াসেক ই ারেফস বলা যায় । অ াব া ােস অ াব া মথড এবং র লার মথড
দুিটই িছল িক ই ারেফেস কান কার র লার মথড থাকেব না । ই ারেফেস কবল অ াব া মথডই থাকেব ।
চলুন আমরা একিট উদাহরন দেখ নইঃ

পাঠ ৫.১: ইনেহিরট া 58


বাংলায় জাভা

interface Animal{

public abstract void name(String animalName);


String color();
}

interface Cow{
void work();
}

public class Main implements Animal, Cow{

public static void main(String[] args) {

Main m = new Main();


m.name("I don't know this :P");
System.out.println(m.color());
m.work();
}

@Override
public void name(String animalName) {
System.out.println(animalName);
}

@Override
public String color() {
return "Red";
}

@Override
public void work() {
System.out.println("Gives Milk");
}
}

ল ক ন এখােন interface িকওয়াডিট িদেয় দুিট ই ারেফস িডে য়ার করা হেয়েছ যথা েম Animal এবং
Cow । Animal ই ারেফেসর মধ দুিট মথড আেছ যােদর একজেন public এবং abstract িডে য়ার করা
হেয়েছ িক অন মথডিট কবল িরটানটাইপ দওয়া হেয়েছ । এিটর কারন হল ই ারেফেসর মােঝ আপিন যিদ কান
মথেডর পূেব public এবং abstract িডে য়ার নাও কেরন তবু তারা বাই িডফ পাবিলক এবং অ াব া ।
এবার আিস Main ােস । এত ন আমরা যেন এেসিছ য জাভা মাি পল ইনেহিরট া সােপাট কেরনা তাহেল
এখােন কন দুিট ই ারেফস ইি েম করেছ ? হ া সটাই করেব কারন পের ব াখ া করা হেব । এখােন ল নীয় িবষয়
হল ই ারেফসেক িক implements িকওয়াড িদেয় ইমি েম করেত হয় । এখােন িক এ েট হেবনা । একিট
াস কবল অন একিট াসেক এ েট করেত পারেব তেব একই সােথ অন ন , এক বা একািধক
ই ারেফসেকও ইমি েম করেত পারেব । একািধক ই ারেফস ইমি েম করার েয়াজন হেল কমা ( , ) িদেয় একিটর
পর আেরকিট যাগ করেত হেব । তেব অবশ ই অ াব া মথড ইমি েম করেত ভুলেবন না । :P

কেয়কিট িবষয় জেন রাখা ভােলাঃ

পাঠ ৫.১: ইনেহিরট া 59


বাংলায় জাভা

১) একিট াস একিট মা াস বা অ াব া াসেক এ েট করেত পারেব । ২) একিট াস বা অ াব া াস এক


বা একািধক ই ারেফসেক ইমি েম করেত পারেব । ৩) একিট ই ারেফস এক বা একািধক ই ারেফসেক এ েট
(ইমি েম নয় িক ) করেত পারেব ।

উে খ অ াব া মথেডর মত ই ারেফেসরও কান অবেজ ি েয়ট করা যায়না । যায়না সটা বলা ভুল তেব
সরাসির যায়না । িকভােব যায় সটা বাঝার জন আপনােদর পিলমরিফজম পয যাওয়া লাগেব । ;)

পাঠ ৫.১: ইনেহিরট া 60


বাংলায় জাভা

## পিলমরিফজম (Polymorphism)

এবার আমরা কথা বলেবা পিলমরিফজম িনেয়। শ িটর মেধ ই একিট িবেশষ গা ীয আেছ যা িকনা একিট সাধারণ
কেথাপকথনেক অেনক পূণ কের তুলেত পাের। তেব এিট অবেজ ওিরেয়ে ড া ািমং এর একিট ব ল
ব ব ত কৗশল । এই শ িটর সহজ মােন হে যার একািধক প আেছ অথাৎ ব িপতা।

সহজ কথায় পিলমরিফজম হল এমন একিট টকিনক বা প িত যখােন আমরা একিট াস, অ াব া াস বা
ই ারেফেসর অবেজ ি েয়ট কির তার চাই ােসর কন া েরর মাধ েম । অথাৎ আমরা একিট ােসর অবেজ
ি েয়ট করেবা অন একিট ােসর কন া র কল কের । সহজ ভাষায় এিটই হল পিলমরিফজম ।

মেন করা যাক,

public class Liquid {


public void swirl(boolean clockwise) {
// Implement the default swirling behavior for liquids
System.out.println("Swirling Liquid");
}
}

এখন এর একিট অবেজ তির করেত চাইেল – আমােদর new অপােরটর ব বহার কের তা একিট ভিরেয়বল এ
রাখেত হেব।

Liquid myFavoriteBeverage = new Liquid ();

এখােন myFavoriteBeverage হে আমােদর ভিরেয়বল যা Liquid অবেজ এর রফাের । আমরা এখন


পয যা যা িশেখিছ স অনুযায়ী এই েম িট যথাথ। তেব আমরা এর আেগর অধ ােয় Is-A স েক জেন
এেসিছ।

আমােদর জাভা া ািমং পিলমরিফজম সােপাট করায় আমরা myFavoriteBeverage এই রফােরে র যায়গায়
Is-A স িকত য কান টাইপ রাখেত পাির। যমন – ​ ​

Liquid myFavoriteBeverage = new Coffee();


Liquid myFavoriteBeverage = new Milk();

এখােন Coffee এবং Milk হে Liquid এর সাব- াস বা টাইপ এবং Liquid এেদর সুপার াস বা টাইপ।

পিলমরিফজম িনেয় আরও একটু আ য হেত চাইেল আমরা এখন একিট িবষয় জানেবা যা িদেয় আমরা কান একিট
অবেজ এর কান মথড কল করেবা তেব তা কান ােসর অবেজ সিট না জেনই। আেরকটু পির ার কের বিল,
আমরা যখন সুপার ােসর এর রফাের ধের কান এর মথড কল করেবা তখন িক আমরা জািন না য এিট আসেল
কান অবেজ এর মথড। যমন- ​ ​

Liquid myFavoriteBeverage = // ….

পাঠ ৫.২: পিলফরিফজম 61


বাংলায় জাভা

এখােন আমােদর myFavoriteBeverage এই রফাের এ Liquid , Coffee , Milk এর যেকান একিটর


অবেজ হেত পাের। উদাহরণ -

public class Coffee extends Liquid {


@Override
public void swirl(boolean clockwise) {
System.out.println("Swirling Coffee");
}
}

public class Milk extends Liquid{


@Override
public void swirl(boolean clockwise) {
System.out.println("Swirling Milk");
}
}

public class CoffeeCup {


private Liquid innerLiquid;

void addLiquid(Liquid liq) {


innerLiquid = liq;
// Swirl counterclockwise
innerLiquid.swirl(false);
}
}

আমরা এখােন একিট CoffeeCup াস িলেখিছ যার মােঝ addLiquid() নােম একিট মথড আেছ যা িকনা
একিট Liquid টাইপ parameter নয়, এবং সই Liquid এর swirl() মথড- ক কল কের।

িক আমরা আমােদর সিত কােরর জগেত একিট কিফ-কাপ এ ধুমা কিফ-ই এড করেত পাির তা নয়, আমরা
চাইেল য কান ধরেণর িলকুইড এড করেত পাির, সিট িম ও হেত পাের। তাহেল এই addLiquid মথড তা
ধুমা Liquid টাইপ parameter নয়, তাহেল আমােদর সিত কােরর জগেতর সােথ এই া ািমং মেডল এর
সাদৃশ থাকেলা কাথায় ?

তেব মজার ব পার এখােনই, আমােদর এই CoffeeCu p াসিট পিলমরিফজেমর ম িজক ব াবহার কের সিত কার
অেথই আমােদর সিত কােরর জগেতর CoffeeCup এর মেতাই কাজ কের। ​

পাঠ ৫.২: পিলফরিফজম 62


বাংলায় জাভা

public class MainApp {


public static void main(String[] args) {
// First you need a coffee cup
CoffeeCup myCup = new CoffeeCup();

// Next you need various kinds of liquid


Liquid genericLiquid = new Liquid();
Coffee coffee = new Coffee();
Milk milk = new Milk();

// Now you can add the different liquids to the cup


myCup.addLiquid(genericLiquid);
myCup.addLiquid(coffee);
myCup.addLiquid(milk);
}
}

উপেরর কাড েলােত দখা যাে য আমরা একিট CoffeeCup এর একিট অবেজ তির কের সিট ত িবিভ
রকম Liquid এড করেত পারিছ।

আেরকটু ল কির,

void addLiquid(Liquid liq) {


innerLiquid = liq;
// Swirl counterclockwise
innerLiquid.swirl(false);
}

এই মথডিটেত innerLiquid.swirl(false) যখন কল কির তখন িক আমরা জািন না য এই innerLiquid


আসেল কান অবেজ এর রফাের । এিট িলকুইড বা এর য কান সাব-টাইপ হেত পাের।

িকছু েয়াজনীয় তথ -

১. একিট সাব াস এর অবেজ েক আমরা এর সুপার ােসর রফাের এ এসাইন করেত পাির। ২. সাব ােসর
অবেজ েক সুপার ােসর রফাের -এ এসাইন করেল, মথড কল করার সময় ধু মা সুপার ােসর মথড
েলােকই কল করেত পাির। ৩. তেব সাব াস যিদ সুপার ােসর মথড অভাররাইড কের, তাহেল যিদও আমরা
সুপার াস এর রফাের ধের মথড কল করিছ, িক রানটাইম-এ সাব ােসর মথডিট কল হেব। মেন রাখেত হেব
এিট ধুমা মথড অভাররাইড করা হেলই সত হেব।

আপ-কাি ং(Upcasting ) এবং ডাউনকাি ং (Downcasting)

Liquid liquid = new Coffee ();

পাঠ ৫.২: পিলফরিফজম 63


বাংলায় জাভা

এখােন সাব ােসর অবেজ েক সুপার ােসর রফাের এ এসাইন করা হয়েছ। এেক বলা হয় আপ-কাি ং। এই
কাি ং সবসময় সইফ ধরা হয় কারণ আপকা ং এর ে সাব াস সবসময়ই সুপার ােসর সবিকছু ইনেহিরট কের
এবং ক াইলার ক াইল করার সময়-ই এ কাি ং করা স ব িকনা তা চক কের থােক।

Liquid liquid = new String();

উপেরর টেম িট ক াইলার ক াইল করেব না, কারণ String মােটই Liquid ােসর সাব াস নয়।
এে ে ক াইলার incompatible types ইরর দখােব।

হােমিজিনয়াস কােলকশন ( Homogeneous Collection ):

হােমািজিনয়াস কােলকশন হল একই ােসর িকছু সংখ ক অবেজে র কােলকশন । একিট উদাহরন িদেয় িবষয়িট
একটু সুরাহা করা যাকঃ

interface Animal {

public abstract void name(String animalName);


}

class Cow implements Animal {

private String animalName;

public void work(String animalWork) {


System.out.println("Work of " + this.animalName + " is " + animalWork);
}

@Override
public void name(String animalName) {
this.animalName = animalName;
System.out.println("Name of the animal is: " + this.animalName);
}
}

public class Main {

public static void main(String[] args) {

Animal[] collection1 = new Cow[3];


collection1[0] = new Cow();
collection1[1] = new Cow();
collection1[2] = new Cow();

Cow[] collection2 = new Cow[3];


collection2[0] = new Cow();
collection2[1] = new Cow();
collection2[2] = new Cow();
}
}

পাঠ ৫.২: পিলফরিফজম 64


বাংলায় জাভা

ল ক ন । এখােন Cow াসিট Animal ই ারেফেসর চাই । এবং Main ােসর main মথড এর মােঝ
২ িট অবেজে র অ াের িডে য়ার করা হেয়েছ । একিট Animal ােসর অবেজে র অ াের যিটর সব লা অবেজ
Cow ােসর কন া র িদেয় ই ট ানিশেয়ট করা হেয়েছ । এখােন পিলমরিফজম । এবং অন িট অবেজ
অ ােরিট চীরাচিরত অবেজ অ াের । এই দুিই অ ােরই হল হােমািজিনয়াস কােলকশেনর উদাহরন । বাঝা যায়িন ?
ওেক, এখােন collection1 অ ােরিটর িতিট অবেজ ই Cow ােসর কন া র িদেয় ই ট ানিশেয়ট করা হেয়েছ
। তার মােন collection1 এর মােঝ সব লা অবেজ ই একই ধরেনর । যেহতু এই অ ােরিটর সব লা এিলেম
একই ধরেনর/ ােসর অবেজ সুতরাং এিটেক বলা হেব হােমািজিনয়াস কােলকশন । একই কথা collection2 এর
ে ও ােযাজ ।

হটােরািজিনয়াস কােলকশন ( Heterogeneous Collection ):

িভ ধমী অবেজে র কােলকশনেকই বলা হয় হটােরািজিনয়াস কােলকশন । হটােরািজিনয়াস কােলকশন বুঝেত হেল
আমােদর একিট উদাহরন দেখ নওয়া উ মঃ

class Animal {

String animalName ;
public Animal(String animalName){
this.animalName = animalName;
}
public void name(){
System.out.println("Animal name is: "+this.animalName);
}
}

class Cow extends Animal {

public Cow(String animalName) {


super(animalName);
}

public void work(String animalWork) {


System.out.println("Work of " + this.animalName + " is " + animalWork);
}
}

class Dog extends Animal {

public Dog(String animalName) {


super(animalName);
}

public void work(String animalWork) {


System.out.println("Work of " + this.animalName + " is " + animalWork);
}
}

class Cat extends Animal {

public Cat(String animalName) {

পাঠ ৫.২: পিলফরিফজম 65


বাংলায় জাভা

super(animalName);
}

public void work(String animalWork) {


System.out.println("Work of " + this.animalName + " is " + animalWork);
}
}

public class Main {

public static void main(String[] args) {

Animal[] animals = new Animal[4];


animals[0] = new Animal("Dolphin");
animals[1] = new Cow("Big Cow");
animals[2] = new Dog("Red Dog");
animals[3] = new Cat("White Cat");
}
}

খুব ভােলাভােব ল ক ন । আমরা Animal ােসর অবেজে র একটু অ াের িডে য়ার কেরিছ যার সাইজ ৪ ।
িক ই ট ানিশেয়ট করার সমস আমরা পিলমরিফজম মকািনজম ব াবহার কের এর চাই ােসর িভ িভ কন া র
িদেয় ই ট ানিশেয়ট কেরিছ । অথাৎ animals অ ােরিটর িতিট অবেজ ই আলাদা আলাদা কন া িদেয়
ই ট ানিশেয়ট করা এবং তােদর িবহ ািভেয়রাল পাথ আেছ । এধরেনর কােলকশনেক বলা হয় হটােরািজিনয়াস
কােলকশন ।

এবার একটু িভ প ায় এেগান যাক । মইন াসিটেক আমরা একটু মিডফাই করেবা । বাকী সবই িঠক থাকেব আেগর
মত ।

public class Main {

public static void main(String[] args) {

Animal animal = new Cat("Cute Cat");


animal.name();
//animal.work("Some Work");//Not possible
Cat cat = new Cat("Preety Cat");
cat.name();
cat.work("It plays");
}
}

খয়াল কের দখুন আমরা Animal এবং Cat এর অবেজ ি েয়ট করার সময় কন া র ব াবহার কেরিছ Cat
এর িক Animal এর অবেজ থেক আমরা work মথডিট কান ভােবই কল করেত পারিছ না বা পারেবা না
িক Cat এর অবেজ থেক িঠকই পারিছ । কারনটা িক ? কারন হল Animal ােসর মােঝ িঠক য য মথড

পাঠ ৫.২: পিলফরিফজম 66


বাংলায় জাভা

আেছ স লােকই আমরা অ াে স করেত পারব তেব Cat এর ইমি েমে শন িদেয় । Animal এর মােঝ নই িক
Cat ােস বাড়িত আেছ এমন কান মথডেক আমরা অ াে স করেত পারেবা না । এমনিক Animal ােসর
অবেজে Cat ােসর work মথেডর কান রফাের ই ি েয়ট হেবনা ।

তাহেল এটা কির কন আমরা ? এটা করার পছেন বশ িকছু কারন থাকেত পাের । থমত আমরা প াের াস
এবং চাই ােসর ইমি েম শন িনেয় কাজ করেত চাইেল পিলমরিফজেমর এই সুিবধািট নওয়া হয় । অন কারনিট
হল মেমাির কনজা শন । ভেব দখুন যিদ Animal ােস ৩ িট মথড থােক য লার জন আপিন Cat ােসর
ইমি েমে শন ব াবহার করেত চান , িক Cat ােসর মােঝ ১৫ িটর মত মথড আেছ এবং অেনক অ াি িবউট ।
আপিন যিদ Cat এর অবেজ ি েয়ট কেরন তেব মেমাির থেক চুর স কনিজউম করেব উ অবেজ ।
অন িদেক আপিন যিদ Animal এর অবেজ ি েয়ট কেরন Cat এর কন া র ব াবহার কের তাহেল Cat ােসর
ইমি েমে শন ব াবহার করেত পারেছন এবং মেমাির থেক খুব কম মেমাির কনিজউম করেছ ( Animal
মথড লার জন েয়াজনীয় মােমাির মা ) । কানিট বিশ সুিবধাজনক ? এছাড়া আেরা কারন আেছ । পরবতীেত
স লা িনেয়ও আেলাচনা করা হেব ।

চলেব .....

পাঠ ৫.২: পিলফরিফজম 67


বাংলায় জাভা

ইনক াপসুেলশান (Encapsulation)


আমরা এেতা েন জেন ফেলিছ য, একিট অবেজ হেলা কত েলা ডাটা এবং মথড এর সমি । অবেজ
ওিরেয়ে ড া ািমং এর আেরকিট খুবই পূণ িবষয় আেছ, যা হে , একিট ােসর মেধ ডাটা েলােক লুিকেয়
রাখা এবং ধুমা মথেডর মাধ েম স েলােক একেসস করেত দওয়া। এর নাম হে
এনক াপসুেলশান(Encapsulation) । এর মাধ েম আমরা সব ডাটা েলােক ােসর মেধ িসল কের একটা
কপসুেলর মেধ রেখ িদই এবং স েলা ধুমা যসব মথড েলােক া করা যায়, তােদর মাধ েম একেসস
করেত িদই।

তেব এই এেতা ােটকশান এর কারণ িক হেত পাের তা যিদ একটু জেন িনই েত তাহেল আমার মেন খুব ভাল
হয় –

যারা অেনক লখােলিখ কের এমনিক যারা কাড িলেখ তারাও জােন য, একটা লখা ততই ভাল হয় সটােক যত
বিশ ির-রাইট করা হয়। আপিন যিদ একটা কাড িলেখ ফেল রােখন এবং িকছু িদন পের আবার সিট খুেল দেখন-
দখা যােব য আপিন আরও একিট ভাল উপায় বর পেয় যােবন সই কাডিট লখার। এিট সব সময়ই হয়। এই বার
বার কাড চ কের নতুন কের লখােক বলা হয় িরেফ িরং(refactoring)। আমরা একিট কাডেক বার বার িলেখ
সটােক আরও বিশ িকভােব সহজেবাধ কাড লখার চ া কির যােত সই কাডিট আরও ভালভােব মইনেটইন
করা যায়।

িক এখােন একিট িচ ার িবষয় হে । আমরা জািন য অবেজ ওিরেয়ে ড া ািমং এর মাধ েম আমরা য
সফটওয় ার িসে ম তির কির তােত নানা রকম অসংখ অবেজ থােক যখােন একিট অবেজ আেরকিটর সােথ
তথ আদান দান কের, একিট আেরকিটর উপর িনভর কের কাজ কের থােক। ধরা যাক, A একিট অবেজ যার
উপর B িনভর কের। ধরা যাক B এখােন কনজু মার অবেজ । এখন আমারা যিদ A ক কান রকম পিরবতন করেত
চাই, তাহেল B আেগর মেতাই থাকেত চাইেব। এখােন দুেটা অবেজ হয়েতা দুইজন িভ া ামার িলেখ থাকেত
পাের। সুতরাং এেক অেন র পিরবতন িনেয় যােত সমস ায় পরেত না হয়, সই ব ব া করেত হেব। আমরা অেনক সময়
নানা রকম লাইে ির ব বহার করেত হয় িবিভ েজে এবং এ েলার উপর িনভর কের কের আমােদর েজ দািড়েয়
যায়। এই লাইে ির েলার মােঝই মােঝই ভাসন পিরবতন হয়। িক মজার ব পার হেলা এ েলা পিরবতন হেলও
আমােদর কাড নতুন কের িলখেত হয় না। আবার অন িদেক লাইে ির যারা তির কের তােদরও এই কাড পিরবতেনর
াধীনতা থাকা চাই, িক সে ে যােত আমােদর েজ এর কান সমস া যােত না হয় সটাও মেন রাখেত হেব।

তা এই সমস া সমাধােনর একিট উপায় আেছ। সিট হেলা- লাইে ির কাড-এর য মথড েলা আেছ স েলা
মােটও িরমুভ করা যােব না। কারণ আমরা যখন একিট লাইে িরর একিট িনিদ ােসর মথড িনেয় কাজ করেবা,
আমরা চাইেবা না কান ভােবই আমােদর কাড ভে যাক। লাইে িরর া ামার সই াস িনেয় যা িকছু করেত
পারেব, িক আমরা য সব মথড ব বহার কেরিছ স েলােক মুেছ ফলেত পারেব না। তারপর িফ বা া ািটজ
এর ে ও লাইে ির য িলেখেছ স িকভােব জানেব য কান িফ বা া ািটজ েলা আমরা আমােদর েজ এর
ে একেসস কেরিছ? কান ভােবই জানার উপায় নই। কারণ আমারা আমােদর কাড িকভােব কেরিছ যা লাইে ির
য িলেখেছ তার জানার কথা নয়। িক য া ামার লাইে ির িলেখেছ স সবসময়ই চাইেব তার কাড এ নতুন িকছু
এড করেত, আেগর থেক ভাল করা ইত ািদ। এ্ই সমস া সমাধােনর জেন জাভা আমােদরেক কত েলা এেকেসস
িসফায়ার (access specifiers) িদেয় থােক, যার মাধ েম লাইে ির া ামার িঠক করেত পাের য কাড এর

পাঠ ৫.৩: এনক াপসুেলশান 68


বাংলায় জাভা

কান কান অংশ েলা আমরা যখন আমােদর েজ এ ব বহার করেত পারেবা আর কান কান েলা করেত পারেবা
না। এেত সুিবধা হে , লাইে ির া ামার স সব অংশ েলা আমােদরেক ব বহার করেত িদে , সই অংশ েলােত
ইে মেতা পিরবতন/পিরবধন করেত পারেব কান রকম িচ াভাবনা ছাড়া।

আমারা যখন একটা বড় িসে েম কাজ কির আমােদর নানা রকম অবেজ িলখেত হয়। একিট অবেজ আেরকিট
অবেজ ক ব বহার কের। এই এেকেসস েটকশােনর মাধ েম আমরা িনধারণ কের িদেত পাির য একিট িনিদ
অবেজ এর কান অংশ েলা অন অবেজ ব ভহার করেত পারেব ,আর কান েলা পারেব না। এেত উপেরর
সমস ার সমাধান হেয় যায়। এছাড়াও আেরকিট ব াপার হয়। আমরা যখন কান একিট াস িনেয় কাজ করেত যােবা,
সই অবেজ -এ হাজার লাইন কাড থােক পাের। পুরটা এেকবাের দখেত গেল আমরা হয়েতা কনিফউজড হেয়
যােবা িকংবা খুব কমে কাড হেল বুঝেত অসুিবধা হেত পাের। িক সই কাড যিদ এমন ভােব করা থােক যখােন
অ অংশ আমােদর ব বহােরর জেন অেপন করা থােক, বািক েলা হাইড করা যােক তাহেল আমরা য অংশটুকু
হাইড করা সই অংশ িনেয় িচ া করেত হেব না। এই কাড হাইড করার ঘটনােক অবেজ ওিরেয়ে ড া ািমং এর
ভাষায় এনক াপসুেলশান(Encapsulation) বলা হয়।

জাভােত িতনিট এেকেস কে াল করার জেন িতনিট িক ওয়াড আেছ। স েলা হেল- ​ Public , protected
এবং private   এখন আমরা িবিভ রকম একেসস কে াল দখেবা-

Default Access
এর মােন হে আমরা যিদ কান িক-ওয়াড ব বহার না কির তাহেল সিট Default Access আর মােঝ পের। কান
াস এর ভিরেয়বল বা মথড এর আেগ যিদ কান একেসস মিডফায়ার না থােক তাহেল সই াসিট য প ােকেজর
মেধ আেছ সই প ােকজ এর সব াস থেক একেসস করা যােব।

package bd.com.howtocode.java;

import java.util.Random;

public class HelloWorld {


String version = "2.56";

int getRandomInt() {
return new Random().nextInt();
}
}

এই ােসর ভিরেয়বল version এবং getRandomInt() মথড ক bd.com.howtocode.java এই প ােকজ


এর সকল াস একেসস করেত পারেব।

Private Access Modifier - private :


কান ােসর মথড, ভিরেয়বল, কন াকটর এর আেগ যিদ private িকওয়াড থােক তাহেল স েলােক সই াস
ছাড়া অন কান াস একেসস করেত পারেব না।

উদাহরণ-

পাঠ ৫.৩: এনক াপসুেলশান 69


বাংলায় জাভা

package bd.com.howtocode.java;

public class User {


private String name;
private String emailAddress;

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public String getEmailAddress() {


return emailAddress;
}

public void setEmailAddress(String emailAddress) {


this.emailAddress = emailAddress;
}
}

এই ােসর এর ভিরেয়বল name এবং emailAddress ক কান ভােবই অন কান াস থেক একেসস করা
যােব না। িক আমরা যিদ এেদর ক একেসস করেত চাই তাহেল একেসসর মথড ব াবহার করেত পাির।

Public Access Modifier - public :


কান ােসর মথড, ভিরেয়বল, কন াকটর এর আেগ যিদ public িকওয়াড থােক তাহেল স েলােক য কান াস
থেক একেসস করা যায়।

public class Milk{


public void swirl(boolean clockwise) {
System.out.println("Swirling Milk");
}
}

Protected Access Modifier - protected :


কান ােসর মথড, ভিরেয়বল, কন াকটর এর আেগ যিদ protected িকওয়াড থােক তাহেল স েলােক অন
প ােকজ থেক সই ােসর সাব াস একেসস করেত পারেব আর িনেজর প ােকজ এর সবাই একেসস করেত
পারেব।

পাঠ ৫.৩: এনক াপসুেলশান 70


বাংলায় জাভা

class AudioPlayer {
protected boolean openSpeaker(Speaker sp) {
// implementation details
}
}

একেসস লেভল একিট টবিল -

Modifier Class Package Subclass World


public Y Y Y Y
protected Y Y Y N

no modifier Y Y N N
private Y N N N

পাঠ ৫.৩: এনক াপসুেলশান 71


বাংলায় জাভা

পাঠ ৬: জাভা এে পশান হ াে িলং


এে পশান বিসকস
াই ক াচ- ফাইনািল
চকড-একেসপশান
আনেচকড-একেসপশান
িয়ং একেসপশান
NullPointerException
ArrayIndexOutOfBoundsException
িকভােব িনজ এে পশান িলখেবা
সারসংে প

আমরা একিট া াম িলিখ যার একিট নরমাল া থােক, তেব কান কারেণ যিদ এই া ব াহত হয় তাহেল জাভা
রানটাইম একিট ইেভ ফায়ার কের, এেক এে পশান বলা হয়।

সহজ কথায় এে পশন হে এক ধরেণর ইরর যা িকনা া াম চলাকালীন সমেয় দখা িদেত পাের ।

একিট উদাহরণ দখা যাক-

public class Main {

public static void main(String[] args) {


int a = 1;
int b = 0;

int result = divide(a, b); // ​1


System.out.println("Result: " + result); // 2
}

public static int divide(int a, int b) {


return a / b;
}
}

১. এখােন divide() মথডিটেত a এবং b আ েম পাস করা হেল মথডিট থম আ েম েক ি তীয় আ েম


িদেয় ভাগ কের ফলাফল result ভ ািরেয়বল-িটেত এসাইন করেব।

২. এখােন result এর মান ি করা হেব।

আমরা যিদ এই া ামিট রান কির তাহেল console এ িনেচর আউটপুট-িট পােবা-

পাঠ ৬: জাভা এে পশান হ াে িলং 72


বাংলায় জাভা

Exception in thread "main" java.lang.ArithmeticException: / by zero


at com.bazlur.exception.Main.divide(Main.java:18)
at com.bazlur.exception.Main.main(Main.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

এই আউটপুট থেক আমরা বুঝেত পাির য, আমােদর া ামিট- ত একিট সমস া হেয়েছ এবং া ামিট এখােনই
থেম গেছ, System.out.println("Result: " + result); এই লাইনিট এি িকউট হয় িন।

এবার আমরা িনেচর া ামিট রান কির-

public class Main {

public static void main(String[] args) {


int a = 1;
int b = 0;

int result = 0;
try {
result = divide(a, b);
} catch (ArithmeticException e) {
System.out.println("You can't divide " + a + " by " + b);
}

System.out.println("Result: " + result);


}

public static int divide(int a, int b) {


return a / b;
}
}

এবার console এ িনেচর আউটপুটিট দখেবা -

You can't divide 1 by 0

Result: 0

এবার ল ক ন। া ামিট িক থেম যাই িন, বরং ণ িদেয় য কান সংখ ােক ভাগ করা যােব না, তার জন
একিট মেসস ি কেরেছ এবং শষ পয েত কিট লাইন এি িকউট হেয়েছ।

পাঠ ৬: জাভা এে পশান হ াে িলং 73


বাংলায় জাভা

এই া ামিটেত আমরা নতুন িকওয়াড ব বহার কেরিছ, স েলা হেলা- try, catch এবং এ েলা িদেয় আমােদর য
কাড কিটেত ইরর হওয়ার স বনা িছল, সই অংগটুকুেক wrap কেরিছ। এেত কের এই কাড ক-এ যিদ কান
ধরেণর ইরর হয় তাহেল া ামিট catch ক-এ চেল যায়, এবং এই ক এর ই াকশন েলা এি িকউট কের
এরপর িনেচর কাড ক এ চেল যায়।

আর এই ি য়ােক আমরা এে পশন হ াে িলং বিল, অথাৎ া াম এর কান অংেশ যিদ কান ধরেণর এে পশন
বা ইরর হয় তাহেল আমােদর া ামিট যােত ব না হয় যায় বরং সইসব অব ায় ইউজারেক যােত কের অথপূণ
মেসস দওয়ােক এে পশন হ াে িলং বেল।

The try Block

যিদ কান কাড ক -এ যিদ ইরর হওয়ার স বনা থােক তাহেল আমরা সই কড ক- ক try ক িদেয় ইনে াজ
করেত হয়। উদাহরণ-

try {
code
}
catch and finally blocks . . .

এই try ক এর মােঝ এক বা একািধক লাইন কাড থাকেত পাের। catch এবং finally ক পেরর সকশেন
দখােনা হেব।

একিট উদাহরণ দখা যাক-

private List<Integer> list;


private static final int SIZE = 10;

public void writeList() {


PrintWriter out = null;
try {
System.out.println("Entered try statement");
out = new PrintWriter(new FileWriter("file.txt"));
for (int i = 0; i < SIZE; i++) {
out.write(i);
}

} catch (IOException e) {
}
}

উপেরর া ামিটেত একিট মথড আেছ - writeList() যা িকনা একিট ফাইল এ একিট িল থেক ভ ালু পেড় তা
রাইট কের। এই মথড-িট ত একািধক এে পশান বা ইরর হেত পাের। যমন -
out = new PrintWriter(new FileWriter("file.txt")); এই লাইনিটেত আমরা একিট ফাইল অেপন করার

চ া কেরিছ। িক এই ফাইলিট িসে েম নাও থাকেত পাের, িকংবা থাকেলও সিট অেপন করা যাে না ইত ািদ।
সে ে আমাদের িসে ম IOException করেব এবং া ামিট ব হেয় যােব। এছাড়াও আমরা একিট ফর

পাঠ ৬: জাভা এে পশান হ াে িলং 74


বাংলায় জাভা

লুপ ব বহার কেরিছ, এে ে ফাইল এ রাইট করার সময়ও ইরর বা এে পশন হেত পাের। তাই এইসব ইরর বা
এে পশন ক হ াে ল করার জেন আমরা কাড কিটেক try ক এর ভতের রেখিছ। এখন া ামিট চলার
সময় যিদ কান ইরর বা একেসপশন হয় তাহেল া াম এি িকশান সখান থেকই catch ক এ চেল যােব।

The catch Blocks

try ক এর সােথই catch ক িলখেত হয়। তেব আমরা একিট try েকর সােথ একািধক catch ক িলখেত পাির।
উদাহরণ-

try {

} catch (ExceptionType name) {


// catch blog # 1
} catch (ExceptionType name) {
// catch blog # 1
}

catch িকওয়াড এর সােথ প ােরে িসস এর মােঝ আমরা আ েম িদেত হয় যা িক টাইপ এে পশন হ াে ল করা
হে তা িনেদশ কের। এখােন ExceptionType একিট স হা ার । এখােন য কান াস যা িকনা Throwable
াস ক ইনেহিরট কের তা বসেত পাের।

try ক এর কান কাড-এ যিদ কান এরর বা এি েসপশন হয় তাহেল ােমর এি িকউশান পেয় catch েক
চেল আেস এবং ধুমা তখিন catch ক এর কাড এি িকউট হয়।

যিদ একািধক catch ক থােক তাহেল এে পশন এর টাইপ অনুযায়ী catch ক িসেলকেটড হয়।

try {

} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}

এখােন try েক যিদ IndexOutOfBoundsException হয় তাহেল থম catch কিট এি িকউট হেব । আর


যিদ IOException হয় তাহেল পেরর catch কিট এি িকউট হেব।

জাভা ৭ এবং পরবিত ভাসন েলার জেন একিট নতুন িফচার আেছ যােত কের একিট catch ক িদেয়
অেনক েলা এে পশন হ াে ল করা যায়। উহারহণ -

catch (IOException|SQLException ex) {


logger.log(ex);
}

পাঠ ৬: জাভা এে পশান হ াে িলং 75


বাংলায় জাভা

এখােন catch জ-এ একািধক এে পশান একিট ভািটেকল বার (|) িদেয় আলাদা করা হয়।

The finally Block

উপেরর উদাহরণ েলা থেক দখলাম য , try ক এর কাড -এ এে েসপশন হেল ধুমা catch েকর
কাড েলা এি িকউট হয়। তেব আমােদর এমন কান িসচুেয়শন থাকেত পাের যখন আমরা চাই ইরর হাক বা না
হাক, একিট কাড ক আমরা সবসমই এি িকউট করেত চাই , তাহেল আমরা finally ব বহার কির।

public void openFile() {


FileReader reader = null;
try {
reader = new FileReader("someFile");
int i = 0;
while (i != -1) {
i = reader.read();
System.out.println((char) i);
}
} catch (IOException e) {
//do something clever with the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//do something clever with the exception
}
}
System.out.println("--- File End ---");
}
}

উপেরর া ামিট ত আমরা একিট ফাইল অেপন করিছ এবং িকছু কাজ কেরিছ। এজেন একিট FileReader
ােসর অবেজ তির কেরিছ। আমরা চাই এই FileReader অবেজি কাজ শষ হেয় গেল াজ করেত। এে ে
আমরা finally ক এ আমােদর একই ািজং এর কাডিট িলেখিছ। এেত কের এই সুিবধা হে য, আমােদর এই াই
ক-এর কাড কাজ ক ক আর না ক ক, শেষ আমােদর FileReader এর অবেজ িট াজ হেয় যাে ।

অথাৎ আমরা ধুমাে তখিন ফাইনালী ক ব বহার কির যখন আমরা না ম াটার য়াট, একিট কাড ক সবসময়ই
এি কউট করেত চাই।

Identifying Exception Point

try , catch এব finally ক ব াবহার কের এে পশন হ াে ল করার সময় আমােদর য িবষয়িটর উপর
িবেশষ িদেত হেব সিট হল িনিদ পেয়ে ই কবল try এবং catch ব াবহার করা । িঠক যখােন এে পশন
ঘটেব বা ঘটার স াবনা থাকেব সখােনই কবল আমােদর পার এে পশন হ াে িলং থাকা জ রী । অন থায় কাড
রান করেব িক কাি ত ফলাফল পাওয়া যােবনা ।

পাঠ ৬: জাভা এে পশান হ াে িলং 76


বাংলায় জাভা

উদাহরন িহসােব আমরা মেন কির আমােদর একিট মথড িলখেত বলা হল যিটেত একিট ি ং অ াের পাস করা হেব
এবং সই অ াের এর মাঝ থেক য ি ং লা ইি জার না ার িরে েজ কের স লার যাগফল িরটান করেত হেব ।
আমরা যিদ কাডিট এভােব িলিখঃ

public class Main {

public static void main(String[] args) {

String[] strings = {"1", "2", "3", "4", "5", "6"};


System.out.println(new Main().getSum(strings));
}

public int getSum(String[] strings){

int result = 0;

try {

for (String string : strings) {


result += (Integer.valueOf(string));
}
} catch (NumberFormatException e) {

System.err.println(e);
}

return result;
}
}

উপেরর কাডিট 21 সংখ ািট ি করেব যিট getSum নামক মথিট িরটান করেছ । িক আমরা যিদ ইনপুট
ি ংিট একটু মিডফাই কের String[] strings = {"1", "2", "3", "four", "5", "6"}; কের দই তাহেল থেম ি
করেব 6 এবং তারপর ি করেব java.lang.NumberFormatException: For input string: "four । িক
বেলম অনুযায়ী ি করা কথা িছল 17 । কারন four বাদ িদেল বাকী যত লা ি ং ইি জার না ার িরে েজ কের
স লার যাগফল । সে ে আমরা যিদ কাডিট একটু মিডফাই কের িঠক যখােন এে পশন হওয়া স ব সখােনই
try কিট ব াবহার করতাম তাহেল এই সমস া থেক মুি পাওয়া স ব িছল । কাডিট যিদ এভােব কিরঃ

পাঠ ৬: জাভা এে পশান হ াে িলং 77


বাংলায় জাভা

public class Main {

public static void main(String[] args) {

String[] strings = {"1", "2", "3", "four", "5", "6"};


System.out.println(new Main().getSum(strings));
}

public int getSum(String[] strings) {

int result = 0;

for (String string : strings) {

try {

result += (Integer.valueOf(string));
} catch (NumberFormatException e) {

System.err.println(e);
}
}

return result;
}
}

এবার যিদ আমরা String[] strings = {"1", "2", "3", "four", "5", "6"}; এই ি ংিট ইনপুট আকাের দই তাহেল
দখেবা একটা এে পশন িঠকই া করেছ তেব রজা িহসােব আমরা যিট চেয়িছলাম সিটও ি করেছ ।
এভােব আমরা িঠক িনিদ পেয়ে এে পশন িডেট কের হ াে ল করেত পাির । এেত কের ওভারঅল কােডর
পাফরেম যমন বাড়েব তমন কাড অেনক বিশ বাগ ী ও হেব ।

Checked or Unchecked Exceptions

জাভােত সব এে পশান েলা Throwable াসেক ইনেহিরট কের তির। অথাৎ এে পশান হাইআরিক এর একদপ
উপের এই Throwable াস এর অ ান। এর িঠক িনেচই দুিট সাব াস হেল - Exception এবং অন িট হেলা
RuntimeException । এবং এই দুিট াস দুিট আলাদা ণীিবভােগর সূচনা কেরেছ। তেব এই ণীিবভােগর
আেরকিট শাখা আেছ, সিট হেলা - Error তেব এ েলা া াম চলাকািলন সমেয় সাধারণত ধরা হয় না। এ েলা
মূলত জাভা রানটাইম িসে ম িনেজ থেক হ াে ল কের এবং এিট আমােদর এই বইেয়র আেলাচনার বাইের।

পাঠ ৬: জাভা এে পশান হ াে িলং 78


বাংলায় জাভা

public class ExceptionDemo5 {

public void fetchData(String url) {


try {
String data = fetchDataFromUrl(url);
} catch (CheckedException e) {
e.printStackTrace();
}
}

public String fetchDataFromUrl(String url) throws CheckedException {


if (url == null) {
throw new CheckedException("Url Not found");
}

String data = null;


//read lots of data over HTTP and return
//it as a String instance.

return data;
}
}

পাঠ ৬: জাভা এে পশান হ াে িলং 79


বাংলায় জাভা

public class ExceptionDemo6 {


public void fetchData(String url) {
String data = fetchDataFromUrl(url);
}

public String fetchDataFromUrl(String url) {


if (url == null) {
throw new UncheckedException("Url Not found");
}

String data = null;


//read lots of data over HTTP and return
//it as a String instance.

return data;
}
}

public class CheckedException extends Exception {


public CheckedException(String message) {
super(message);
}
}

public class UncheckedException extends RuntimeException {


public UncheckedException(String message) {
super(message);
}
}

পাঠ ৬: জাভা এে পশান হ াে িলং 80


বাংলায় জাভা

এে পশান হ াে িলং: চলুন আরও একটু গভীরভােব পযেব ণ


কির
আমরা ইিতমেধ জেন ফেলিছ য, একটা িসে ম এ নানা রকম সমস া হেত পাের। একিট া াম চলেত িগেয়
হঠাৎ কের থেম যেত পাের িকংবা াশ করেত পাের। িক আমরা যখন একিট া াম িলিখ, আমরা অবশ ই চাই
া ামিট ভাল ভােব চলুক কান রকম সমস া ছাড়ায়। িক সমস া হেতই পাের এবং এর জেন আমােদর ত হেয়
থাকাটা জ রী।

েত একিট টাম স েক পিরচয় কিরেয় িদই - Fault-tolerant

ফ টলাের যার বাংলা হেত পাের সমস া সিহ ু । আমরা যেহতু জািন য আমােদর া াম-এ সমস া হেত পাের,
এবং আমরা চাই য সখন সমস ািট হেব- তখনও া ামিট ব না হেয় অন কান ভােব চলেত থােক। আমরা যিদ
এমন ভােব া ামিট িলখেত পাির তাহেল সই া ামেক ফ টলাের া াম িলখেবা।

মেন করা যাক – আমােদর দেশ একটা সময় িত ঘ ায় একবার কের চেল পাওয়ার যত। এখন যিদ কান িসে ম
তির কির যা পাওয়ার এর উপর িনভরশীল, তাহেল যাখন পাওয়ার থাকেব না, তখন িসি মিট কাজ করেব না।
এজেন আমরা িবক ব ব া িহেসেব জনােরটর রাখেত পাির, যােত কের যখন মইন পাওয়ার লাইন থাকেব না, তখন
জনােরটেরর মাধ েম আমােদর িসে মিট চলেত থাকেব। এই িসে মিটেক আমরা তখন ফ টলাের িসে ম
বলেবা।

তা আমােদর এই টিপক এর উে শ হে আমরা িকভােব ফ টলাের জাভা া াম িলখেত পাির।

েত আমরা একিট া াম দিখ যােত একেসপশান হ াে িলং ব বহার করা হয় িন।

িনেচর া ামিট রান ক ন-

public class DivideByZeroNoExceptionHandling {


public static int divide(int a, int b) {
return a / b;
}

public static void main(String[] args) {


Scanner scanner = new Scanner(System.in);

System.out.println("Please enter an integer: ");


int a = scanner.nextInt();
System.out.println("Please enter another integer: ");
int b = scanner.nextInt();

int result = divide(a, b);

System.out.println(String.format("Result: %d/%d = %d", a, b, result));


}

পাঠ ৬.১: াজার লুক 81


বাংলায় জাভা

Take 1

Please enter an integer:


100
Please enter another integer:
45
Result: 100/45 = 2

Take# 2

Please enter an integer:


100
Please enter another integer:
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.bazlur.tips.DivideByZeroNoExceptionHandling.divide(DivideByZeroNoExceptionHandling.java:11
at com.bazlur.tips.DivideByZeroNoExceptionHandling.main(DivideByZeroNoExceptionHandling.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
`

Take # 3

Please enter an integer:


100
Please enter another integer:
bazlur
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.bazlur.tips.DivideByZeroNoExceptionHandling.main(DivideByZeroNoExceptionHandling.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
`

Take #1 এ া ামিট খুব ভাল ভােব রান করেছ।


Take #2 ত ইনপুট িহেসেব শূণ দওয়ােত আমােদর া ামিট িঠকভােব কাজ কেরিন বরং অেনক েলা লাইন
ি কেরেছ।

পাঠ ৬.১: াজার লুক 82


বাংলায় জাভা

Take #3 ত ইনপুন িহেসেব ইি জার এর পিরবেত ি ং দওয়ায় া ামিট কাজ কের িন, বরং অেনক েলা
লাইন ি কেরেছ যা িকনা বলেছ ইনপুিট সিঠক হয় িন। এই লাইন েলার

পাঠ ৬.১: াজার লুক 83


বাংলায় জাভা

পাঠ ৭: ি ং অপােরশান
ি ং তির করা
ি ং ল এবং ি ং অপােরশান
ক ােরকটার এ াকশন
ি ং কমেপিরঝন
ি ং সািচং এবং মিডফাইং
ডাটা কনভারশন
ি ং বাফার
ি ং িবউ ার
সারসংে প

জাভােত ি ং ব াপকভােব ব ব ত একিট অবেজ । ি ং হে কত েলা ক াের ার-এর িসকুেয় বা অনু ম।


ি ং তির করা খুব সহজ। যমন –

String greeting = "Hello world!";

এখােন "Hello world!" হে ি ং িলটােরল যা অকেন েলা ক াের ার উ ৃ িত িচে র (“”) মােঝ িলখেত হয়।

জাভা কােডর মেধ কান ি ং িলটােরল থাকেল ক াইলার সিটেক String অবেজ –এ পিরণত কের যার ভ ালু
হয় উ ৃ িত িচে র (“”) মােঝর ক াের ার েলা ।

তেব অন ান অবেজ এর মেতা String ও new িকওয়াড এবং ক াকটর ব বহার কের তির করেত পাির।
String ােসর ১৩ িট কন াকটর আেছ। সুতরাং আমরা আরও ১৩ িট উপােয় ি ং তির করেত পাির।

উদাহরণ –

String str = new String("Hello world!");


char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);

String Length

String ােসর মেধ length() মথড থােক যা একিট ি ং এর মেধ কত েলা ক াের ার থােক তার সংখ া িরটাণ
কের। String loremIpsum ="Lorem ipsum dolor sit amet.";

int len = loremIpsum.length();

ি ং Concatenating

পাঠ ৭: ি ং অপােরশান 84
বাংলায় জাভা

আমরা বশ কেয়কিট উপােয় ি ং কনেকট করেত পাির -

string1.concat(string2); // concat()áÌÿ ÍÊØÚÏ ³áÏ


"My name is ".concat("Rumplestiltskin"); // ÛѽÚáÏÑ ÍÊØÚÏ ³áÏ
"Hello," + " world" + "!" // + ¤ÈÚáÏ½Ï ÍÊØÚÏ ³áÏ

ি ং এর ভতর বশ িকছু মথড আৈছ য েলা ব বহার কের আমরা ি ং মনুপুেলট করেত পাির।

charAt() – এই মথড ব বহার কের আমরা কান ইনেড এর ক াের ার আলাদা করেত পাির। উদাহরণ-

String hello = "Hello";


char getCharOfIndex2 = hello.charAt(2);

substring() – এই মথড ব বহার কের আমরা একিট ি ং থেক এর সাব-ি ং বা কান িনিদ অংশ আলাদা করেত
পাির। উদাহরণ-

String str1 = "Hello world!";


String hello =str1.substring(0,5);

toLowerCase() – লাওয়ারেকস লটাের কনভাট করার জেন এই মথড ব বহার কির। toUpperCase()
আপারেকস লটাের কনভাট করার জেন এই মথড ব বহার কির।

উদাহরণ –

String hello = "Hello";


hello.toUpperCase(); // HELLO
hello.toLowerCase(); // hello

িনেচ আরও িকছু উদহরণ দখােনা হল-

String str2 = "Hello world!";


int indexOfHaitch = str2.indexOf("H");

িবেশষভােব ল ণীয়
জাভােত ি ং াস immutable, এর মােন হে , একবার কান ি ং অবেজ তির করেল তােক আর পিরবতন
করা যােব না। আমরা অেনক াস িলিখ, তারপর এর মােঝ িবিভ ভ ািরেয়বল রািখ, অবেজ তির করার পর সই
অবেজ র এর ভতেরর ভ ািরেয়বল েলা িবিভ সময় পিরবততন করেত পাির। িক ি ং এর ে এিট স ব
নয়। অথাৎ আমরা যিদ কান একিট ভ ালু িদেয় একবার একিট ি ং অবেজ তির কির তাহেল সিট আর পিরবতন
করা যােব না।

িক আমরা অেনকসময়ই ি ং কনেকট কির, সে ে যা হয়, মেন কির-

পাঠ ৭: ি ং অপােরশান 85
বাংলায় জাভা

String str = "Hello ";


str = str + "world";

এখােন যিদও মেন হে আমরা ি ং এর ভ ালু পিরবতন কের ফেলিছ। িক আসেল যা হে তা হেলা, আমরা থেম
একিট অবেজ তির কেরিছ, তারপর সই অেবজ এর ভ ালু এবং নতুন একিট ভ ালু িনেয় নতুন একিট অবেজ
তির কেরিছ, এবং যা str এখন নতন সই অবেজ েক রফার করেছ। আেগর অবেজ িটেক গােবজ কােল র িনেয়
চেল যােব।

এখন হে , কন এই immutability দরকার হয়।

ি ং পুল (Stirng Pool) স েক হয়েতা অেনেকই জািন। এিট একিট জাভা িহপ এর একিট শাল এিরয়া ।
আমােদর যিদ নতুন একিট ি ং তির করেত হয়, সই ি ং যিদ আেগ থেকই ি ং পুল এ থেক থােক, তাহেল নতুন
কের আর তির না কের আেগর অবেজ িটর রফাের দওয়া হয়। এেত কের আমােদর মমির ু টি অেনক কেম
যাে ।

String string1 = "abcd";


String string2 = "abcd";
`

আমরা যিদ এই দুিট লাইন িলিখ, তাহেল আসেল জাভা িহপ এ একিট ি ং অবেজ -ই থাকেব, দুিট তির হেব না। যিদ
ি ং immutable না হয়, তাহেল একিট ি ং যিদ পিরবতন কির, তাহেল আসেল অন ান রফাের েলাও পিরবতন
হেয় যােব।

এছাড়াও, আমরা জািন য ি ং এর hashcode খুব বিশ ব বহার করা হয়। যমন HashMap। ি ং
immutable হওয়ায় এটা গ ারাি ড য, সবসময় hashcode এক-ই হেব, সুতরাং আমরা িতবার hashcode
ক ালকুেলট না কের িনিধ ায় ক ািশং করেত পাির।

আমরা ি ং প ারািমটার িহেসব অেনক বিশ ব বহার কের থািক, যমন, নটওয়াক কােনকশান, ফাইল অেপিনং
ইত ািদর ে । সুতরাং এিট immutable না হেল পিরবতন কের ফলা স ব যা িকনা একিট িসিরয়াস রকম
িসিকউিরিট ড হেত পাের। িক যেহতু ি ং immutable, সুতরাং সই স বনা নই।

তাছাড়া ি ং immutable হওয়ায় এিট ন াচারািল ড সইফ, এবং াধীনভােব য কন ড একেসস কের পাের
আমােদরেক ক কের এর ড সইফিট িনেয় িচ া করেত হয় না।

চলেব ......

পাঠ ৭: ি ং অপােরশান 86
বাংলায় জাভা

পাঠ ৮: জেনিরকস
জেনিরকস ইন জাভা (Generics in Java)
আমরা জাভা-এর টাইপ িসে ম স েক জািন। আমরা জািন জাভােত কান া াম িলখেত হেল আমােদর ক
টাইপ বেল িদেত হয় । যমন আমরা যিদ একিট মথড িলিখ তাহেল মথডিট িক টাইপ প ারািমটার এে করেব তা
বেল িদেত হয়।

তেব জাভােত একিট চমৎকার িফচার আেছ যােত কের আমরা অেনক সময় টাইপ না বেল িদেয়ই কাড িলখেত
পাির। আমরা জেনিরকস করার আেগ একিট পূণ তথ জেন িনই- জাভা া ািমং ল াং েয়জ এ সব
াস java.lang.Object াসিটেক ইনেহিরট কের। আমরা এিট িনেয় অন কান চ া াের আেলাচনা করেবা, তেব
এখন আমােদর ধু এই তথ টুকু মেন রাখেলই চলেব।

সহজ কথায় যিদ বিল, তাহেল জেনিরকস িদেয় আমরা যখন অবেজ তির করেবা তখন টাইপ প ািরিমটারাইজ
করেত পাির। অথাৎ আমরা যখন new অপােরটর িদেয় অবেজ তির করেবা তখন আসেল িস া নেবা এিটর
টাইপ িক হেব। এর আেগ আমরা এমন ভােব একটা াস বা মথড িলেখ ফলেত পাির যােত কের এিট য কান
টাইপ এর জেন কাজ কের।

বরং একটা উদাহরণ দখা যাক-

পাঠ ৮: জেনিরকস 87
বাংলায় জাভা

//¬³Û½ Û× ÈÑ Ú× , ¬´ÚáÆ T Øá ¹ ½Ú¦È ÍÚÏÚÛ̽ÚÏ ÍÚ ¤ÊẠâÂÛÏ ³ÏÚÏ ×ÌÎ ÛÏáÎÑ ½Ú¦È ÛÄáÎ ÛÏá Ñ× ØáÊ
public class Generic<T> {
T obj;
// ¬³½Ú ½Ú¦È ÍÚÛÏÎÊÑ Û¿á ÎÚÏ ³ÏÚ ØáÑÚ

// ³Æ Ú³½Ï – áÍ ¬³Û½ ÛÏáÎÑ ¤ÊẠ¥µÝ áÌ ½ ÛØá×áÊ áÆÎ


public Generic(T obj) {
this.obj = obj;
}

// ¤ÊẠ۽ ¬³á×× ³ÏÚÏ ºá Í ¬³Û½ áÌÿ


public T getObj() {
return obj;
}

// ÏÚƽڦáÌ ¤ÊẠ-¬Ï ½Ú¦È ¥×áÑ Û³ , ÂÚ Û ½ ³áÏ áÄÛ´


public void showType() {
System.out.println("Type of T is: " + obj.getClass().getName());
}

public static void main(String[] args) {

// ¬³Û½ ¦Û ½ºÚÏ ¬Ï áÏÉÚáÏ ×


Generic<Integer> iObj;

// ¤ÊẠâÂÛÏ ³ÛÏ ¬Ê¢ iObj áÏÉÚáÏ × ¬ ¬×Ú¦Æ ³ÛÏ ¬Ê¢ ³Æ Ú³½Ï ¥µÝ áÌ ½ ÛØá×áÊ 88 ÈÚ× ³ÛÏ
iObj = new Generic<Integer>(88);

// ÏÚƽڦÌ-¬ ÂÚØáÑ áºáÆÛϳ Ú×Û½á T obj ¬³Û½ ¦Û ½ºÚÏ ØáÎ ÍÚ°ÎÚÏ ³ÃÚ, Û ½ ³áÏ áÄ´Ú ÍÚ³
iObj.showType();

int v = iObj.getObj();
// ¦Û ½ºÚÏ ÍÚÑÝÛ½ ¬Ï ÍÚÑÝ ¬³á×× ³³áÏ v á ÏÚ´Ú ØÑ

System.out.println("value: " + v);


// Û ½ ³ÛÏ, áÍ´Ú ÍÚ³, ¥ÌÏÚ ¬Ï ÍÚÑÝ Û¾³ ¾Ú³ ÌáÂÚ ÈÚ°ÎÚ ÍÚÎ Û³ÆÚ

//¬ËÚáÊ ¥ÌÏÚ ¬³Û½ Û ¢ ½Ú¦È ÛÄáΰ ÈÏÜ Ú ³Ïá ÈÚÛÏ।


Generic<String> strOb = new Generic<String>("This is a Generics Test");
strOb.showType();
String str = strOb.getObj();
System.out.println("value: " + str);
}
}
`

পাঠ ৮: জেনিরকস 88
বাংলায় জাভা

এই া ামিট যিদ রান করা হয়, তাহেল িনেচর আউটপুট েলা দখা যােব -

Type of T is: java.lang.Integer value: 88 Type of T is: java.lang.String value: This is a


Generics Test

আউটপুট েলা থেক বুঝা যাে য , আমােদর া ামিট সিঠক ভােব কাজ করেছ এবং একিট জেনিরক ােস
একিট ইি জার এবং একিট ি ং প ারািমটারাইজড করেত পেরিছ।

এভােব আমরা আরও অন ান টাইপ-ও প ারািমটারাইজড কের পাির।

এবার আরও ভালভােব এই া ামিট খয়াল করা যাক-

public class Generic<T> {


}
`

এখােন T হে টাইপ প ারািমটার। এিট মূলত একিট স হা ার।

ল ক ন – এর T িক <> এর মেধ থােক।

আমরা সাধারণত যভােব ভ ািরেয়বল িডে য়ার কির, সভােবই আমরা জেনির -এ ভ ািরেয়বল িডে য়ার করেত
পাির। এর জেন আলাদা কান িনয়ম নই।

T obj;

এখােন T অবেজ তির করার সময় একিট িরেয়ল অবেজ অথাৎ আমরা য অবেজ প ািরিমটারাইড করেবা তা
ারা িত ািপত(replaced) হেব ।

আমরা জািন য জাভা একিট ািটক টাইপ অথাৎ টাইপ সইফ ল াং েয়জ। অথাৎ জাভা কাড ক াইল করার
সময় এর টাইপ ইনফরেমশন িঠক ঠাক আেছ িকনা তা চক কের নয়।

অথাৎ -

Generic<Integer> iObj;

এখােন iObj একিট ইি জার প ারিমটাইরজড অবেজ রফাের ।

iObj = new Generic<Double>(88.0); // Error!


`

এখন অবেজ তির করার সময় যিদ ডাবল প ারিমটাইরজড কির এবং iObj ত এসাইন কির, তাহেল

পাঠ ৮: জেনিরকস 89
বাংলায় জাভা

Error:(24, 16) java: incompatible types: Generic<java.lang.Double> cannot be converted to Generic<jav


`

ক াইল করার সময় উপেরর ইররিট দখেত পােবা।

জেনিরকস ধুমা অজেজ িনেয় কাজ কের-


আমারা জািন য, জাভা দুই ধরেণর টাইপ সােপাট কের- PrimitiveType এবং ReferenceType । জেনিরকস
ধুমা ReferenceType অথাৎ ধু মা অবেজ িনেয় কাজ র।

তাই-

Generic<int> intObj = new Generic<int>(50);


`

এই াটেম িট ভ ািলড নয়। অথাৎ ি িমিটভ টাই এর ে জেনিরকস কাজ করেব না।

জেনিরক াস এর িসনট া -

class class-name<type-param-list > {}


`

জেনিরক াস ইনসেটনিসেয়ট করার িসনেট -

class-name<type-arg-list > var-name = new class-name<type-arg-list >(cons-arg-list);


`

আমরা চাইেল একািধক জেনিরক টাইপ প ারিমটাইরজড করেত পাির।

এবার তাহেল দুিট টাইপ প ারািমটার িনেয় একিট উদাহরণ দখা যাক-

পাঠ ৮: জেনিরকস 90
বাংলায় জাভা

public class Tuple<X, Y> {


private X x;
private Y y;

public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}

public X getX() {
return x;
}

public Y getY() {
return y;
}

public void showTypes() {


System.out.println("Type of T is " +
x.getClass().getName() + " and Value: " + x);
System.out.println("Type of V is " +
y.getClass().getName() + " and Value: " + y);
}

public static void main(String[] args) {


Tuple<String, String> tuple = new Tuple<String, String>("Hello", "world");
tuple.showTypes();

Tuple<String, Integer> person = new Tuple<>("Rahim", 45);


person.showTypes();
}
}

এই া ামিট রান করেল িনেচর আউটপুট-িট পাওয়া যােব –

Type of T is java.lang.String and Value: Hello Type of V is java.lang.String and Value:


world Type of T is java.lang.String and Value: Rahim Type of V is java.lang.Integer and
Value: 45

একিট টাপেলর মেধ আমরা চাইেল আেরকিট টাপল রােখ পাির - িনেচর উদাহরণিট চমৎকার-

Tuple<String, Tuple<Integer, Integer>> tupleInsideTuple = new Tuple<String, Tuple<Integer, Intege

তেব আমরা যিদ জাভা ৭ অথবা ৮ ব বহার কির তাহেল উপেরর লাইনিট সংি ভােব িলখেত পাির –

পাঠ ৮: জেনিরকস 91
বাংলায় জাভা

Tuple<String, Tuple<Integer, Integer>> tupleInsideTuple = new Tuple<>("Tuple", new


`

ºÚËÚ ø এ একিট নতুন অপােরটর সংযু হেয়েছ যােক বলা হয় ডায়ম অপােরটর। এিট ব বহার কের আমরা
জেনরকস এ verbosity িকছু টা কমােনা যায়। অথাৎ

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

এই াটেম -িট অেনকটাই বড়। এিট আমরা এভােব িলখেত পাির –

Map<String, List<String>> anagrams = new HashMap<>();

অথাৎ জেনিরকস লখার সময় বাম পােশ টাইপ প ারািমটার ইনফরেমশন েলা িলখেল ডান পােশ িলখেত হয় না ।
এিট অেটাম ািটক ালী ইনফার করেত পাের।

Bounded Types
আমরা উপের দুিট উদাহরণ দেখিছ য েলােত আমরা য কান ধরেণর টাইপ প ারািমটারাইউজড করেত পাির। িক
কখেনা কখেনা আমােদর টাইপ restrict করেত হয়। যমন- আমরা একিট জেনিরক াস িলখেত চাই যা িকনা একিট
এের- ত রাখা কত েলা না ার-এর গড়(average) িরটান করেব এবং আমরা চাই, এই এের ত য কান ধরেণর
না ার থাকেত পাের, যমন- ইি জার, ািটং পেয় , ডাবল ইত ািদ। আমরা টাইপ প ারািমটার িদেয় বেল িদেত চাই
কখন কানটা থাকেব। উদারহরণ দখা যাক-

public class Stats<T> {


T[] nums;

public Stats(T[] nums) {


this.nums = nums;
}

// Return type double in all cases.


double average() {
double sum = 0.0;
for (T num : nums) {
sum += num.doubleValue(); // Error!!!
}

return sum / nums.length;


}
}
`

পাঠ ৮: জেনিরকস 92
বাংলায় জাভা

এভােরজ ক ালকুেলট করার জন আমােদর এভােরজ মথড সবসময় এের থেক ডাবল ভ ালু এে েপ কের। িক
আমােদর এের-এর টাইপ যেহতু য কান রকম হেত পাের, সুতরাং সব অবেজ থেক ডাবল ভ ালু পাওয়ার উপায়
নই।

ইনফ া এই াসিট িক ক াইল হেব না।

এই াসিটেত আমরা একিট restriction এড করেত পাির যােত কের এই টাইপ প ারািমটার ধুমা না ার(ইি জার,
ািটং পেয় ,ডাবল) হেব, নতুবা এিট কাজ করেব না।

আমরা জািন য সব িনউেমিরক অবেজ েলার সুপার াস হে Number . এবং Number এ doubleValue()
মথড িডফাইন করা আেছ। সুতরাং আমােদর াসিটেক একটু পিরবতন কির।

public class Stats<T extends Number> {


T[] nums;

public Stats(T[] nums) {


this.nums = nums;
}

// Return type double in all cases.


double average() {
double sum = 0.0;
for (T num : nums) {
sum += num.doubleValue(); // Error!!!
}

return sum / nums.length;


}
}

একটু ল ক ন-

public class Stats<T extends Number>{


}

আমরা াস ডিফেনশেন আমােদর টাইপ সেহা ার T না ারেক extend কের। এিট আমােদর টাইপ প ারািমটার
পাস করেত restrict কের । অথাৎ আমরা ধু মা সসব টাইপ পাস করেত পারেবা যারা Number এর সাব
টাইপ।

সুতরাং আমােদর এই Stats াস এখন Integer , Double , Float , Long , Short , BigInteger ,
BigDecimal , Byte ইত ািদ অবেজ এর জেন কাজ করেব।

সুতরাং দখা যাে য, জেনিরকস এর সুিবধা ব বহার কের আমরা এই াট াসিট আলাদা আলাদা কের
অেনক েলা না িলেখ একিট িদেয়ই কাজ কের ফলা স ব হল।

Wildcard Arguments

পাঠ ৮: জেনিরকস 93
বাংলায় জাভা

িনেচর উদাহরণিট ল কির-

ArrayList<Object> lst = new ArrayList<String>();

এিট যিদ ক াইল করেত চ া কির, তাহেল ক াইলার incompatible types ইরর দেব। িক আমরা জািন য,
সকল অবেজ এর সুপার াস Object । তাছাড়া আমরা polymorphism থেক জািন য
আমরা সাব ােসর রফাের ক সুপার ােসর রফাের এ এসাইন করেত পাির। সুতরাং উপেরর াটেম -িট কাজ
করার কথা।

িনেচর উদাহরণ দুিট ল কির -

List<String> strLst = new ArrayList<String>(); // 1


List<Object> objLst = strList; // 2 - Compilation Error
`

২ না ার লাইনিট কাজ করেছ না । যিদও বা এিট কাজ কের এবং আিব াির কান একিট অবেজ যিদ objLst এড
করা হয় তাহেল িক strList করাে ড হেয় যােব এবং সিট আর ি ং থাকেব না।

ধরা যাক, আমরা একটা print মথড িলখেত চাই যা িকনা একিট িল এর ইিলেম েলা ি কের।

public static void print(List<Object> lst) { // accept List of Objects only,


// not List of subclasses of object
for (Object o : lst) {
System.out.println(o);
}
}

এিট িক ধুমা List<Object> একেস করেব , List<String> অথবা List<Integer> করেব না।

উদাহরণ-

public static void main(String[] args) {


List<Object> objLst = new ArrayList<Object>();
objLst.add(new Integer(55));
printList(objLst); // matches

List<String> strLst = new ArrayList<String>();


strLst.add("one");
printList(strLst); // compilation error
}

এই সমস া দূর করার জেন জাভােত একিট একিট অপােরটর ব বহার করা হয় – যার নাম wildcard (?)।

আমরা যিদ আমােদর print() মথডিট িনেচর মেতা কের িলিখ, তাহেল িক আমােদর সমস া দূর হেয় যােব।

পাঠ ৮: জেনিরকস 94
বাংলায় জাভা

public static void print(List<?> lst) { // accept List of Objects only,


// not List of subclasses of object
for (Object o : lst) {
System.out.println(o);
}
}

List<?> lst এর মােন হে আমরা এর টাইপ আমােদর জানা নই, এিট য কান টাইপ হেত পাের। যেহতু সব
টাইপ এর সুপার াস Object সুতরাং এিট যেকান টাইপ এর জেন কাজ করেব।

Bounded Types এর মেতা আমরা Wildcard Arguments কও Bounded কের ফলেত পাির ।

উদাহরণ -

public static void process(List<? extends Foo> list) { /* ... */ }

এিট ধু মাে Foo এর সাব াস েলা ক েসস করেত পারেব। এেক Upper Bounded Wildcards বেল ।

আমরা যিদ এমন কান মথড িলখেত চাই যা ধু মা Integer, Number, and Object েসস করেব অথাৎ
Integerএবং এর সুপার াস েসস করেব তাহেল -

public static void addNumbers(List<? super Integer> list) {


}

এেক Lower Bounded Wildcards বেল।

Generic Methods
আমরা মূলত এেতা ণ জেনিরক াস িনেয় কথা বেলিছ। আমরা একিট াসেক জেনিরক না কের ধুমাে এর
একিট বা একািধক মথড ক জেনিরক কের িলখেত পাির।

উদহরণ-

public class Util {


// Generic static method
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}

এিট একিট জেনিরকম মথড।

জেনিরক মথড-এ িরটানটাইপ এর আেগ টাইপ- স হা ার <> িলখেত হয়।

পাঠ ৮: জেনিরকস 95
বাংলায় জাভা

আমরা এবার চ া করেবা িকভােব আমরা একিট জেনিরক িসংগিল িলংকিল িলখেত পাির --

/**
* @author Bazlur Rahman Rokon
* @date 2/4/15.
*/
public class SinglyLinkedList<Type> {
private long size;

private Node<Type> head;


private Node<Type> tail;

public void addFirst(Type value) {


addFirst(new Node<>(value));
}

public void addLast(Type value) {


addLast(new Node<>(value));
}

private void addLast(Node<Type> node) {


if (size == 0) {
head = node;
} else {
tail.setNext(node);
}
tail = node;
size++;
}

public void addFirst(Node<Type> node) {


Node<Type> temp = head;
head = node;
head.setNext(temp);

size++;

if (size == 1) {
tail = head;
}
}

public Node<Type> getHead() {


return head;
}

public Node<Type> getTail() {


return tail;
}

পাঠ ৮: জেনিরকস 96
বাংলায় জাভা

public void removeFirst() {


if (size != 0) {
head = head.getNext();
size--;
}

if (size == 0) {
tail = null;
}
}

public void removeLast() {


if (size != 0) {
if (size == 1) {
head = null;
tail = null;
} else {
Node<Type> current = head;

while (current.getNext() != tail) {


current = current.getNext();
}
current.setNext(null);
tail = current;

}
size--;
}
}

public Type getFirst() {

return getHead().getValue();
}

// four scenario
// 1. empty list- do nothing
// 2. single node : ( previous is null)
// 3. Many nodes
// a. node to remove is first node
// b. node to remove is the middle or last

public boolean remove(Type type) {


Node<Type> prev = null;
Node<Type> current = head;

while (current != null) {


if (current.getValue().equals(type)) {
if (prev != null) {

// just skip the current node. it works fine


prev.setNext(current.getNext());

পাঠ ৮: জেনিরকস 97
বাংলায় জাভা

if (current.getNext() == null) {
tail = prev;
}

size--;
} else {
removeFirst();
}

return true;
}

prev = current;
current = current.getNext();
}

return false;
}

public long getSize() {

return size;
}

public void print() {


System.out.print("Total elements : " + size + " -> ");
Node node = head;
while (node != null) {
System.out.print(node.getValue().toString() + " ,");
node = node.getNext();
}
System.out.println();
}

public void clear() {


for (Node<Type> x = head; x != null; ) {
Node<Type> next = x.next;
x.next = null;
x.value = null;
x = next;
}

head = tail = null;


size = 0;
}

private class Node<Type> {


private Type value;
private Node<Type> next;

পাঠ ৮: জেনিরকস 98
বাংলায় জাভা

public Node(Type value) {


this.value = value;
}

public Type getValue() {


return value;
}

public void setValue(Type value) {


this.value = value;
}

public Node<Type> getNext() {


return next;
}

public void setNext(Node<Type> next) {


this.next = next;
}
}
}

এবার আমরা এিটেক রান কের দিখ-

পাঠ ৮: জেনিরকস 99
বাংলায় জাভা

/**
* @author Bazlur Rahman Rokon
* @date 2/4/15.
*/
public class LinkedListDemo {
public static void main(String[] args) {
SinglyLinkedList<Integer> integers = new SinglyLinkedList<>();
integers.addFirst(4);
integers.addFirst(3);
integers.addFirst(2);
integers.addFirst(1);

integers.print();

System.out.println("Remove first and last elements..");


integers.removeFirst();
integers.removeLast();
integers.print();

System.out.println("add elements at last ");


integers.addLast(5);
integers.addLast(6);
integers.addLast(7);
integers.print();

SinglyLinkedList<String> stringLinkedList = new SinglyLinkedList<>();


stringLinkedList.addFirst("abcd");
stringLinkedList.addFirst("efgh");
stringLinkedList.addFirst("ijkl");
stringLinkedList.addFirst("mnop");
stringLinkedList.addFirst("qrst");
stringLinkedList.print();
}
}

Output:

Total elements : 4 - 1 ,2 ,3 ,4 , Remove first and last elements.. Total elements : 2 - 2 ,3


, add elements at last Total elements : 5 - 2 ,3 ,5 ,6 ,7 , Total elements : 5 - qrst ,mnop
,ijkl ,efgh ,abcd ,

পাঠ ৮: জেনিরকস 100


বাংলায় জাভা

পাঠ ৯: জাভা আই/ও


ি ম
বাইট ি ম
ক াের ার ি ম
বাফারড ি ম
ািনং এবং ফরেমিটং
ডাটা ি ম
ইনপুট ি ম
আউটপুট ি ম
ফাইল
িরিডং এ ট ট ফাইল
রাইিটং এ ট ট ফাইল
সারসংে প

ইনপুট আউটপুট সংে েপ যােক আমারা বিল আই/ও (I/O) য কান কি উটার িসে ম বা া ািমং ল াং েজর
একিট মৗিলক িবষয়। য কান া াম িলখেত গেলই আসেল আমােদর আই/ও দরকার হয়। তেব এই িবষয়িট িঠক
ততটা মজার না যতটা অন ান িবষয় েলা। খািনকটা ইেলি িসিটরর মেতা। আমরা জািন েত কিট বািড়েতই এিট
আেছ, দরজা িদেয় েবশ কেরই আমােদর হাত সুইচেবােডর িদেক চেল যায়, আমার সুইচ িটপ িদই, এবং লাইট েল
উেঠ। এর পছেনর ব পার েলা িনেয় যমন ইেলি িসিট কাথা থেক এেলা, িকভােব কাজ কের এসব িনেয় আমােদর
িচ া করেত হয় না। এ েলা নপেথ থেক িঠক ঠাক মেতা কাজ কের। আই/ও অেনকটা এরকম।

এবার ইনপুট আউটপুটেক সং ািয়ত করা যাক। একিট া াম মূলত ডাটা আর ফাংশন এর সমি । অথাৎ ফাংশন
ডাটা েলা িনেয় কাজ কের। তা এই ডাটা েলা কাথাও থেক তির হয় এবং স েলােক আমােদর া াম
ফাংশন েসস কের । েসসকৃত ডাটা েলা হে আউটপুট। সহজ কের বলা যেত পাের, আমােদর া াম কান
সাস থেক ডাটা পেড় এবং কান একটা ডি েনশেন রাইট কের। উদাহরণ িহেসেব দওয়া যেত পাের- আমােদর
িকেবাড একিট ডাটা সাস। আমরা একটা া াম িলখেত পাির যা িক বাড এ ডাটা টাইপ করিছ তা ইনপুট িহেসেব
িনে এবং System.out.println() মথড িদেয় স েলা কনেসােল ি করেত পাির।

পাঠ ৯: জাভা আই/ও 101


বাংলায় জাভা

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class StandardIOExample {


public static void main(String[] args) throws IOException {
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(System.in));
String line;
do {
line = reader.readLine();
line = line.toUpperCase();
System.out.println(line);
} while (!line.equals("quit"));
}
}

উপেরর া ামিট িকেবাড থেক একিট লাইন পেড় সিট আপারেকইস এ কনভাট কের কনেসােল ি কের।
একিট একিট সরলতম এবং খুবই েয়াজনীয় ইনপুট/আউটপুট এর উদাহরণ। সাধারণত আমরা কান একিট ফাইল
থেক ডাটা পিড় এবং েয়াজনীয় েসিসং এর পর অন একিট ফাইল এ রাইট কির। তেব ইনপুট আউটপুট ধুমা
ফাইল এর মেধ সীমাব থাকেব এবন কান কথা নই। আমরা চাইেল একটা ি ং অবেজ থেক ডাটা পেড়
আেরকিট ি ং অবেজ রাইট করেত পাির। এে ে ইনপুট হে একিট ি ং অবেজ এবং আউটপুটও একিট ি ং
অবেজ । আবার একিট ফাইল থেক ডাটা পেড় একিট ি ং অবেজ এ রাখেত পাির। এভােব অেনক েলা
কি েনশান করেত পাির। তেব সব সময় য ই্নপুট এবং আউটপুট এক সােথই কাজ করেত হেব এমনটা নয়। কখেনা
কখেনা ধুমা ইনপুট অথবা ধুমা আউটপুট িনেয় একিট া াম তির হেত পাের।

তেব একজন জাভা া ামার এর কােছ আই/ও অেনক েলা কারেণই পূণ হেত পাের। জাভােত অেনক েলা
আই/ও াস এর কার এিপআই এর সােথই থােক যার বিশর ভাগ – java.io প ােকজ-এ। তেব জাভােত অিধকাংশ
ে ই আই/ও দুই ভােগ ভাগ করা হেয়েছ। একিট হেলা বাইট িভি ক আই/ও যা input stream এবং output
stream িদেয় হ াে ল করা হয়, এবং অন িট হেলা ক ােরকটার িভি ক যা readers এবং writers িদেয় হ াে ল
করা হয়। তেব দুই টাইপ-এ অ াব াকশন সরবরাহ কের যা িদেয় সােসর সিঠক টাইপ না জেনও পড়েত বা িলখেত
পাির। এেত কের আমরা এিক মথড িদেয় কনেসাল থেক ডাটা পড়েত পারিছ আবার সই মথড িদেয় আমরা
নটওয়াক কােনকশন থেকও পড়েত পারিছ। এেতা হল িটপ অব িদ আইসবাগ। একবার আমরা অ াব াকশন এ
অভ হেয় গেল য কান সাস থেক ডাটা পড়েত পারেবা, আমােদর আসেল খুব একটা কয়ার করেত হেব না
িকভােব বা কান সাস থেক ডাটা আসেছ বা যাে । এখােন একটা পূণ কথা বেল রািখ, সটা হেলা, জাভা
া ামারেদর সব থেক পছে র িবষয় হে অ াব াকশন। অেনক ভূিমকা হেলা, এবার তাহেল আেরা ভতের েবশ
করা যাক। রেতই ফাইল িনেয় কাজ করা যাক।

ওয়ািকং উিয়দ ফাইল

পাথ েত কিট ফাইল এর জেন একিট িনিদ পাথ থােক যােত কের আমরা আলাদা করেত পাির। পাথ হে
কত েলা ক ােরকটার এর সমি এবং এেত ফাইেল এর নাম এবং িডেরকটরী লাকাশান থােক। যমন ওিয়ে াস
াটফেমর ে C:\users\rokonoid\hello.txt হে hello.txt ফাইল এর পাথেনইম যা িকনা C াইেভর users
িডেরকটিরর মােঝ rokonoid িডেরকটিরেত আেছ। Unix াটফেমর ে /home/rokonoid/hello.txt হে
hello.txt এর পাথেনইম।

পাঠ ৯: জাভা আই/ও 102


বাংলায় জাভা

পাথেনইম দুই কার হেত পাের- absolute path এবং relative path. Current working directory বেল একটা
কনেস আেছ, আর সিট হেলা, আমরা যখন য িডেরকটিরেত কাজ কির। মেন করা যাক আমােদর জাভা া ামিট
/home/rokonoid বা C:\users\rokonoid িডেরকটিরেত আেছ । তাহেল আমােদর কাের ওয়ািকং িডেরকটির
হে C:\users\rokonoid বা /home/rokonoid। এখন এই িডেরকটিরেত যিদ একিট hello.txt ফাইল থােক,
তাহেল এই ফাইল এর িরেলিটভ পাথ হেব hello.txt আর absolute path পাথ হেব
C:\users\rokonoid\hello.txt বা /home/rokonoid/hello.txt । িরেলিটভ পাথ কাের ওয়ািকক িডেরকটির
থেক িরজলভ করা যায়।

ফাইল তির

এবার দখা যাক িকভােব একিট ফাইল অবেজ তির করা যায়। java.io.File াসিট একিট পাথ এর ফাইল বা
িডেরকটিরেক িরে েজ কের। এ ােস বশ কেয়কিট কন াকর রেয়েছ,এর মােন বশ কেয়ক উপােয় একিট ফাইল
অবেজ তির করা যায়।

File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)

এখন আমােদর একিট পাথেনইম যিদ হয় hello.txt বা /home/rokonoid/hello.txt তাহেল আমরা িনেচর মেতা কের
ফাইল অবেজ তির করেত পাির।

File file = new File("hello.txt");

অথবা

File file = new File("/home/rokonoid/hello.txt");

এই ফাইলিট আমােদর দওয়া পাথ এ য ফাইলিট আেছ তােক িরে েজ কের। তেব মজার ব পার হে ফাইল
অবেজ তির করেত হেল এই পাথিট িফিজক ািল থাকেত হেব এমন কান কথা নই। File ােসর বিশ িকছু মথড
আেছ য েলা িদেয় আমরা দখেত পাির এই পাইলিট আসেলই আমরা য পাথিট িদেয়িছ সখােন আিছ িকনা। না
থাকেল আমরা তির করেত পাির।

পাঠ ৯: জাভা আই/ও 103


বাংলায় জাভা

import java.io.File;
import java.io.IOException;

public class FileExample {

public static void main(String[] args) {


File file = new File("hello.txt");
if (file.exists()) {
System.out.println("File exists");
} else {
System.out.println("File does not exist,lets create one");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

উপেরর উদহরণিটেত আমরা থেম আমােদর দওয়া পাথ িদেয় একিট ফাইল অবেজ তির কেরিছ। তারপর দেখিছ
এই ফাইিট আসেলই িফিজক ািল আমােদর দওয়া পাথ এ আেছ িকনা। যিদ না থােক, তাহেল সই পাথ এ নতুন
একিট ফাইল তির করা হেয়েছ।

এছাড়াও আরও িকছু বশ েয়াজনীয় মথড যমন- isFile() এবং isDirectory() আেছ য েলা িদেয় আমরা বর
করেত পাির কান পাথ ফাইল বা িডেরকটির িকনা।

এছাড়াও কাের ওয়ািকং িডেরকিট বর করা জেন একিট িবেশষ উপায় হেলা -

public class CurrentWorkingDirectory {


public static void main(String[] args) {
String workingDir = System.getProperty("user.dir");
System.out.println(workingDir);
}
}

পাথ সপােরটর

একিট িবষয় মেন রাখেত হেব য িবিভ াটপম ফাইেলর পাথ এর দুিট পাট আলাদা করার জেন আলাদা ক ােরকটার
ব বহার কের থােক। যমন- windows ব াকে স () এবং unix িসে ম ফরওয়াড স (/) ব বহার কের থােক।
সুতরাং পাথ তির করেত হেল খয়াল রাখা জ রী কান াটফেম থেক া ামিট রান করা হে । িক আমােদর
যেহতু মূল উে শ াটপম িসিফক কাড না লখা, স ে িনেজর উপায়িট ব বহার করা যেত পাের।

String workingDir = System.getProperty("user.dir");


String newFile = workingDir + File.separator + "hellword.txt";
File file = new File(newFile);

পাঠ ৯: জাভা আই/ও 104


বাংলায় জাভা

এখােন File.separator একিট কন া যা য াটফেম া ামিট রান করেছ তার উপর িভি কের সপােরটর
ি ং আকাের িদেয় থােক।

িডেরকটির তির

File ােস এ mkdir() এবং mkdirs() দুিট মথড আেছ য েলা ব বহার কের আমরা একিট িডেরকটির তির
করেত পাির। এবং এেদর মােঝ ফাইল তির করেত পাির।

import java.io.File;
import java.io.IOException;

public class DirectoryExample {


public static void main(String[] args) throws IOException {
File dir = new File("/home/rokonoid/myDir");

dir.mkdir();

String dirPath = dir.getPath();


System.out.println("Diectory Path: " + dirPath);

// lets create a new file


String fileName = "hello.txt";
File file = new File(dirPath + File.separator + fileName);
file.createNewFile();

String filePath = file.getPath();


System.out.println("File Path: "+ filePath);
}
}

এই া ামিট রান করেল িনেচর আউটপুট পাওয়া যােব -

Diectory Path: /home/rokonoid/myDir


File Path: /home/rokonoid/myDir/hello.txt

ফাইল িরেনিমং , কিপং এবং িডেলিটং

File াস এ renameTo() ব বহার কের আমরা ফাইল িরেনম করেত পাির।

পাঠ ৯: জাভা আই/ও 105


বাংলায় জাভা

import java.io.File;

public class FileRenameExample {

public static void main(String[] args) {


File oldFile = new File("old_hello.txt");
File newFile = new File("new_hello.txt");

boolean fileRenamed = oldFile.renameTo(newFile);

if (fileRenamed) {
System.out.println(oldFile + " renamed to " + newFile);
} else {
System.out.println("Renaming " + oldFile + " to " + newFile + " failed.");
}
}
}

ফাইল িডিলট করার জেন দুিট মথড রেয়েছ- delete() এবং deleteOnExit() এই মথড দুিট িদেয় ফাইল এবং
িডেরকটররী িডেলট করা যায়। তেব িডেরকটরী িডিলট করেত হেল অবশ ই িডেরকটির িট খািল থাকেত হেব, অথাৎ
িডেরকটরীেত যিদ আরও ফাইল থােক , তাহেল স েলা আেগ িডিলট কের ফলেত হেব। delete() মথডিট সােথ
সােথই কাজ কের তেব, deleteOnExit() মথডিট যখন JVM টারিমেনট কের তখন িডেলট কের। আমােদর
অেনকসময় া াম চলাকািলন টে ারাির ফাইল তির করার দরকার পের যা া াম টািমেনট হেয় গেল দরকার হয়
না, সসব ে এই মথড ব বহার করা যেত পাের।

public class FileDeleteExample {


public static void main(String[] args) {
// To delete the hello.txt file immediately
File file1 = new File("hello.txt");
file1.delete();

// To delete the hello.txt file when the JVM terminates


File file2 = new File("hello.txt");
file2.deleteOnExit();
}
}

File ােস কান মথড নই যােত কের সরাসির আমরা ফাইল কিপ করেত পাির। একিট ফাইল কিপ করেত হেল
আমােদরেক একিট নতুন ফাইল তির করেত হেব এবং সই ফাইল এর কে েলা িরড কের নতুন ফাইল এ রাইট
করেত হেব। পরবিত চ া াের এ িনেয় আেলাচনা করা হেব। িলি ং ফাইলস

আমরা একিট িডেরকটিরেত কত েলা ফাইল আেছ তার িল listFiles() মথড িদেয় সহেজই বর কের ফলেত
পাির। উদাহরণ-

পাঠ ৯: জাভা আই/ও 106


বাংলায় জাভা

import java.io.File;

public class ListingFiles {


public static void main(String[] args) {
File home = new File("/home/rokonoid/");

File[] listRoots = home.listFiles();


for (File file : listRoots) {
System.out.println(file.getPath());
}
}
}

ফাইল িফ ার

তেব অেনক সময় আমােদর ফাইল িফ ােরর েয়াজন হয়। মেন করা যাক একিট িডেরকটরীেত ধুমা png ফাইল
েলা আমােদর দরকার। সে ে -

import java.io.File;
import java.io.FileFilter;

public class FileFileterExample {


public static void main(String[] args) {
File home = new File("/home/rokonoid/Pictures");

FileFilter pngFlter = new FileFilter() {

@Override
public boolean accept(File pathname) {
String fileName = pathname.getName();
if (fileName.endsWith(".png")) {
return true;
}
return false;
}
};

File[] listRoots = home.listFiles(pngFlter);


for (File file : listRoots) {
System.out.println(file.getPath());
}
}
}

উপেরর উদাহরণিটেত FileFilter এর একিট anonymous াস লখা হেয়েছ যা িকনা listFiles() মথডিট
paremeter িহেসেব িনে । এই িফ ােরর accept() মথডিটেত আমরা আমােদর িফ ার লিজকটুকু লখা হেয়েছ
যােত কের এিট ধুামা png ফাইল েলা িলি ং কের।

ইনপুুট/আউটপুট ি ম

পাঠ ৯: জাভা আই/ও 107


বাংলায় জাভা

ি ম এের আ িরক অথ হে বাহ । এর মােন হে অেনকটা পািনর ধারার মেতা একিট উৎস থেক অিবরাম ভােব
বাহ হে এমন িক আমরা িঠক ভােব উৎ স কতটুকু পািন আেছ জািন না। অথাৎ কনেসপচুয়ািল একিট অিবরাম
ডাটা বাহ। আমরা এই বাহ থেক ডাটা পড়েত বা িলখেত পাির। য কান ি ম একিট উৎস বা গ ব েলর সােথ
সংযু । উৎস ক বলা হয় ডাটা সাস এবং গ ব লেক বলা হয় ডাটা িসংক।

ইনপুট ি ম তির

ছিবেত দখা যাে একিট সাস থেক বাহ আকাের ডাটা া হে জাভা া ােম। এবং জাভা া ামিট
আেরকিট ডাটা া তির করেছ যা গ েব পৗছাে । তাহেল একিট সাস থেক ডাটা পড়েত হেল আমােদরেক
কেয়কিট ধােপ যেত হয় - ১. থেম একিট সাস িনধারণ করেত হেব। সাস একিট ি ং হেত পাের, িকংবা একিট
ফাইল অথবা একিট নটওয়াক কােনকশান। ২. সাস এর উপর িভি কের একিট ইনপুট ি ম তির করেত হেব। ৩.
ইনপুট ি ম থেক ডাটা পড়া। সাধারণত একটু লুপ এর মেধ ইনপুট ি ম এর read() মথড কল করেত হয় ,
এবং লুপিট তত ণ পয চেল যত ণ পয ডাটা পড়া শষ না হয়।

ইনপুট ি ম থেক ডাটা পড়া

ি ম দুই কার হেত পাের-

1. বাইট ি ম
2. ক ােরকটার ি ম। বাইট ি ম

পাঠ ৯: জাভা আই/ও 108


বাংলায় জাভা

বাইট িভি ক আই/ও িনেয় কাজ করার জেন বাইট ি ম-এ বশ সমৃ াস আেছ। সাধারণত বাইট ি ম য কান
টাইপ অবেজ ( যমন বাইনারী ডাটা) ত ব বহার করা যায়। সব বাইট ি ম এর াস েলা InputStream এবং
OutputStream এর সাব াস। যিদও আরও অেনক বাইট ি ম াস আেছ, িক যেহতু এই দুিট াস সবার উপের,
আমরা েতই এই দুিট াস িনেয়ই কথা বলেবা।

java.io.InputStream এিট একিট অ াব া াস এবং সকল ইনপুট ি ম এর সুপার াস। এেত িতনিট বিসক
মথড আেছ যা িকনা িকভােব ডাটা ি ম থেক পড়েত হয় তা িনেয় িডল কের। এছাড়াও ি ম াস করা, াস করা,
এবং কত েলা বাইট আরও পড়েত হেব ইত ািদ িনেয় িকছু মথড আেছ। এ েলা িনেয় একিট িডেটইল ব াংখ া করা
যাক। read() মথড:

public abstract int read() throws IOException

এই মথডিট ১ বাইট unsigned ডাটা পেড় এবং এর ইি জার ভ ালু িরটান কের যা িক না ০ থেক 255 এর মেধ ।
যিদ কান বাইট না পাওয়া যায় তাহেল এিট - 1 িরটান কের এবং এেত কের আমরা বুঝেত পাির ি ম এর ডাটা শষ হয়
গেছ। আমরা একিট উদহারণ দিখ। যেহতু ইনপুট ি ম একিট অ াব া াস এবং এর বশ িকছু সাব াস আেছ,
উদাহরণ দওয়ার সুিবধােথ আমরা একিট ফাইল ইনপুট ি ম ব বহার কির যা িকনা কান একিট লােকশােন রাখা
একিট ট ট ফাইল পড়েত পারেব । থেম আমরা একিট ট ট ফাইল তির কের কান একিট লােকশােন রািখ।
সাধারণত েজ এর একিট ফা ার তির কের তােতও রাখা যেত পাের। এর পর এই ফাইল এ য কান একিট
ি ং িলিখ। এখােন আমার ফাইল এর নাম input.txt এেত িনেচর লাইিট িলেখিছ - The quick brown fox jumps
over the lazy dog. এবার িনেচর কাডিট রান কির।

পাঠ ৯: জাভা আই/ও 109


বাংলায় জাভা

import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamExample {


public static void main(String[] args) {
FileInputStream in = null;
try {
in = new FileInputStream("input.txt");
int c;

while ((c = in.read()) != -1) {


System.out.print(c + ",");
}
} catch (IOException e) {
System.err.println("Could not read file");
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
System.err.println("Could close input stream");
}
}
}
}
}

এখােন েত একিট FileInputStream াস এর ইনে ি েয়ট কেরা হেয়েছ। যেহতু InputStream একিট
abstract াস, এবং আমােদর ডাটা সাস একিট ফাইল, সুতরাং কংি ট াস িহেসেব FileInputStream
ব বহার করা হেয়েছ। এেত আ েম িহেসেব আমােদর ট ট ফাইলিটর লােকশান দয়া হেয়েছ। এখােন এিট
িরেলিটভ পাথ। আমােদর ওয়ািকং িডেরকটরী হে েজ িডেরকটরী, যেহতু ফাইলিট েজ িডের রীেতই রাখা
আেছ। যিদ ফাইলিট অন িডেরকটরীেত থােক সে ে absolute পাথ িদেত হেব।

তারপর একটা int c িডে য়ার করা হেয়েছ । এরপর একিট য়াইল লুপ রেয়েছ। এেত িতবার একিট কের বাইট িরড
কের c ত এসাইন করা হে এবং তা ি আউট করা হে । এই লুপিট তত ণ পয চলেব যত ণ পয read()
মথডিট -1 িরটান না কের। ফাইল িট পড়া শষ হেয় গেল এিট -1 িরটান করেব। কাডিট একিট াই ক াচ ক এর
মেধ কারণ আমার জািন য আই/ও আেছ খুব লা- লেভল থেক কাজ কের । এর মােঝ কান একিট সমস হেতই
পাের এবং তা হেল JVM IOException করেব এবং তা যােত আমরা হ াে ল করেত পাির। এছাড়াও একিট
ফাইনািল ক আেছ যখােন আমরা ি মিট ব কেরিছ। আমােদর খয়াল রাখেত হেব য, যখিন একিট ি ম এর কাজ
শষ হেয় যােব তখিন তা ব কের িদেত হেব। এিট অেনকটা আমােদর ওয়াশ েমর পািনর টপ এর মেতা। কাজ শষ
হেল আমরা অফ কের িদই যােত কের িরেসাস ন না হয়।

এখন উপেরর কাডিট যিদ রান কির তাহেল কনেসােল আমরা িনেচর আউটপুটিট দখেত পােবা-
84,104,101,32,113,117,105,99,107,32,98,114,111,119,110,32,102,111,120,32,106,117,109,1
12,115,32,111,118,101,114,32,116,104,101,32,108,97,122,121,32,100,111,103,46,

পাঠ ৯: জাভা আই/ও 110


বাংলায় জাভা

এর কারণ হে read() মথডিট এক সােথ একিট বাইট পেড় এবং এর ইি জার িরে েজে শান িরটান কের। আমরা
যিদ এেক িঠক আমােদর input.txt এর ি ং এর মেতা কের ি করেত চাই তাহেল ইি জারেক ক ােরকটার এ কা
করেত হেব। System.out.print((char)c);

আউটপুট ি ম তির

ছিবেত দখা যাে য জাভা া ামিট একিট আউটপুট ি ম ব বহার কের একিট ডাটা িসংক ডাটা া ফার
করেছ। আউটপুট ি মএর মাধ েম া াম থেক ডাটা ডাটা িসংেক পাঠােত হেল কেয়কিট ধাপ-এ যেত হয়- ১.
থেম একিট ডাটা িসংক িনধারণ করেত হেব। এিট একিট ফাইল হেত পাের, িকংবা একিট ি ং অবেজ বা
নটওয়াক কােনকশান। ২. ডাটা িসংক ব বহার কের একিট আউটপুট ি ম অবেজ তির করেত হেব। ৩. এরপর
আউটপুট ি মিট াস করেত হেব। ৪. এবং সবেশেষ আউটপুট ি মিট াজ কের িদেত হেব।

আউটপুট ি েম ডাটা রাইট করা

এবার আমরা চ া করেবা ডাটা িকভােব ডাটা িসংেক রাইট করা যায় । এে ে ডাটা িসংক িহেসেব একিট ফাইল
িনেত পাির। আউটপুট ি ম িহেসেব িনেত পাির FileOutputStream. OutputStream এর একিট একিট মথড
হে write() যা িদেয় আমরা ডাটা ফাইল এ রাইট করেত পাির। write() মথড এর ক েলা অভারেলািডং আেছ ।
এর যেকান একটা ব বহার করেত পাির। একিট ি ং অবেজ থেক আমরা সহেজই ডাটা বাইট আকাের একিট
অ ােরেত রাখেত পাির।

String text = "Hello";


byte[] textBytes = text.getBytes();

এরপর এই বাইট অ ােরেক আউটপুট ি ম এর আরইট মথেড আ েম িহেসেব পাস করেত পাির। উদাহরণ-

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputStreamExample {


public static void main(String[] args) {
String destFile = "output.txt";
String data = "Lorem ipsum dolor sit amet," +
" consectetur adipiscing elit. " +
" Suspendisse at placerat ipsum. ";
try {
FileOutputStream fos = new FileOutputStream(destFile);
fos.write(data.getBytes());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

পাঠ ৯: জাভা আই/ও 111


বাংলায় জাভা

এরপর আউটপুট ি মিটেক াস করেত হয় flush() মথড ব বহার কের। আমােদর উে শ হে ডাটা িসংেক ডাটা
রাইট করা। এে ে আমরা FileOutputStream এ ডাটা রাইট করিছ যা িকনা একিট ফাইল এর অ াব াকশন।
আউটপুট ি ম বাইট েলােক আপােরিটং িসে ম ক দয় য িকনা আসেল বাইট েলা ফাইল এ রাইট করার জেন
রসপনিসবল। অপােরিটং িসে ম আসেল িনধারণ কের কখন বাইট েলা ফাইল এ রাইট করেব িক আমােদর আেগ
সব েলা বাইট অপােরিটং িসে মেক িদেত হেব। আউটপুট ি ম এর যেহতু অ াব া াস এবং এর অেনক েলা
কনি ট আেছ, এেদর কান কান াস িনেজর মােঝ বাইট েলার বাফার রেখ িদেত পাের। সে ে flush()
মথডিট বাফার ি য়ার কের দেব।

এবং কাজ শেষ আউটপুট ি ম িটেক াজ কের িদেত হেব। আউটপুট ি ম এর আরও বশ িকছু সাব াস হেলা -

ক ােরকটার ি ম

ক াের ার ি ম েলা বাইট ি ম এর মেতাই কাজ কের, তেব পাথক ধু এইটকুই য এরা ক ােরকটার িনেয় কাজ
কের। অথাৎ এ েলােক ধুামা ট ট িরড এবং রাইট করার জেন লখা হেয়েছ। InputStream এবং
OutputStream এর মেতা এখােনও দুিট সুপার াস রেয়েছ, য েলা হেলা - Reader এবং Writer.

ক াের ার ি ম সিঠক ভােব বুঝেত হেল আমােদর আেগ জানেত হেব ক াের ার ইনেকািডং স েক। আমরা জািন য
কি উটার মূলত র (raw ) িজেরা-ওয়ান িনেয় কাজ কের। িক আমরা যখন কান ট ট দিখ তা িক মােটও
িজেরা-ওয়ান বাইনারী িডিজট নয়, বরং িরেয়ল ক ােরকটার েলাই দিখ। এই িজেরা-ওয়ান বাইনারী ডাটা েলােক
ই ারে ট করার জেন এক ধরেণর ম ািপং থােক যােক বলা হয় ক ােরকটার ইনেকািডং। অেনক ধরেণর ক ােরকটার
ইনেকািডং থাকেলও সাধারণত ASCII ও ইউিনেকাড- বইজড ইনেকািডং েলা িনেয় আমােদর সমেচেয় বিশ কাজ
করেত হয়। ASCII বা আি - American Standard Code for Information Interchange এর সংি
প। এিট একিট ক ােরকটার ইনেকািডং প িত যা ইংেরজী বণ মালা েলােক না ােরর মাধ েম িরে জ কের।
িতিট ইংেরজী বণেক একিট কের না ার (০-১২৭) দওয়া হয়। এই ইনেকািডং প িতেত মা এক বাইট এর দরকার
হয়। আি িদেয় ধুমা ইংেরজী ট ট িনেয় কাজ করা গেলও পৃিথবীেত অসংখ ভাষা এবং বণমালা রেয়েছ।
পৃিথবীর সব আধুিনক বণমালা এবং ঐিতহািসক দিলল েলা িনেয় কাজ করার জন একিট নতুন প িত উ াবন করা
হয়, যার নাম ইউিনেকাড। এই ইউিনেকাড ইমি েম করার জেন অেনক েলা ক ােরকটার ইনেকািডং ি ম বা প িত
রেয়েছ, তেব সাধাণত UTF-8, UTF-16 বিশ ব ব ত হয়। UTF-8 ইনেকািডং িসে ম এ একিট ক ােরকটার ১
থেক ৪ বাইট হেত পাের এবং এিট ওেয়ব পইজ বা ইেমইল ব ব ত হয়। UTF-16 এর ে তা দই বা তেতািধক
বাইট হেত পাের।

অেনক সফটওয় ার িসে মই UTF ইনেকািডং ি ম ব বহার কের ট ট ার কের থােক। যেহতু এ েলা একিট
ক ােরকটার িরে েজ করেত হেল ১ বা একািধক বাইট দরকার হয়, সেহতু এ েলা পড়ার সময় যিদ আমরা
ইনপুটি ম ব বহার কের একবাইট কের পিড়, এবং তা char এ কনভাট কির, তাহেল আমরা অেনক সময়ই সিঠক
ভােব ডাটা িরড করেত পারেবা না। এই সসস া দূর করার জেন এবং সিঠক ভােব ট ট িরড বা রাইট করার জেন
Reader/Writer াস লখা হেয়েছ যা ধুমা ট ট িনেয় কাজ কের। মেন রাখেত হেব য, InputStream এর
read() মথড েত কবার এক বাইট কের িরটান কের আর Reader ােসর read() মথড িতবার একিট কের
ক ােরকটার িরটান কের। একিট বাইট এর ভ ালু ১-২৫৫ পয হেত পাের যখােন একিট ক াের ার এর ভ ালু ০
-৬৫৫৩৫ হেত পাের। তাহেল আমরা সহজ ভােব বলেত পাির, ইনপুট ি ম/আউটপুট ি ম র-বাইনারী ডাটা িনেয়
কাজ কের আর িরডার/রাইটার ধুমা ট ট িনেয় কাজ কের।
এই পাথক ছাড়া ক াের ার ি ম িনেয় কাজ করার সব পস েলা ইনপুট/আউটপুট ি ম এর পস এর মেতা।

Read using Reader

পাঠ ৯: জাভা আই/ও 112


বাংলায় জাভা

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderExample {


public static void main(String[] args) {
Reader reader = null;
try {
reader = new FileReader("input.txt");
int c;
while ((c = reader.read()) != -1) {
char ch = (char) c;
System.out.print(ch);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

এেতও ইনপুট ি ম এর একটা কের বাইট িরড করেত হয় একিট লুপ এর মােঝ।

Write using Writer

পাঠ ৯: জাভা আই/ও 113


বাংলায় জাভা

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterExample {


public static void main(String[] args) {
Writer writer;
String text = "Lorem ipsum dolor sit amet,"
+ " consectetur adipiscing elit. "
+ "Suspendisse at placerat ipsum. ";

try {
writer = new FileWriter("output2.txt");
writer.write(text);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```java

ÏÚ¦½ÚÏ ¬Ï write() áÌÿ ÛÄáÎ ×ÏÚ×ÛÏ Û ¢ ÏÚ¦½ ³ÏÚ ÍÚÎ।

**System.in, System.out, and System.error


**

¬¦ ÛÂÆÛ½ ÊØÝÑ ÍÊØß ¿Ú½Ú Û×¢³। ÂáÊ ×Êá¸áÎ áÊÛÕ ÍÊØß ØÎ ÌÞÑ System.out .

System.in ¬³Û½ ¦ÆÈݽ Û Ì ÍÚ Û³ÆÚ áÍ á³ÚÆ ³Æá×ÚÑ á Ú ÚáÌÏ ºá Í Û³áÊÚ¿ ¬Ï ×Úáà ³ÚáÆá ¿। ¬Û½ System Úá×Ï ¬³Û½ Í

```java
Scanner scanner = new Scanner(System.in);

int a = scanner.nextInt();
double d = scanner.nextDouble();

ানার একিট ইউিটিলিট াস, যার সাহােয সহেজই আমরা িকেবাড থেক ইি জার বা ডাবল টাইপ ইনপুট িনেত
পাির। ানার কন াকর আ েম িহেসেব একিট ইনপুট ি ম নয়। এে ে আমরা System.in িট িদেত পাির
যােত কের এিট সরাসির িকেবাড থেক ডাটা পড়েত পাের।

System.out হে System ােসর একিট স ািটক ম ার যা িকনা একিট ি ি ম( PrintStream ) । এিট


যেকান ডাটা কনেসাল এ রাইট কের। এিটও একিট আউটপুট ি ম তেব এিট ডাটা ফরেমট কের দখােত সাহায
কের। যমন আমরা যখন কনেসাল এ ি িমিটভ ডাটা ি কির, ি ি ম তােদর ফরেমেটড ডাটা েলা ি কের,
এেদর বাইট ভ ালু ি না কের।

পাঠ ৯: জাভা আই/ও 114


বাংলায় জাভা

System.err ও একিট আউটপুট ি ম যা িকনা System.out ি ম এর মেতাই কাজ কের , তেব এিট ধুমা
ইরর ি করার জেন ব বহার করা হয়। িকছু িকছু আইিডই এই ইরর ট ট েলা লাল রং-এ ি কের থােক।

িরিডং/রাইিটং ি িমিটভ ডাটা

DataInputStream এবং DataOutputStream াস দুিট ি িমিটভ টাইপ ডাটা কাজ করার জেন ব বহার করা
হয়। এেত বশ িকছু readxxx() এবং writexxx() মথড রেয়েছ য েলা ব বহার কের যেকান ধরেণর
িমিটভ ডাটা আমরা িরড/রাইট করেত পাির।

উদাহরণ-

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class WritingPrimitivesExample {


public static void main(String[] args) {
String destFileName = "primitivs.data";

try {
DataOutputStream dos = new DataOutputStream(new FileOutputStream(destFileName));
dos.writeInt(152);
dos.writeDouble(4.56);
dos.writeBoolean(true);
dos.writeLong(Long.MAX_VALUE);

dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

উদাহরণিটেত DataOutputStream কন াকট আ েম িহেসেব একিট আউটপুটি ম নয়,এখােন যেহতু আমরা


ফাইল এ রাইট করিছ, স জেন FileOutputStream ব বহার করা হেয়েছ।

পাঠ ৯: জাভা আই/ও 115


বাংলায় জাভা

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadingPrimitivesExample {

public static void main(String[] args) {


String sourceFile = "primitivs.data";

try {
DataInputStream dis = new DataInputStream(new FileInputStream(sourceFile));

int intValue = dis.readInt();


double doubleValue = dis.readDouble();
boolean booleanValue = dis.readBoolean();
long longValue = dis.readLong();

System.out.println(intValue);
System.out.println(doubleValue);
System.out.println(booleanValue);
System.out.println(longValue);

} catch (IOException e) {
e.printStackTrace();
}
}
}

উদাহরণিটেত DataInputStream কন াকটর আ েম িহেসেব একিট ইনপুটি ম নয়। যেহতু আমরা ফাইল
থেক িরড করিছ, সেহতু ইনপুটি ম িহেসেব FileInputStream ব বহার করা হেয়েছ।

পাঠ ৯: জাভা আই/ও 116


বাংলায় জাভা

পাঠ ১০: জাভা এন আই/ও


পাথ
ি েয়িটং পাথ
ির াইিভং পাথ
িডেরকির এবং ি
ফাইি ং ফাইল ইন িডের ির
ওয়ািকং িডের ির
ফাইল ি েয়ট এবং িডেলট করা
ত ফাইল িরড এবং ি েয়ট করা
অ ািসে ানাস আই/ও
সারসংে প

পাঠ ১০: জাভা এন আই/ও 117


বাংলায় জাভা

# পাঠ ১১: জাভা কােলকশান মওয়াক

জাভা কােলকশান মওয়ার ভুিমকা


কােলকশান ই ারেফইস
িল
সেটট িল
ম াপ
সেটট ম াপ
নিভেগবল ম াপ
সট
সেটট সট
নিভেগবল সট
Queue এবং Deque
াক
hashCode() এবং equals()
সারসংে প

কােলকশান মওয়াক

কােলকশন মওয়াক জাভার টপ লেভর একিট এিপআই কনেস । কােলকশান মওয়াক িকছু হাইিল
অপিটমাইজড ডাটা াকচার যার মাধ েম িবিভ ডাটা মেমািরেত ার করেত পাির এবং েয়াজন মত ব াবহার
করেত পাির । মেন ক ন অ াের িনেয় কাজ করেছন । কান একিট সমেয় মেন হল আপনার অ ােরর সাইজ যেথ নয়
আপনার কােজর জন তখন িক করেবন ? মেন ক ন আপিন িলংকড িল িনেয় কাজ করেছন কান একটা সমেয়
একটা এিলেম সাচ করার েয়াজন হেলা , সাচ করেলন । দখা গল অেন ন পর রজা জানােলা য সই
এিলেম ওই িলে ই নাই । এরকম নানা রকম সমস া এবং তার সমাধান িনেয় য সব ডাটা াকচার একি ত করা
হেয়েছ স লােকই একে বলা হয় কােলকশান । কােলকশান মােন হল সমি । এিট এমন িকছু ডাটা াকচােরর
সমি য লার িতিটই িবিভ ডাটােক সমি ত কের রােখ । হ া অ ােরেকও লা লেভল এক কার কােলকশান
বলা যেত পাের তেব মডান কােলকশন মওয়ােকর মােঝ এিটেক ধরা হয়না ।

কােলকশান ই ারেফস (Collection Interface)

ই ারেফস িক সিট আপনারা খুব ভােলাভােবই জােনন । যিদ না যেন থােকন তেব চ াপটার ৫.১ পেড় আসুন ।
কােলকশান একিট ই ারেফস । যই ই ারেফেসর মধ বেল দওয়া হেয়েছ কান একিট াসেক কােলকশান
মওয়ােকর অ গত হেত গেল িক িক বিশ থাকেতই হেব । কােলশন লা সাধারনত java.util প েকেজর
অ গত ।

সবার আেগ আমােদর জানা েয়াজন কনই বা আমরা কােলকশনস িনেয় কাজ করেবা ? এিট না িনেয়ও তা কাজ
করা যেতা । তাহেল কােলকশন কন !

ওেয়ল , আপনােদর িকছু টা উ র আিম আেগই িদেয় িদেয়িছ ।

১)অ াের িনেয় কাজ করার সময় আপিন িফ ড লে র বাইের কাজ করেত পারেতন না । অ ােরর বাউ াির িফ ড
এবং এিট বাড়ােনা বা কমােনার কান সুেযাগ নই রানটাইেম । কােলকশন এই সমস ার সমাধান কেরেছ । এিটর
সাইজ আপনার েয়াজন মত বাড়ােত এবং কমােত পারেবন ।

পাঠ ১১: জাভা কােলকশান মওয়াক 118


বাংলায় জাভা

২)িলংক িল িনেয় কাজ করার সময় আপিন ইনেডে র সুিবধা পােবন না । এটা একটা বড় সমস ার কারন,
কােলকশেন আপিন ইে সুিবধা পােবন ।

৩) কবল ি িমিটভ নয়, সকল কার অবেজ এমিন একিট কােলকশেনর মােঝ আেরকিট কােলকশন িনেয় কাজ
করার মত ি িবিলিট পােবন ।

এছাড়া আেরা ব ত সুিবধা আেছ য লা কাজ করেত করেত বুেঝ যােবন ।

িনেচ কােলকশান ফ ািমিল ি দখােনার চ া করা হল ।

Collection<Interface>
Set<Interface>
HashSet
LinkedHashSet
SortedSet<Interface>
TreeSet
List<Interface>
ArrayList
Vector
LinkedList
Queue<Interface>
LinkedList
PriorityQueue

Object
Arrays
Collections

Map<Interface>
HashTable
LinkedHashMap
HashMap
SortedMap<Interface>
TreeMap

িল ( List )

িল List একিট ই ারেফস যিট সরাসির Collection ই ারেফসেক এ েট কেরেছ । এিট যেহতু একিট
ই ারেফস ( interface ) তাই আমরা সরাসির এটার কান অবেজ বা ই ট া ি েয়ট করেত পারেবা না ।
এজন অবশ আমােদর িচ ার খুব বিশ কারন নই । List ই ারেফসেক ইমি েম কেরেছ ArrayList ,
Vector এবং LinkedList াস । আমরা খুব সহেজ এ লার মাধ েম List এর অবেজ তির করেত পাির
। List হল আনসেটড অবেজ কনেটইনার যিট ডাটা ডুি েকিস সােপাট কের । মােন একই ডাটা একািধকবার
থাকেত পাের িলে র মােঝ ।

List িডে য়ার করার নানা ধাপঃ

ধাপ ১ঃ

পাঠ ১১: জাভা কােলকশান মওয়াক 119


বাংলায় জাভা

import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
List list, list2, list3;
list = new ArrayList();
list2 = new LinkedList();
list3 = new Vector();
}
}

ধাপ ২ঃ

import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list1 = new ArrayList();
ArrayList list2 = new ArrayList();
}
}

এমনিক কউ চাইেল কােলকশেনর অবেজ িনেয়ও কাজ করেত পােরন সে ে যিট করেত হেব ।

import java.util.ArrayList;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
Collection c = new ArrayList();
}
}

ওেক অেনক হেয়েছ । এবার কােজর কথায় আসা যাক । List িনেয় িকভােব কাজ করা যায় সটাইেতা জানা
হেলানা এখেনা ! ওেক আর বিশ বক বক কের আপনােদর ধেয র পরী া িনবনা । থেম আমরা দখেবা িকভােব
একিট িলে ডাটা অ াড বা অ াসাইন করেত হয় ।

িলে ডাটা ইনসাট(Insert into List)

পাঠ ১১: জাভা কােলকশান মওয়াক 120


বাংলায় জাভা

import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(7);
list.add(5);
list.add(13);
list.add(17);
list.add(3);
}
}

উপেরা কােড <Integer> িদেয় বাঝােনা হেয়েছ এই িল িট কবল ইি জার টাইপ ডাটার জন কাজ করেব ।
এিটেক জেনিরক বলা হয় । চ াপটার ৮ এ আপনােদর এ িবষেয় জানা কথা । তারপর ArrayList এর কন াকটর
িদেয় list অবেজ েক ই ট ানিশেয়ট করা হেয়েছ । add মথড এই িলে একিট একিট কের ডাটা অ াড কের
এবং একিট বুিলয়ান ভ ালু িরটান কের । যিদ কান কারেন কান ডাটা অ াড করেত ব াথ হয় তেব false ভ ালু
িরটান কের ।

add(int index, E element) মথডিট যেকান একিট এিলেম িলে র িনিদ ইনেডে ইনসাট কের ।
addAll(Collection<? Extends E> c) মথডিট ইনপুট প ারািমটার িহসােব অন কান একিট িল বা
কােলকশন িনেয় তার িতিট এিলেম একটু একিট কের এই িলে ইনসাট কের দয় । addAll(int index,
Collection<? Extends E> c) মথডিট িঠক আেগর মতই কাজ কের । িনিদ ইনেড থেক অন একিট
কােলকশনেক ইনেজ করেত থােক নতুন িলে র মােঝ ।

িল থেক ডাটা িরড করা(Read from List)

উপেরর কাড সগেম িট মেন করলাম আেছ । আমরা কবল ডাটা িরড করার জন কাডিট িলখেবা । আমরা বশ
কেয়কভােব দখেবা য িকভােব একিট িল থেক ডাটা িরড করা যায় এবং এর মাধ েম আেরা িকছু মথড স েক
জেন িনব ।

প িত ১ঃ

for(int i=0; i<list.size(); i++){

System.out.println(list.get(i));
}

এিট এেকবাের চীরাচিরত প িত হেলও বশ কাযকর । এখােন অ ােরর মত ইে িনেয় খলা করার সুেযাগ আেছ ।
size মথডিট একিট ইি জার না ার িরটান কের যিট িনেদশ কের এই িলে মাট কত লা এিলেম আেছ ।
মােন এই িলে র সাইজ কত । get মথডিট একিট ইি জার না ার ইনপুট িহসােব নয় এবং সই ইে ে র
এিলেম িট িরটান কের । এমন কান ইনেড যিদ ইনপুট িহসােব দওয়া হয় যিট এই িলে র সাইেজর মােঝ পেড়না
তাহেল java.lang.IndexOutOfBoundsException এে পশন া করেব ।

প িত ২ঃ

পাঠ ১১: জাভা কােলকশান মওয়াক 121


বাংলায় জাভা

for(int x: list){

System.out.println(x);
}

এিট এেকবাের চীরাচিরত প িত থেক একটু আধুিনক । এনহ া ফর লুপ । এই প িতেত এনহ া ফর লুপ িল
থেক একিট একিট এিলেম িত এিলেমে িপক কের x ভ ািরেয়বেলর মােঝ রফার করেছ এবং সিটই আমােদর
সামেন দিশত হে ।

প িত ৩ঃ

Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

এিট আেরা একটু মডােরট প িত । এই প িতেত থেমই Iterator ই ারেফেসর একিট ই ট া ি েয়ট করা
হে িলে র iterator মথডিট কল কের । এই মথডিট একিট ইটােরটর অবেজ িরটান কের যিট এই িলে
টপ টু বটম ইটােরট করেত পাের । ইটােরটেরর hasNext মথডিট একিট বুিলয়ান ভ ালু িরটান কের । িত
ইটােরশেনর পর স বেল দয় এর পর আর কান এিলেম অবিশ আেছ িক না । ইটােরটেরর next মথডিট
িতবার নতুন একিট এিলেম ভাইড কের এবং এিটর কাউ ার পেয় ার তার পেরর ইনেডে িশ ট কের । যােত
কের পেররবার নতুন একিট এিলেম িরটান করেত পাের ।

প িত ৪ঃ

list.forEach((x) -> {
System.out.println(x);
});

হাল আমেলর আেলািচত প িত । এিটেক বলা হয় ফাংশনাল অপােরশন । জিডেক ৮ এ এিটেক পিরিচত করােনা
হেয়েছ । অেনকটা ফাংশনাল া ািমং এর মত কেরই িডজাইন করা করা । forEach মথডিট একিট একিট কের
এিলেম াভাস কের যায় এবং তােক য কাজ করেত বলা হয় িঠক সই কাজিটই কের বেস থােক । :D দা ন মজার
এই ফাংশনার অপােরশন ।

িলে র ভ ালু িরে স করা

কান একিট িল থেক খুব সহেজই একিট ভ ালু িরে স কের দওয়া যায় । set(int index, E element)
মথডিট ২ িট ইনপুর প ারািমটার নয় । থেম য ইনেডে র ভ ালু িরে স করেত হেব সিট এবং তার পের য
অবেজ িদেয় সই ান পূরন করেত হেব সিট।

list.set(2, Integer.MAX_VALUE);

িল থেক িডিলট করা

পাঠ ১১: জাভা কােলকশান মওয়াক 122


বাংলায় জাভা

খুব চিলত ২ উপােয় িল থেক কান একিট এিলেম িডিলট বা িরমুভ কের দওয়া যায় । একিট হল কান একিদ
এিলেম বা অবেজ কান ইনেডে আেছ সটা জানা এবং সই ইনেড েক িরমুভ কের দওয়া । অথবা য
অবেয িট িরমুভ করেত চাওয়া হে সই অবেয িট িদেয় বলা সিট িডিলট করেত । চলুন দিখ সিট িকভােব করা
যায়ঃ

প িত ১ঃ

list.remove(2);

এই প িত আপিন ি িমিটভ ইি জার না ার না ার ইনপুট প ারািমটার িহসােব পাস করেছন । অথাৎ remove
মথডিট এিটেক ইনেড িহসােব িবেবচনা করেব । যিদ 2 না ার ইনেডে অন কান না ার থােক এবং ২ িলে
উপি ত থােক তার পেরও স ২ না ার ইনেডে র ভ ালুিটেক িরমুভ করেব এবং ওই ইনেডে র ভ ালুিট িরটান করেব

প িত ২ঃ

list.remove(new Integer(13));

এই প িতেত আপনার িল িট য টাইেপর অবেজ কনেটইন করেছ সই টাইেপর একিট অবেজ িদেল সিটেক
িডিলট করার চ া করেব । যিদ উ অবেজ উপি ত থােক িডিলট করেব এবং true ভ ালু িরটান করেব
অন থায় false িরটান করেব ।

িল স িকত িকছু মথড(Some methods of List)

clear মথডিট উ িল থেক সব এিলেম িরমুভ কের দয় । contains মথডিট একিট অবেজ ইনপুট
িহসােব নয় এবং চক কের য উ অবেজ ির িলে েজ িক না । indexOf মথসিট একিট অবেজ ইনপুট
িহসােব নয় এবং যিদ সই অবেজ িট ওই িলে েজ থােক তেব তার ইনেড িরটান কের । অন থায় -১ িরটান
কের । sort নামক একিট মথড আেছ যিট ইনপুট প ারািমটার িহসােব ক ােরটর অবেজ িনেয় িল িট সই
অনুযায়ী সট কের ।

এরকম আেরা বশ িকছু মথড এবং তােদর িব র ব াখ া ওরাকেলর অিফিসয়াল ডকুেমে শন সাইেট পাওয়া যােব ।
আ হীরা সখান থেক দেখ িনেত পােরন । িলংকঃ
http://docs.oracle.com/javase/8/docs/api/java/util/List.html

িল সট করা(Sort a List)

কান একিট িল েক সট করার চেয় সহজ িবষয় আর িকছু হেতই পােরনা । তেব সমস া হল একিট িল েক সট
করার নানািবধ উপায় থাকায় আপিন কনিফউজ হেয় যেত পােরন য আসেল ক ন কান প িতেত সট করেবন ।
আিম িনেজও মােঝ মােঝ কনিফউজ হেয় যাই । যাইেহাক আমরা িল সিটং এর এেকবাের বিসক থেক ধীের ধীের
সামেনর িদেক এিগেয় যাব । বেল রাখা ভােলা আমরা এখােন বিসক ািল ২ কােরর সিটং টকিনক দখেবা এবং
তােদর আবার ২ কার সাব সিটং টকিনক দখেবা । আ হীরা আেরা িকছু টা ঘাটাঘািট করেল আেরা অেনক িকছু ই
জানেত পারেব ।

প িত ১ঃ

পাঠ ১১: জাভা কােলকশান মওয়াক 123


বাংলায় জাভা

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {

public static void main(String[] args) {

List<Integer> list = new ArrayList<>();


list.add(7);
list.add(5);
list.add(13);
list.add(17);
list.add(3);

Collections.sort(list);

list.forEach((x) -> {
System.out.println(x);
});
}
}

এখােন আমরা Collections ােসর একিট মথড sort যিট ইনপুট প ারািমটার িহসােব একিট িল অবেজ
নয় এবং সিটেক ইনে স সট কের দয় । অথাৎ এই মথেডর িরটান টাইপ ভেয়ড । এবং এিট অ ােসি ং ( ছাট
থেক মা েয় বড় ) অডাের সট কের ।

আমরা যিদ িডেসি ং অডাের সট করেত চাই তেব আমােদর আেরকটু কাজ বিশ করেত হেব । আর সিট হল
sort নামক মথেড আেরকিট প ারািমটার পাস করেত হেব যিট আসেল একিট Comparator অবেজ । যটার
মাধ েম আমরা বেল িদব য আসেল সটিট কান অডাের হেব বা কান এিলেমে র সােপে হেব । কাডিটেক
সে ে আমরা এভােব িলখেত পারতাম,

পাঠ ১১: জাভা কােলকশান মওয়াক 124


বাংলায় জাভা

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {

public static void main(String[] args) {

List<Integer> list = new ArrayList<>();


list.add(7);
list.add(5);
list.add(13);
list.add(17);
list.add(3);

Comparator<Integer> comparator = new Comparator<Integer>() {


@Override
public int compare(Integer t1, Integer t2) {
return t2-t1;
}
};

Collections.sort(list, comparator);

list.forEach((x) -> {
System.out.println(x);
});
}
}

উে খ এখােন Comparator একিট ই ারেফস এবং এবং compare একিট abstract মথড তাই আমােদর
এিটেক ইমি েম করেত হেয়েছ । compare মথডিট একিট ইি জার না ার িরটান কের । দুিট অ াি িবউেটর
মােঝ কে য়ার কের পেজিটভ, নেগিটভ বা ন িরটান কের । ন িরটান করা মােন দুিট সমান । পেজিটভ িরটান
করা মােন থমিট বড় আর অন থায় ছাট । আমরা আলাদা ভােব Comparator এর অবেজ ি েয়ট না কেরও
কাজিট করেত পারতাম ইনে েস । সে ে এরকম হেত পারত,

Collections.sort(list, new Comparator<Integer>() {


@Override
public int compare(Integer t, Integer t1) {
return t1-t;
}
});

বতমান সময় যেহতু ল ামডা এ ে শেনর যুগ চলেছ তাই এিটেক আেরা সহেজ এবং খুব সংে েপ এভােবও লখা
যত,

পাঠ ১১: জাভা কােলকশান মওয়াক 125


বাংলায় জাভা

Collections.sort(list, (Integer t1, Integer t2) -> t2-t1);

কাজ বিসক ািল সব একই ভােব করেছ ।

এত ন আমরা দখলাম ি িমিটভ টাইেপর ডাটার একিট িল সট করা । এমনেতা হেতই পাের য আপনার কােছ
একিট কা টাইেপর অবেজ কনেটইন কের এমন একিট িল সট করেত হেব ওই অবেজে র িনিদ কান এক বা
একািধক পািটর সােপে । সে ে করনীয় িক সটা এবার চলুন দেখ ফিল ।

পাঠ ১১: জাভা কােলকশান মওয়াক 126


বাংলায় জাভা

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Employee {

int id;
String name;
int age;
int salary;

public Employee(int id, String name, int age, int salary) {


this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
}

public class Main {

public static void main(String[] args) {

List<Employee> list = new ArrayList<>();


list.add(new Employee(1, "Abul", 27, 35000));
list.add(new Employee(2, "Babul", 25, 37000));
list.add(new Employee(3, "Kabul", 29, 30000));
list.add(new Employee(4, "Mofiz", 24, 36000));
list.add(new Employee(5, "Hafiz", 28, 34000));

Collections.sort(list, new Comparator<Employee>(){


@Override
public int compare(Employee t, Employee t1) {
return t.age - t1.age;
}
});

list.forEach((x) -> {
System.out.println(x.salary);
});
}
}

িঠক আেগর মতই কাজ করেত পারেবন । তেব এখােন অবেজ িনেয় কাজ করেত হেব । এবং অবেজে র কান
িফে র রসেপে সট করেত চাে ন সটাও িডফাইন কের িদেত হেব । অ ােসি ং বা িডেসি ং যেকান ভােবই সট
করেত পারেব । এমনিক একািধক িফে র রসেপে যিদ সট করেত চান সটাও করেত পারেব । আপনারা চাইেল
ল ামডা এ ে শন ব াবহার করেত পারেতন সে ে এরকম হেতা কাডিট,

পাঠ ১১: জাভা কােলকশান মওয়াক 127


বাংলায় জাভা

Collections.sort(list, (Employee t, Employee t1) -> t1.age – t.age);//descending order

এবার আমরা একটু িভ একটা প িত দখেবা । যিদ এমন হয় য আমােদর এই াসিট ায়ই সট করেত হয় এবং
িনিদ একটা অডাের সট করেত হয় , সে ে আমরা একটা িবেশষ কাজ করেত পাির । আমরা Comparable
ই ারেফসিট ইমি েম করেত পাির । Comparable ই ারেফেসর মােঝ compareTo মথডিট অভাররাইড
করেলই কাজ শষ । অ ােসি ং বা িডেসি ং আেগর মতই । তেব চলুন দিখ িকভােব সিট করা যায় সিট দেখ
ফিল ।

পাঠ ১১: জাভা কােলকশান মওয়াক 128


বাংলায় জাভা

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Employee implements Comparable<Employee> {

int id;
String name;
int age;
int salary;

public Employee(int id, String name, int age, int salary) {


this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}

@Override
public int compareTo(Employee t) {
return this.age - t.age;
}
}

public class Main {

public static void main(String[] args) {

List<Employee> list = new ArrayList<>();


list.add(new Employee(1, "Abul", 27, 35000));
list.add(new Employee(2, "Babul", 25, 37000));
list.add(new Employee(3, "Kabul", 29, 30000));
list.add(new Employee(4, "Mofiz", 24, 36000));
list.add(new Employee(5, "Hafiz", 28, 34000));

Collections.sort(list);

list.forEach((x) -> {
System.out.println(x.id + ", " + x.name + ", " + x.age + ", " + x.salary);
});
}
}

এভােব খুব সহেজই আমরা একিট অবেজে র িল সট করেত পাির । তেব একিট িবষয় ল করার মত িবষয় হে
য আপনােদর য ২ কােরর সট দখােনা হেয়েছ অবেজে র িলে র ে এই দুই কার িক একে ও ব াবহার
করেত পারেবন । তেব সে ে ােয়ািরিট পােব াজার ফাংশন । চলুন দিখ িবষয়টা িক একটু দেখ নই ।

পাঠ ১১: জাভা কােলকশান মওয়াক 129


বাংলায় জাভা

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Employee implements Comparable<Employee> {

int id;
String name;
int age;
int salary;

public Employee(int id, String name, int age, int salary) {


this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}

@Override
public int compareTo(Employee t) {
return this.age - t.age;
}
}

public class Main {

public static void main(String[] args) {

List<Employee> list = new ArrayList<>();


list.add(new Employee(1, "Abul", 27, 35000));
list.add(new Employee(2, "Babul", 25, 37000));
list.add(new Employee(3, "Kabul", 29, 30000));
list.add(new Employee(4, "Mofiz", 24, 36000));
list.add(new Employee(5, "Hafiz", 28, 34000));

Collections.sort(list, ((Employee e1, Employee e2) -> (e2.salary + e1.salary)));

list.forEach((x) -> {
System.out.println(x.id + ", " + x.name + ", " + x.age + ", " + x.salary);
});
}
}

এখােন যিদও Employee াস Comparable ই ারেফস ইমি েম কেরেছ এবং compareTo মথেড বেল
দওয়া হেয়েছ age এর অ ােসি ং অডাের সট করেত হেব িক এিট সট করেব salary এর িডেসি ং অডাের ।
কন সটা করেছ সটা িন য় বুঝেত পেরেছন ।

আপনারা চাইেল িক List এর অ গত sort মথড ব াবহার কেরও সট করেত পারেতন । সটা করার জন খুব
বিশ িকছু ই করেত হতনা । সিট অলেরিড আপনারা জােনন িকভােব সিট করা যায় ।

পাঠ ১১: জাভা কােলকশান মওয়াক 130


বাংলায় জাভা

list.sort(new Comparator<Employee>(){
@Override
public int compare(Employee t, Employee t1) {
return t1.age - t.age;
}

});

বিসক ািল এভােব খুব সহেজই একিট িল সট করা যায় । আপনারা আেরা বিশ আ হী হেল ওরাকেলর
ডকুেমে শন পড়েত পােরন । আেরা বিশ পির ার হেব ধারনা ।

–-------চলেব--------

পাঠ ১১: জাভা কােলকশান মওয়াক 131


বাংলায় জাভা

পাঠ ১২: জাভা জিডিবিস


জিডিবিস ভূিমকা
জিডিবস াইভার এবং টাইপস
কােনকশান
কুেয়ির
রজা েসট
ি েপয়ার াটেম
ানেসকশান
সারসংে প

পাঠ ১২: জাভা জিডিবিস 132


বাংলায় জাভা

পাঠ ১৩: জাভা লিগং


সাধারণ ব বহার
লগার
লাগার হাইআরিক
লগ লেভলস
ফরেমটারস
িফ ারস
কনিফগােরশান
সারসংে প

পাঠ ১৩: জাভা লিগং 133


বাংলায় জাভা

পাঠ ১৪: িডবািগং


িডবািগং া
িডবাগার িদেয় িডবািগং
ক পেয় এবং ভ ািরেয়বলস
াপস এবং পস
িডবািগং িটপস
সারসংে প

পাঠ ১৪: িডবািগং 134


বাংলায় জাভা

পাঠ ১৫: ািফক াল ইউজার ই ারেফইস


সুইং
কনেটইনার, কে ােন , ইেভ , িলেসনার এবং লআউট
কািডং উদাহরণ এবং ব াখ া
সারসংে প

পাঠ ১৫: ািফক াল ইউজার ই ারেফইস 135


বাংলায় জাভা

পাঠ-১৬: ড
ড িক
ড কন াকশন
রােনবল ই ারেফস
ড মথড
ড ই ােরপশান
ড প
ড িজওিলং
ড সইফিট
ড পুল
সারসংে প

পাঠ-১৬: ড 136
বাংলায় জাভা

পাঠ ১৭: নটওয়ািকং


সেকট
ােয় /সাভার
িটিসিপ
ইউিডিপ
পাট
ইউআরএল
একিট চ াট া াম কািডং উদাহরণ
সারসংে প

পাঠ ১৭: নটওয়ািকং 137


বাংলায় জাভা

পাঠ ১৮: জাভা কনকােরি


ভূিমকা
বিনিফট

রস কি শান এবং ি িটকাল সকশান
ড সইফিট এবং শয়াড িরেসাস
ড সইফিট এবং ইমুট িবিলিট
িসনে ানাইেজশান ক
ডড লক এবং েভনশান
িরড/রাইট লকস
সমােফার
িকং িকও
ড পাল
কে ািলং এি িকউশান
মেডিলং টা
ScheduledThreadPoolExecutor
ফক/জেয়ন মওয়াক
একিট িস ল ফক/জেয়ন উদাহরণ
ফকজেয়নটা এবং ওয়াক ি িলং
Parallelizing problems
জাভা মমরী মেডল
সারসংে প

পাঠ ১৮: জাভা কনকােরি 138


বাংলায় জাভা

পাঠ ১৯: াস ফাইল এবং বাইটেকাড


াসেলািডং এবং াস অবেজ
MethodHandle
MethodType
Looking up method handles
Examining class files
বাইটেকাড
disassembling a class
রানটাইম ইনভারনেম
অপেকাড
লাড অপেকাড
অ ািরথম ািটক অপেকাড
Execution control opcodes
Invocation opcodes
Platform operation opcodes
উদাহরণ—string concatenation
Invokedynamic
ইনেভাটডাইনািমক িক এবং িকভােব কাজ কের
উদাহরণ

পাঠ ১৯: াস ফাইল এবং বাইটেকাড 139


বাংলায় জাভা

পাঠ ২০: Understanding performance tuning


টারিমনলিজ
Latency
Throughput
Utilization
Efficiency
Capacity
Scalability
Degradation
াগেমিটং এে াচ
মুরস-ল
মমরী ল ােটি হাইআরিক
কন জাভা পারফরেম িটউিনং কন কিঠন
হাডওয় ার কস
কস ািড
গারেবজ কােল র
Mark and sweep
Jmap
JVM প ারািমটার
িরিডং িজিস লগস
িভজুয়ালিভএম
এসেকপ এনালাইিসস
Concurrent Mark-Sweep
G1—Java’s new collector
হট ট িদেয় িজট(JIT) ক াইেলশন
Inlining methods
Dynamic compilation and monomorphic calls
Reading the compilation logs

পাঠ ২০: Understanding performance tuning 140


বাংলায় জাভা

পাঠ ২১: মডান জাভা ইউেজস


রিপড ওেয়ব ডেভলপেম
জাভা মওয়ারক
ি ং
GWT
Struts 2
Wicket
Tapestry
JSF
Vaadin
Play
Plain old JSP /Servlet
অন ন জিভএম ল াং েয়জ
ইলস
াজার
লা
আরেলং
সারসংে প

পাঠ ২১: মডান জাভা ইউেজস 141


বাংলায় জাভা

অনুশীলন # ১
Design a class named Point which will model a 2D point with X and Y coordinates.

1. Two instance variable variables X ( int ) and X ( int )


2. A "no-argument" (or "no-arg") constructor that construct a point at (0, 0) .
3. A constructor that constructs a point with the given x and y coordinates.
4. Getter and setter for the instance variables x and y.
5. A method setXY() to set both x and y.
6. A toString() method that returns a string description of the instance in the format "
(x, y)" .

7. A method called distance(int x, int y) that returns the distance from this point to
another point at the given (x, y) coordinates.
8. An overloaded distance(Point another) that returns the distance from this point to the
given Point instance another.

For example -

package bd.com.howtocode.java;

/**
* @author Bazlur Rahman Rokon
* @date 6/19/15.
*/

public class Point {


private int x;
private int y;

public Point() {
x = 0;
y = 0;
}

public Point(int x, int y) {


this.x = x;
this.y = y;
}

public int getX() {


return x;
}

public void setX(int x) {


this.x = x;
}

অনুশীলন 142
বাংলায় জাভা

public int getY() {


return y;
}

public void setY(int y) {


this.y = y;
}

public double distance(int x, int y) {


int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff * xDiff + yDiff * yDiff);
}

public double distance(Point p2) {


return distance(p2.getX(), p2.getY());
}

@Override
public String toString() {
return "(" + x + ", " + ")";
}
}

Now write a program that allocates 10 points in an array of Point , and initializes to (1, 1),
(2, 2), ... (10, 10).

অনুশীলন 143

You might also like