Java conflict programming course.
জাভা প্রোগ্রামিং ভাষার সংক্ষিপ্ত ইতিহাস
জাভা প্রোগ্রামিং ভাষা ১৯৯৫ সালে জেমস গোসলিং এবং তাঁর টিম (Sun Microsystems) দ্বারা তৈরি করা হয়। এটি একটি ওবজেক্ট-ওরিয়েন্টেড, ক্লাস-ভিত্তিক এবং প্ল্যাটফর্ম ইন্ডিপেন্ডেন্ট ভাষা, যা "Write Once, Run Anywhere" (WORA) নীতিতে কাজ করে। জাভার উদ্দেশ্য ছিল এমন একটি ভাষা তৈরি করা, যা ভিন্ন ভিন্ন প্ল্যাটফর্মে একই কোড নির্বিঘ্নে চলতে পারে।
প্রধান ঘটনা:
- 1991: প্রজেক্টের নাম ছিল "Green Project"। জেমস গোসলিং এটি তৈরি করেন ছোট ডিভাইসের জন্য।
- 1995: জাভার প্রথম ভার্সন (Java 1.0) মুক্তি পায়।
- 1997: Sun Microsystems জাভা ভাষাকে ISO এবং ECMA মানদণ্ড অনুযায়ী উন্নত করে।
- 2010: Oracle Corporation Sun Microsystems অধিগ্রহণ করে এবং এর পর থেকে জাভার বিকাশের নেতৃত্ব দেয়।
- বর্তমান (2024): জাভার সর্বশেষ সংস্করণ (Java 21) মুক্তি পেয়েছে, যা উন্নত কর্মক্ষমতা ও নিরাপত্তা ফিচার সমৃদ্ধ।
জাভা ভাষার মূল বৈশিষ্ট্য
- প্ল্যাটফর্ম ইন্ডিপেন্ডেন্ট: জাভা কোড কম্পাইল করার পর এটি বাইটকোড-এ রূপান্তরিত হয়, যা যেকোনো অপারেটিং সিস্টেমে Java Virtual Machine (JVM) ব্যবহার করে চলতে পারে।
- ওবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং: জাভা সম্পূর্ণরূপে ওবজেক্ট-ভিত্তিক, যা কোড পুনরায় ব্যবহারযোগ্য এবং সহজে পরিচালনা যোগ্য করে।
- নিরাপত্তা: জাভা তার Security Manager এবং bytecode verifier এর মাধ্যমে খুবই নিরাপদ।
- অটোমেটিক মেমোরি ম্যানেজমেন্ট: জাভার Garbage Collection সিস্টেম অপ্রয়োজনীয় মেমোরি ব্যবহার বন্ধ করে।
- মাল্টিথ্রেডিং: একই সময়ে একাধিক কাজ করার সুবিধা প্রদান করে।
জাভার ব্যবহার
জাভা বিভিন্ন ক্ষেত্রে ব্যবহৃত হয়:
- ওয়েব অ্যাপ্লিকেশন: Spring, Hibernate, এবং JSP ব্যবহার করে ওয়েব ডেভেলপমেন্ট।
- মোবাইল অ্যাপ্লিকেশন: অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টে Java অন্যতম জনপ্রিয়।
- ডেস্কটপ অ্যাপ্লিকেশন: GUI ভিত্তিক অ্যাপ্লিকেশন তৈরি।
- এন্টারপ্রাইজ অ্যাপ্লিকেশন: বড় প্রতিষ্ঠানের জন্য জাভা সবচেয়ে নির্ভরযোগ্য ভাষা।
- গেম ডেভেলপমেন্ট: জাভা ব্যবহার করে ২ডি এবং ৩ডি গেম তৈরি করা যায়।
Java All Editions
Java SE (Standard Edition)
জাভার এই সংস্করণটি ডেস্কটপ অ্যাপ্লিকেশন এবং সাধারণ সফটওয়্যার তৈরির জন্য ব্যবহৃত হয়। এটি জাভার প্রাথমিক ফিচারগুলোর সমষ্টি, যেমন:
- Core Libraries: String, Collections, Multithreading।
- Java Virtual Machine (JVM): জাভার কোড রান করার প্ল্যাটফর্ম।
- APIs (Application Programming Interfaces): সাধারণ কাজের জন্য প্রয়োজনীয় টুল যেমন Input/Output, Networking, Database।
Java EE (Enterprise Edition) (বর্তমানে Jakarta EE নামে পরিচিত)
এটি এন্টারপ্রাইজ লেভেলের অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়, যেমন:
- Web Applications: Servlet, JSP।
- Distributed Systems: EJB (Enterprise Java Beans)।
- Database Integration: JPA (Java Persistence API)।
- Web Services: REST এবং SOAP।
এটি বড় বড় ব্যবসায়িক অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়।
Java ME (Micro Edition)
জাভার এই সংস্করণটি ছোট ডিভাইস এবং ইলেকট্রনিক্সের জন্য ডিজাইন করা হয়েছে:
- Feature Phones: পুরোনো ফিচার ফোনের অ্যাপ তৈরি করতে ব্যবহৃত হয়।
- IoT (Internet of Things): স্মার্ট ডিভাইস যেমন টিভি, মাইক্রোওয়েভ ইত্যাদির সফটওয়্যার।
Java FX
Java FX আধুনিক গ্রাফিকাল ইউজার ইন্টারফেস (GUI) তৈরি করার জন্য ব্যবহৃত হয়:
- Advanced GUI: সুন্দর গ্রাফিক্স এবং অ্যানিমেশন।
- Multimedia Support: ভিডিও এবং অডিও প্লেয়ার তৈরি করা যায়।
Java Card
Java Card ছোট ডিভাইস যেমন স্মার্ট কার্ডের জন্য ব্যবহৃত হয়। এটি সিকিউরিটি ফিচারের জন্য পরিচিত, যেমন:
- ক্রেডিট কার্ড।
- সিম কার্ড।
- সিকিউরিটি টোকেন।
Java Editions-এর ভার্সনের বিবর্তন
জাভার বিভিন্ন ভার্সনের বিবর্তনের উল্লেখযোগ্য আপডেটগুলো হলো:
1. Java 1.0 (1996):
প্রথম সংস্করণ; মূলত অ্যাপলেট এবং ছোট ডিভাইসের জন্য।
2. Java 5 (2004):
জেনেরিক্স (Generics) এবং অ্যানোটেশন (Annotations) যুক্ত করা হয়।
3. Java 8 (2014):
ল্যাম্বডা এক্সপ্রেশন, স্ট্রিম এপিআই এবং নতুন ডেটা টাইম এপিআই।
4. Java 11 (2018):
লং-টার্ম সাপোর্ট (LTS) এবং মডিউলার সিস্টেম।
5. Java 17 (2021):নতুন LTS ভার্সন; JEP (Java Enhancement Proposals) ফিচারের মাধ্যমে উন্নত প্রোগ্রামিং অভিজ্ঞতা।
জাভা প্লাটফর্ম ইন্ডিপেন্ডেন্ট হয়ে থাকে প্লাটফর্ম ইন্ডিপেন্ডেন্ট এর মানে হল সেটি উইন্ডোজ ম্যাক অথবা লিনেক্স যেকোনো অপারেটিং সিস্টেমেই চলতে পারবে
Java compiler ডাউনলোড করো প্রথমে: Downlaod
C:\Program Files\Java\jdk-23\bin
Java Code and Output
Java Code:
class Mahidul { int x = 5; // instance (object) member variable int y = 4; // instance (object) member variable void fun1() { // instance (object) member function System.out.println("fun1"); } void fun2() { // instance (object) member function System.out.println("fun2"); } } class Object1 { public static void main(String[] args) { System.out.println("hello"); // Prints "hello" // Creating an object of the Mahidul class Mahidul m1 = new Mahidul(); // Accessing and summing the values of x and y int sum = m1.x + m1.y; System.out.println("x + y = " + sum); // Prints "x + y = 9" } }
Output:
hello x + y = 9
Primitive Types and Their Wrapper Classes
Primitive Type | Wrapper Class |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
Java-তে Access Modifiers ব্যবহৃত হয় ভেরিয়েবল, মেথড এবং ক্লাসের অ্যাক্সেসের সীমা নির্ধারণ করার জন্য। এটি চার ধরণের হতে পারে: private
, default
, protected
, এবং public
।
1. Private (ব্যক্তিগত)
- অ্যাক্সেস স্তর: শুধুমাত্র ক্লাসের ভেতরে।
- বিবরণ:
private
মডিফায়ার ব্যবহৃত ভেরিয়েবল বা মেথড কেবলমাত্র তার নিজের ক্লাসের ভেতরে অ্যাক্সেস করা যায়। এটি ক্লাসের বাইরে থেকে অ্যাক্সেস করা যায় না।
উদাহরণ:class Test { private int data = 10; private void showData() { System.out.println(data); } }
- এখানে,
data
এবংshowData()
শুধুমাত্রTest
ক্লাসের ভেতরে ব্যবহার করা যাবে। ক্লাসের বাইরে এগুলো সরাসরি অ্যাক্সেস করা সম্ভব নয়।
- এখানে,
2. Default (ডিফল্ট)
- অ্যাক্সেস স্তর: একই প্যাকেজের মধ্যে।
- বিবরণ:
যদি কোনো মডিফায়ার না দেওয়া হয়, তাহলে এটি ডিফল্ট মডিফায়ার হিসেবে বিবেচিত হয়। ডিফল্ট মডিফায়ার শুধুমাত্র একই প্যাকেজের ভেতরে অ্যাক্সেসযোগ্য।
উদাহরণ:class Test { int data = 20; // ডিফল্ট অ্যাক্সেস মডিফায়ার void display() { System.out.println(data); } }
- এই
data
এবংdisplay()
মেথড একই প্যাকেজের অন্য ক্লাসে ব্যবহার করা যাবে, তবে ভিন্ন প্যাকেজ থেকে অ্যাক্সেস করা যাবে না।
- এই
3. Protected (সুরক্ষিত)
- অ্যাক্সেস স্তর:
- একই প্যাকেজে।
- ভিন্ন প্যাকেজ থেকে অ্যাক্সেসযোগ্য, তবে কেবলমাত্র যদি এটি কোনো চাইল্ড ক্লাসের মাধ্যমে ব্যবহার করা হয়।
- বিবরণ:
protected
মডিফায়ার ভেরিয়েবল বা মেথডকে একই প্যাকেজের অন্য ক্লাস থেকে অ্যাক্সেস করতে দেয়। এছাড়াও, চাইল্ড ক্লাসের মাধ্যমে এটি ভিন্ন প্যাকেজ থেকেও অ্যাক্সেসযোগ্য।
উদাহরণ:package Package1; public class Parent { protected int data = 30; protected void showData() { System.out.println(data); } } package Package2; import Package1.Parent; class Child extends Parent { void display() { System.out.println(data); // চাইল্ড ক্লাসের মাধ্যমে অ্যাক্সেস } }
Parent
ক্লাসেরdata
ভেরিয়েবল এবংshowData()
মেথড শুধুমাত্র চাইল্ড ক্লাস (Child
) ব্যবহার করতে পারবে।
4. Public (পাবলিক)
- অ্যাক্সেস স্তর: সর্বত্র।
- বিবরণ:
public
মডিফায়ার ব্যবহার করলে, ক্লাস, মেথড বা ভেরিয়েবলকে যে কোনো স্থান থেকে অ্যাক্সেস করা যায়, যেমন একই ক্লাস, অন্য ক্লাস, একই প্যাকেজ, বা ভিন্ন প্যাকেজ।
উদাহরণ:public class Test { public int data = 40; public void display() { System.out.println(data); } }
data
এবংdisplay()
মেথড যেকোনো প্যাকেজ বা ক্লাস থেকে অ্যাক্সেসযোগ্য।
উপসংহার: Access Modifier চার্ট
Access Modifier | একই ক্লাস | একই প্যাকেজ | ভিন্ন প্যাকেজ (Child ক্লাস) | ভিন্ন প্যাকেজ |
---|---|---|---|---|
private |
✅ | ❌ | ❌ | ❌ |
default |
✅ | ✅ | ❌ | ❌ |
protected |
✅ | ✅ | ✅ | ❌ |
Access Modifier | within class | within package | outside package by subclass only | outside package |
---|---|---|---|---|
Private | Y | N | N | N |
Default | Y | Y | N | N |
Protected | Y | Y | Y | N |
Public | Y | Y | Y | Y |
Operator Type | Category | Precedence |
---|---|---|
Unary | postfix | expr++ expr-- |
prefix | ++expr --expr +expr -expr ~ ! | |
Arithmetic | multiplicative | * / % |
additive | + - | |
Shift | shift | << >> >>> |
Relational | comparison | < > <= >= instanceof |
equality | == != | |
Bitwise | bitwise AND | & |
bitwise exclusive OR | ^ | |
bitwise inclusive OR | | | |
Logical | logical AND | && |
logical OR | || | |
Ternary | ternary | ? : |
Assignment | assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Java কীওয়ার্ডের তালিকা এবং তাদের ব্যাখ্যা
1. abstract
- ব্যবহার: একটি অ্যাবস্ট্রাক্ট ক্লাস ডিক্লেয়ার করতে ব্যবহৃত হয়।
- বিবরণ: অ্যাবস্ট্রাক্ট ক্লাসে অ্যাবস্ট্রাক্ট এবং নন-অ্যাবস্ট্রাক্ট মেথড থাকতে পারে।
উদাহরণ:abstract class Shape { abstract void draw(); }
2. boolean
- ব্যবহার: একটি ভেরিয়েবলকে বুলিয়ান টাইপ (True/False) হিসেবে ডিক্লেয়ার করতে ব্যবহৃত হয়।
উদাহরণ:boolean isActive = true;
3. break
- ব্যবহার: লুপ বা সুইচ স্টেটমেন্ট বন্ধ করতে ব্যবহৃত হয়।
উদাহরণ:for (int i = 0; i < 10; i++) { if (i == 5) break; }
4. byte
- ব্যবহার: 8-বিট ডেটা ভ্যালু ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
উদাহরণ:byte age = 25;
5. case
- ব্যবহার:
switch
স্টেটমেন্টের ব্লক চিহ্নিত করতে।
উদাহরণ:switch (day) { case 1: System.out.println("Sunday"); }
6. catch
- ব্যবহার:
try
ব্লকের মাধ্যমে তৈরি হওয়া এক্সেপশন ধরতে।
উদাহরণ:try { int a = 10 / 0; } catch (Exception e) { System.out.println(e); }
7. char
- ব্যবহার: একটি 16-বিট ইউনিকোড ক্যারেক্টার ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
উদাহরণ:char letter = 'A';
8. class
- ব্যবহার: একটি ক্লাস ডিক্লেয়ার করতে।
উদাহরণ:class Student { int id; String name; }
9. continue
- ব্যবহার: লুপের বর্তমান ইটারেশন স্কিপ করে পরবর্তী ইটারেশনে যেতে।
উদাহরণ:for (int i = 0; i < 5; i++) { if (i == 2) continue; }
10. default
- ব্যবহার:
switch
স্টেটমেন্টে ডিফল্ট ব্লক চিহ্নিত করতে।
উদাহরণ:switch (choice) { default: System.out.println("Invalid"); }
11. do
- ব্যবহার: একটি লুপের শুরুতে।
উদাহরণ:do { System.out.println("Running"); } while (condition);
12. double
- ব্যবহার: 64-বিট ভাসমান বিন্দু সংখ্যা ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
উদাহরণ:double price = 19.99;
13. else
- ব্যবহার: বিকল্প শাখা নির্দেশ করতে।
উদাহরণ:if (marks >= 50) { System.out.println("Pass"); } else { System.out.println("Fail"); }
14. enum
- ব্যবহার: একটি নির্দিষ্ট সেটের কনস্ট্যান্ট ডিফাইন করতে।
উদাহরণ:enum Day { SUNDAY, MONDAY, TUESDAY }
15. extends
- ব্যবহার: একটি ক্লাস অন্য একটি ক্লাস থেকে উত্তরাধিকারসূত্রে পেতে।
উদাহরণ:class Car extends Vehicle {}
16. final
- ব্যবহার: একটি ভেরিয়েবলকে কনস্ট্যান্ট হিসেবে ঘোষণা করতে।
উদাহরণ:final int MAX = 100;
17. finally
- ব্যবহার: একটি কোড ব্লক যা সর্বদা
try-catch
ব্লকের পরে চালিত হয়।
উদাহরণ:try { int a = 10 / 2; } finally { System.out.println("Done"); }
18. float
- ব্যবহার: 32-বিট ভাসমান বিন্দু সংখ্যা ধারণকারী ভেরিয়েবল।
উদাহরণ:float price = 10.5f;
19. for
- ব্যবহার: একটি নির্দিষ্ট সংখ্যক বার লুপ চালানোর জন্য।
উদাহরণ:for (int i = 0; i < 10; i++) { System.out.println(i); }
20. if
- ব্যবহার: শর্ত যাচাই করতে।
উদাহরণ:if (age > 18) { System.out.println("Adult"); }
21. implements
- ব্যবহার: একটি ক্লাসের মাধ্যমে ইন্টারফেস বাস্তবায়ন করতে।
- উদাহরণ:
interface Animal { void sound(); } class Dog implements Animal { public void sound() { System.out.println("Bark"); } }
22. import
- ব্যবহার: অন্য প্যাকেজের ক্লাস এবং ইন্টারফেস বর্তমান কোডে ব্যবহারযোগ্য করতে।
- উদাহরণ:
import java.util.Scanner; Scanner input = new Scanner(System.in);
23. instanceof
- ব্যবহার: কোনো অবজেক্ট নির্দিষ্ট ক্লাস বা ইন্টারফেসের উদাহরণ কিনা তা পরীক্ষা করতে।
- উদাহরণ:
if (obj instanceof String) { System.out.println("This is a String"); }
24. int
- ব্যবহার: 32-বিট পূর্ণসংখ্যা ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
- উদাহরণ:
int age = 25;
25. interface
- ব্যবহার: একটি ইন্টারফেস ডিক্লেয়ার করতে। ইন্টারফেসে শুধুমাত্র অ্যাবস্ট্রাক্ট মেথড থাকে।
- উদাহরণ:
interface Vehicle { void move(); }
26. long
- ব্যবহার: 64-বিট পূর্ণসংখ্যা ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
- উদাহরণ:
long distance = 123456789L;
27. native
- ব্যবহার: একটি মেথড যা নেটিভ কোড (C/C++ ইত্যাদির মাধ্যমে) দ্বারা বাস্তবায়িত হয়েছে তা নির্দেশ করতে।
- উদাহরণ:
public native void nativeMethod();
28. new
- ব্যবহার: নতুন অবজেক্ট তৈরি করতে।
- উদাহরণ:
Student s1 = new Student();
29. null
- ব্যবহার: একটি রেফারেন্স কোনো কিছু নির্দেশ করে না তা বোঝাতে।
- উদাহরণ:
String name = null;
30. package
- ব্যবহার: একটি প্যাকেজ ডিক্লেয়ার করতে।
- উদাহরণ:
package PackageName;
31. private
- ব্যবহার: একটি মেথড বা ভেরিয়েবলকে শুধুমাত্র নির্দিষ্ট ক্লাসের মধ্যে সীমাবদ্ধ করতে।
- উদাহরণ:
private int age;
32. protected
- ব্যবহার: একটি মেথড বা ভেরিয়েবল প্যাকেজের ভেতরে এবং ইনহেরিটেন্সের মাধ্যমে বাইরে থেকে অ্যাক্সেস করতে।
- উদাহরণ:
protected int id;
33. public
- ব্যবহার: একটি মেথড বা ভেরিয়েবল সর্বত্র অ্যাক্সেসযোগ্য করতে।
- উদাহরণ:
public String name;
34. return
- ব্যবহার: একটি মেথড থেকে ভ্যালু ফেরত দিতে।
- উদাহরণ:
int getAge() { return age; }
35. short
- ব্যবহার: 16-বিট পূর্ণসংখ্যা ধারণকারী ভেরিয়েবল ডিক্লেয়ার করতে।
- উদাহরণ:
short marks = 95;
36. static
- ব্যবহার: একটি মেথড বা ভেরিয়েবলকে ক্লাসের সাথে যুক্ত করতে।
- উদাহরণ:
static int count = 0;
37. strictfp
- ব্যবহার: ভাসমান-বিন্দু গণনায় সঠিকতা নিশ্চিত করতে।
- উদাহরণ:
strictfp class Test {}
38. super
- ব্যবহার: প্যারেন্ট ক্লাসের অবজেক্ট নির্দেশ করতে।
- উদাহরণ:
super.display();
39. switch
- ব্যবহার: একাধিক বিকল্প পরীক্ষা করতে।
- উদাহরণ:
switch (day) { case 1: System.out.println("Sunday"); break; }
40. synchronized
- ব্যবহার: মাল্টিথ্রেডিংয়ে একটি ব্লকের একক অ্যাক্সেস নিশ্চিত করতে।
- উদাহরণ:
synchronized void print() {}
41. this
- ব্যবহার: বর্তমান অবজেক্ট নির্দেশ করতে।
- উদাহরণ:
this.name = name;
42. throw
- ব্যবহার: একটি নির্দিষ্ট এক্সেপশন নিক্ষেপ করতে।
- উদাহরণ:
throw new ArithmeticException("Error");
43. throws
- ব্যবহার: একটি মেথডের এক্সেপশন ঘোষণা করতে।
- উদাহরণ:
void method() throws IOException {}
44. transient
- ব্যবহার: সিরিয়ালাইজেশনের সময় ভেরিয়েবল এড়াতে।
- উদাহরণ:
transient int password;
45. try
- ব্যবহার: এক্সেপশন পরীক্ষা করার জন্য একটি ব্লক শুরু করতে।
- উদাহরণ:
try { int data = 10 / 0; }
46. void
- ব্যবহার: একটি মেথডের কোনো রিটার্ন টাইপ নেই তা নির্দেশ করতে।
- উদাহরণ:
void display() {}
47. volatile
- ব্যবহার: একটি ভেরিয়েবল অ্যাসিঙ্ক্রোনাসভাবে পরিবর্তিত হতে পারে তা নির্দেশ করতে।
- উদাহরণ:
volatile int flag = 1;
48. while
- ব্যবহার: একটি লুপ শুরু করতে।
- উদাহরণ:
while (condition) { System.out.println("Running"); }
Conditional Statements
Conditional Statements
Advantages of OOPS
1) Modularity
2) Reusability
3) Flexibility
Features of OOPs
1) class
2) Object
3) Abstraction
4) Encasulation
5) Inheritance
6) Polymorphism
Comments
Post a Comment