ভূমিকা
জাভা বর্তমানে বহুল ব্যবহৃত একটি বহুমুখী প্রোগ্রামিং ভাষা। এটি ২১ বছর আগে সান মাইক্রো সিস্টেমে তৈরি হয়। এন্টারপ্রাইজ অ্যাপ্লিকেশন তৈরির ক্ষেত্রে এর বিকল্প এখনো সেভাবে তৈরি হয় নি বলে ধরা হয়। জাভার জনপ্রিয়তার মূল কারণ এর পোর্টেবিলিটি (Portability), নিরাপত্তা এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ও ওয়েব প্রোগ্রামিংয়ের পরিপূর্ণ সাপোর্ট। এই বইটির মূল উদ্দেশ্য হচ্ছে জাভা প্রোগ্রামিং ভাষার মৌলিক বিষয়বস্তুগুলো নিয়ে আলোচনা করা।
বইটি লেখার পেছনে আমার চার বছরের পেশাগত অভিজ্ঞতা অনেকভাবে সাহায্য করেছে। এছাড়াও ২০১৩ থেকে ২০১৪ পর্যন্ত দু–বছর ঢাকা বিশ্ববিদ্যালয়ের তথ্য প্রযুক্তি ইনস্টিটিউটে অবজেক্ট ওরিয়েন্টেড কনসেপ্টের সঙ্গে জাভা প্রোগ্রামিং ভাষা পড়ানোর সুবাদে ছাত্রছাত্রীদের সঙ্গে যে ইন্টারঅ্যাকশন হয়েছে এবং এর ফলে যে অভিজ্ঞতা সঞ্চিত হয়েছে তারও খানিকটা এই বইয়ে প্রতিফলিত হয়েছে।
বইটি ঠিক একাডেমিক ধাঁচে লেখা হয়নি, বরং একজন নব্য শিক্ষার্থীর জাভা প্রোগ্রামিং ভাষার যে যে বিষয়গুলোর দিকে নজর দেওয়া উচিৎ সে বিষয়গুলোই এই বইয়ে আলোকপাত করার চেষ্টা করা হয়েছে। বইটি মূলত যারা ইতিমধ্যে একটি প্রোগ্রামিং ভাষা যেমন সি প্রোগ্রামিং ভাষা জানে এবং নতুন একটি প্রোগ্রামিং ভাষা বিশেষ করে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা শিখতে চায় তাদের উদ্দেশ্য করে লেখা হয়েছে।
বইটিতে প্রচুর উদাহরণ এবং প্রতিটি অধ্যায়ের শেষে অনুশীলন করার জন্য বেশ কিছু প্রশ্ন ও প্রোগ্রামিং সমস্যা দেওয়া হয়েছে। তাই বইটি শুধুমাত্র পড়ে চলে গেলে চলবে না, এর সঙ্গে সঙ্গে উদাহরণগুলো দেখে দেখে টাইপ করে কম্পাইল করতে হবে, রান করে উদাহরণগুলোর আউটপুটগুলো নিয়ে চিন্তাভাবনা করে বোঝার চেষ্টা করতে হবে।
এই বইটি সম্পূর্ণ নয়। এতে অনেকগুলো বিষয় খুবই গুরুত্বপূর্ণ হওয়া সত্যেও বাদ দেওয়া হয়ছে। যেমন – থ্রেড (Thread), জাভা মেমোরি মডেল (Java Memory Model), অ্যানোটেশন প্রসেসিং (Annotation Processing), ল্যামডা এক্সপ্রেশন (Lambda Expression), নেটওয়ার্কিং (Networking) ইত্যাদি। তবে এগুলো এই বইয়ের পরবর্তী খণ্ডে যুক্ত করার ইচ্ছা পোষণ করছি।
বাংলাতে প্রোগ্রামিং ভাষার বই অনেকেই পছন্দ করেন না। এই অপছন্দের পেছনে খুব ভালো যুক্তি নিশ্চয়ই রয়েছে, তবে আমার বরাবরই মনে হয়েছে, মাতৃভাষায় কোনো কিছু শেখার আনন্দ সবসময়ই বেশি। বিদেশি ভাষার বিরুদ্ধে গিয়ে এই বইটি লেখা নয়, বরং টেকনোলজির মতো কঠিন ব্যাপারগুলো যদি নিজের ভাষায় সবাই শিখতে পারে, তাহলেই ব্যাপারটি দেশের সবার জন্যই মঙ্গলজনক হয় বলে আমি মনে করি। পৃথিবীর অনেক উন্নত দেশের শিক্ষার্থীরা তাদের নিজেদের ভাষাতেই টেকনোলজি নিয়ে পড়াশোনা করে থাকে। তাদের কাছাকাছি হয়তো এখনই আমরা যেতে পারব না, কিন্তু হাঁটি হাঁটি পা পা করেই হয়তো একদিন অনেক কন্টেন্ট বাংলাতে তৈরি হয়ে যাবে।
বইটি বেশ তাড়াহুড়ো করে লেখা (তামিম শাহরিয়ার সুবিন ভাইয়ের তাগাদাতে) এবং এটিই আমার লেখা প্রথম বই। এতে ভুলভ্রান্তি থাকাটা খুবই স্বাভাবিক। এক্ষেত্রে পাঠককে অবশ্যই সেগুলো ধরিয়ে দেওয়ার অনুরোধ থাকবে যাতে পরবর্তী সংস্করণে সেগুলো ঠিক করে নেওয়া যায়।
বইটি পাওয়া যাবে –
প্রাপ্তিস্থান
রকমারি ডট কম, ফোন: ১৬২৯৭
হক লাইব্রেরী, নীলক্ষেত, ঢাকা, ফোন: ০১৮২০-১৫৭১৮১
মানিক লাইব্রেরী, নীলক্ষেত, ঢাকা, ফোন: ০১৭৩৫-৭৪২৯০৮
রানা বুক পাবলিশার্স, নীলক্ষেত, ঢাকা, ফোন: ০১৬২৩-০৫৮৪২৮
অন্যরকম প্রকাশনী, ঢাকা
সূচীপত্র
লেখকের কথা
লেখক পরিচিতি
অধ্যায় শূন্য: উপক্রমণিকা
অধ্যায় এক: প্রথম জাভা প্রোগ্রাম
- ১.১ – প্রোগ্রামিং ভাষা কী?
- ১.২ – কেন জাভা?
- ১.৩ – জাভা কীভাবে কাজ করে?
- ১.৩.১ – বাইটকোড (Bytecode)
- ১.৩.২ – জাভা ভার্চুয়াল মেশিন (JVM)
- ১.৩.৩ – জাস্ট ইন টাইম (JIT) কম্পাইলার
- ১.৩.৪ – আরও কিছু টার্মিনোলোজি
- ১.৩.৫ – জাভা প্ল্যাটফর্মের সাবসেট
- ১.৪ – জাভা ইনস্টল (Install) করা
- ১.৪.১ – উইন্ডোজে জাভা ইনস্টল করা
- ১.৪.২ – উইন্ডোজের প্রথম জাভা প্রোগ্রাম
- ১.৪.৩ – লিনাক্সে জাভা ইনস্টল করা
- ১.৪.৪ – লিনাক্সে প্রথম জাভা প্রোগ্রাম
- ১.৫ – আইডিই (IDE) এর ব্যবহার
- ১.৬ – আরও কয়েকটি সহজ প্রোগ্রাম
- ১.৬.১ – যোগ, বিয়োগ, গুন, ভাগ করার প্রোগ্রাম
- ১.৬.২ – ইনপুট নেওয়া
- ১.৭ – অনুশীলনী
অধ্যায় দুই: সিনট্যাক্স (Syntax)
- ২.১ – অবজেক্ট (Object) ও ক্লাস (Class)
- ২.১.১ – অবজেক্ট (Object)
- ২.১.২ – অবজেক্ট (Object)
- ২.২ – জাভা প্রোগ্রামের উপাদানসমুহ
- ২.৩ – জাভা মেথড (Java Method)
- ২.৪ – অবজেক্ট ইনস্ট্যান্সিয়েশন (Object Instantiation)
- ২.৫ – মেথড ওভারলোডিং (Method Overloading)
- ২.৬ – কনস্ট্রাক্টর (Constructor)
- ২.৭ – মেথডের ব্যবহার
- ২.৮ – প্রিন্টিং (Printing)
- ২.৯ – প্যারামিটার (Parameter) ও আর্গুমেন্ট (Argument)
- ২.১০ – প্যাকেজ নাম (Package Name) ও ডিরেক্টরি স্ট্রাকচার (Directory Structure)
- ২.১১ – প্যাকেজ ইমপোর্ট (Import) করা
- ২.১৩ – আরও কিছু নিয়ম
- ২.১৪ – অনুশীলনী
অধ্যায় তিন: ডেটা টাইপ (Data Type), অপারেটর (Operator) এবং এক্সপ্রেশন (Expression)
- ৩.১ – ভ্যারিয়েবল (Variable)
- ৩.২ – ভ্যারিয়েবল প্রিন্ট করা
- ৩.৩ – ডেটা টাইপ (Data Type)
- ৩.৩.১ – প্রিমিটিভ টাইপ (Primitive Type)
- ৩.৪ – র্যাপার ক্লাস (Wrapper Class)
- ৩.৫ – লিটারেল (Literal)
- ৩.৫.১ – ইন্টিজার লিটারেল (Integer Literal)
- ৩.৫.২ – ফ্লোটিং পয়েন্ট লিটারেল (Floating Point Literal)
- ৩.৫.৩ – ক্যারেক্টার (Character) ও স্ট্রিং লিটারেল (String literal)
- ৩.৫.৪ – স্যাংখিক (Numeric) লিটারেলে আন্ডারস্কোর চিহ্নের ব্যবহার
- ৩.৫.৫ – এসকেপ সিকোয়েন্স (Escape Sequence)
- ৩.৬ – অপারেটর (Operator)
- ৩.৬.১ – অ্যাসাইনমেন্ট অপারেটর (Assignment Operator)
- ৩.৬.২ – অ্যারিথমেটিক অপারেটর (Arithmetic Operator)
- ৩.৬.৩ – ইন্টিজার সংখ্যার ভাগ অপারেশন (Integer Division) ও ফ্লোটিং পয়েন্ট সংখ্যার ভাগ অপারেশন (Floating Point division)
- ৩.৬.৪ – রাউন্ডিং ত্রুটি বা এরর (Rounding Error)
- ৩.৬.৫ – স্ট্রিং অপারেশন (String Operation)
- ৩.৬.৬ – ইউনারি (Unary) অপারেটর
- ৩.৬.৭ – ইকুয়ালিটি (Equality) এবং রিলেশনাল (Relational) অপারেটর
- ৩.৬.৮ – ওভারফ্লো (Overflow) / আন্ডারফ্লো (Underflow)
- ৩.৬.৯ – টাইপ কনভার্সন (Type Conversion) / টাইপ কাস্টিং (Type Casting)
- ৩.৭ – এক্সপ্রেশন (Expression), স্টেটমেন্ট (Statement) এবং ব্লক (Blocks)
- ৩.৭.১ – এক্সপ্রেশন (Expression)
- ৩.৭.২ – স্টেটমেন্ট (Statement)
- ৩.৭.৩ – ব্লক (Block)
- ৩.৭.৪ – ভ্যারিয়েবল স্কোপ (Scope of a Variable)
- ৩.৮ – অনুশীলনী
অধ্যায় চার: কন্ট্রোল ফ্লো (Control Flow), লুপিং (Looping) ও ব্রাঞ্চিং (Branching)
- ৪.১ – ডিসিশন মেকিং স্টেটমেন্ট (Decision Making Statement)
- ৪.১.১ – If, If-else, if-else-if
- ৪.১.২ – নেস্টেড (Nested) If-else
- ৪.১.৩ – সুইচ (Switch)
- ৪.২ – লুপ (Loop)
- ৪.২.১ – While লুপ
- ৪.২.২ – For লুপ
- ৪.২.৩ – Do-While লুপ
- ৪.৩ – ব্রেক (break) এবং কন্টিনিউ (continue)
- ৪.৪ – রিটার্ন (return) স্টেটমেন্ট
- ৪.৫ – অনুশীলনী
অধ্যায় পাঁচ: অ্যারে (Array)
- ৫.১ – অ্যারে ডিক্লেয়ারেশন (Array Declaration), ক্রিয়েশন (Creation) এবং অ্যাকসেস (Access)
- ৫.২ – মাল্টি-ডাইমেনশনাল অ্যারে (Multi-Dimensional Array)
- ৫.৩ – এনহ্যান্সড (Enhanced) For লুপ বা For-Each লুপ
- ৫.৪ – অ্যারে কপি করা (Copying)
- ৫.৫ – অনুশীলনী
অধ্যায় ছয়: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object Oriented Programming)
- ৬.১ – অবজেক্ট (Object) ও ক্লাস (Class)
- ৬.১.১ – অবজেক্ট (Object)
- ৬.১.২ – ক্লাস (Class)
- ৬.২ – অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object Oriented Programming)
- ৬.২.১ – অবজেক্ট অরিয়েন্টেডেট প্রোগ্রামিংয়ের প্রয়োজনীয়তা এবং উৎপত্তি
- ৬.৩ – ইনহেরিটেন্স (Inheritence)
- ৬.৩.১ – ফাইনাল ক্লাস (Final Class)
- ৬.৩.২ – মেথড ওভাররাইডিং (Method Overriding)
- ৬.৩.৩ – অ্যানোটেশন (Annotation) @Override
- ৬.৩.৪ – super কিওয়ার্ড
- ৬.৩.৫ – ফাইনাল (Final) মেথড
- ৬.৩.৬ – অবজেক্ট কম্পোজিশন (Object Composition)
- ৬.৪ –পলিমরফিজম (Polymorphism)
- ৬.৪.১ –ভ্যারিয়েবল টাইপ এবং অবজেক্ট টাইপ
- ৬.৪.২ –আপ-কাস্টিং (Upcasting) এবং ডাউনকাস্টিং (Downcasting)
- ৬.৫ – অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেস (Abstract class & interface)
- ৬.৫.১ – অ্যাবস্ট্রাক্ট ক্লাস (Abstract class)
- ৬.৫.২ – অ্যাবস্ট্রাক্ট মেথড (Abstract Method)
- ৬.৫.৩ – অ্যাবস্ট্রাক্ট ক্লাস এবং অ্যাবস্ট্রাক্ট মেথডের কতগুলো নিয়ম
- ৬.৫.৪ – ইন্টারফেস (Interface)
- ৬.৫.৫ – ইন্টারফেস বনাম অ্যাবস্ট্রাক্ট
- ৬.৬ – এনক্যাপসুলেশন (Encapsulation)
- ৬.৬.১ – ডিফল্ট অ্যাকসেস (Default Access)
- ৬.৬.২ – প্রাইভেট অ্যাকসেস মডিফায়ার (Private Access Modifier) – private
- ৬.৬.৩ – পাবলিক অ্যাকসেস মডিফায়ার (Public Access Modifier) – public
- ৬.৬.৪ – প্রোটেক্টেড অ্যাকসেস মডিফায়ার (Protected Access Modifier) – protected
- ৬.৬.৫ – অ্যাকসেস লেভেল টেবিল
- ৬.৬.৬ – এনক্যাপসুলেশন সংক্রান্ত জরুরী কিছু বিষয়
- ৬.৭ – অনুশীলনী
অধ্যায় সাত: জাভা এক্সেপশন হ্যান্ডেলিং (Java Exception handling)
- ৭.১ – try ব্লক
- ৭.২ – catch ব্লক
- ৭.৩ – finally ব্লক
- ৭.৪ – জাভা এক্সেপশন হায়ারার্কি (Java Exception Hierarchy)
- ৭.৫ – চেকড এক্সেপশন (Checked Exception) ও আনচেকড এক্সেপশন (Unchecked Exception)
- ৭.৫.১ – আনচেকড এক্সেপশন (Unchecked Exception)
- ৭.৫.২ – চেকড এক্সেপশন (Checked Exception)
- ৭.৫.৩ – চেকড এক্সেপশন এবং জাভা কম্পাইলার
- ৭.৬ – এক্সেপশন ডিক্লেয়ারেশন (Exception Declaration) ও থ্রোয়িং (Throwing)
- ৭.৭ – এক্সেপশন থেকে তথ্য সংগ্রহ করা
- ৭.৮ – স্ট্যাক-ট্রেস (Stack Trace)
- ৭.৯ – মেথড কল স্ট্যাক ও এক্সেপশন (Method Call Stack & Exception)
- ৭.১০ – সাধারণ এক্সেপশন ক্লাস
- ৭.১১ – ইউজার ডিফাইনড এক্সেপশন (User Defined Exception)
- ৭.১২ – ফল্ট টলারেন্ট সিস্টেম (Fault Tolerant System) এর জন্য জাভা এক্সেপশন
- ৭.১৩ – অনুশীলনী
অধ্যায় আট: জেনেরিকস (Generics)
- ৮.১ – জাভাতে জেনেরিকস
- ৮.২ – জেনেরিকস (Generics) এবং সাবটাইপিং (Subtyping)
- ৮.৩ – বাউন্ডেড টাইপ (Bounded Types)
- ৮.৪ – ওয়াইল্ডকার্ড আর্গুমেন্ট (Wildcard Arguments)
- ৮.৫ – জেনেরিক মেথড (Generic Method)
- ৮.৬ – টাইপ ইরেইজার (Type erasure)
- ৮.৭ – অনুশীলনী
অধ্যায় নয়: জাভা আই/ও (I/O)
- ৯.১ – ফাইল নিয়ে কাজ
- ৯.১.১ – পাথ (Path)
- ৯.১.২ – ফাইল তৈরি
- ৯.১.৩ – পাথ সেপারেটর (Path separator)
- ৯.১.৪ – ডিরেক্টরি তৈরি
- ৯.১.৫ – ফাইল রিনেমিং (File Renaming), ফাইল কপিইং (File Copying) এবং ফাইল ডিলিটিং (File Deleting)
- ৯.১.৬ – ফাইলের তালিকা বের করা
- ৯.১.৭ – ফাইল ফিল্টার (File Filter)
- ৯.২ – ইনপুট/আউটপুট স্ট্রিম (Input/Output Stream)
- ৯.২.১ – স্ট্রিমের প্রকারভেদ
- ৯.২.২ – ইনপুট স্ট্রিম (InputStream) তৈরি
- ৯.২.৩ – ইনপুট স্ট্রিম থেকে ডেটা পড়া
- ৯.২.৪ – আউটপুট স্ট্রিম (OutputStream) তৈরি
- ৯.২.৫ – আউটপুট স্ট্রিমে ডেটা রাইট করা
- ৯.২.৬ – ক্যারেক্টার স্ট্রিম (Character Stream)
- ৯.২.৭ – রিডার (Reader) ব্যবহার করে ডেটা রিড করা
- ৯.২.৮ – রাইটার (Writer) ব্যবহার করে ডেটা রাইট করা
- ৯.২.৯ – System.in, System.out, and System.error
- ৯.২.১০ – প্রিমিটিভ ডেটা রিড/রাইট করা
- ৯.৩ – অনুশীলনী
অধ্যায় দশ: জাভা এন আই/ও (NIO)
- ১০.১ – জাভা এনআইও (NIO) কী?
- ১০.২ – বাফার (Buffer)
- ১০.৩ – চ্যানেল (Channel)
- ১০.৪ – ফাইল রিড করা
- ১০.৫ – ফাইল রাইট করা
- ১০.৫.১ – try-with-resource
- ১০.৬ – একত্রে রিড এবং রাইট করা
- ১০.৭ – ক্যারেক্টার সেট (Character Set)
- ১০.৮ – অনুশীলনী
অধ্যায় এগারো: কালেকশন ফ্রেমওয়ার্ক (Collection Framework)
- ১১.১ – কালেকশন (Collection)
- ১১.২ – লিস্ট (List)
- ১১.৩ – স্ট্যাক (Stack)
- ১১.৪ – ইটারেবল (Iterable) ও ইটারেটর (Iterator)
- ১১.৫ – সেট (Set)
- ১১.৬ – কিউ (Queue)
- ১১.৭ – ম্যাপ (Map)
- ১১.৭.১ – হ্যাশম্যাপ (HashMap)
- ১১.৭.২ – ট্রিম্যাপ (TreeMap)
- ১১.৭.৩ – হ্যাশটেবিল (HashTable)
- ১১.৭.৪ – লিঙ্কড হ্যাশম্যাপ (LinkedHashMap)
- ১১.৮ – কালেকশন অর্ডারিং/সর্টিং (Collection Sorting/Ordering)
- ১১.৯ – সার্চিং (Searching)
- ১১.১০ – অনুশীলনী
অধ্যায় বারো: স্ট্রিং অপারেশন (String Operations)
- ১২.১ – স্ট্রিং কনক্যাটিনেশন (Concatenation)
- ১২.২ – স্টিংয়ের কিছু গুরুত্বপূর্ণ মেথড
- ১২.৩ – স্ট্রিং পুল (String Pool)
- ১২.৪ – স্ট্রিং বিল্ডার (StringBuilder) এবং স্ট্রিং বাফার (StringBuffer)
- ১২.৫ – অনুশীলনী
অধ্যায় তের: জাভা ম্যাথ এপিআই (Math API) ও ইউটিলিটি ক্লাস (Utility Class)
- ১৩.১ – জাভা ম্যাথ এপিআই
- ১৩.২ – র্যান্ডম নম্বর (Random Numbers)
- ১৩.৩ – বিগ-ইন্টিজার (BigInteger) ও বিগ-ডেসিমাল (BigDecimal)
অধ্যায় চৌদ্দ: ইউনিট টেস্টিং (Unit Testing)
- ১৪.১ – JUnit অ্যানোটেশন (Annotation)
- ১৪.২ – অ্যাসার্ট স্টেটমেন্ট (Assert statements)
- ১৪.৩ – ফেইলড টেস্ট কেইস (Failed Test Case)