full basic guide of JAVA code

सम्पूर्ण जावा गाइड

☕ सम्पूर्ण जावा गाइड ☕

जावा एक शक्तिशाली, बहुमुखी और व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषा है। यह लेख जावा की दुनिया में आपका मार्गदर्शन करेगा, इसके मूल सिद्धांतों से लेकर उन्नत विषयों तक।

जावास्क्रिप्ट (JavaScript) बनाम जावा (Java)

अक्सर शुरुआती लोग जावास्क्रिप्ट और जावा के बीच भ्रमित हो जाते हैं, लेकिन ये दोनों बिल्कुल अलग भाषाएँ हैं:

  • जावा (Java): एक ऑब्जेक्ट-ओरिएंटेड, क्लास-आधारित, समवर्ती (concurrent), और सुरक्षित प्रोग्रामिंग भाषा है। यह मुख्य रूप से सर्वर-साइड एप्लिकेशन, एंड्रॉइड ऐप डेवलपमेंट, बड़े एंटरप्राइज सिस्टम और वैज्ञानिक कंप्यूटिंग के लिए उपयोग की जाती है। जावा कोड को बाइटकोड में कंपाइल किया जाता है, जो किसी भी जावा वर्चुअल मशीन (JVM) पर चल सकता है (Write Once, Run Anywhere - WORA)।
  • जावास्क्रिप्ट (JavaScript): एक उच्च-स्तरीय, अक्सर जस्ट-इन-टाइम कंपाइल्ड, और मल्टी-पैराडाइम भाषा है। यह मुख्य रूप से वेब ब्राउज़र में क्लाइंट-साइड स्क्रिप्टिंग के लिए उपयोग की जाती है ताकि वेब पेजों को इंटरैक्टिव बनाया जा सके। Node.js के साथ, इसका उपयोग सर्वर-साइड डेवलपमेंट के लिए भी किया जाता है। यह जावा से वाक्य रचना (syntax) में कुछ समानताएँ साझा करती है, लेकिन आंतरिक रूप से बहुत भिन्न है।

जावा क्या है और इसका उपयोग क्यों किया जाता है?

जावा एक उच्च-स्तरीय, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है जिसे सन माइक्रोसिस्टम्स (अब ओरेकल का हिस्सा) द्वारा 1995 में विकसित किया गया था। इसकी मुख्य विशेषताएं हैं:

  • प्लेटफ़ॉर्म स्वतंत्र (Platform Independent): जावा कोड JVM पर चलता है, जो इसे विभिन्न ऑपरेटिंग सिस्टम पर बिना बदलाव के चलाने योग्य बनाता है।
  • ऑब्जेक्ट-ओरिएंटेड (Object-Oriented): यह OOP सिद्धांतों जैसे इनहेरिटेंस, पॉलिमॉर्फिज़म, एब्स्ट्रैक्शन और एनकैप्सुलेशन का समर्थन करता है।
  • मजबूत (Robust): इसमें मजबूत मेमोरी मैनेजमेंट और एक्सेप्शन हैंडलिंग की सुविधा है।
  • सुरक्षित (Secure): जावा सुरक्षा पर ध्यान केंद्रित करता है, जिसमें सैंडबॉक्स वातावरण में कोड चलाने की क्षमता शामिल है।
  • बहुउपयोगी (Versatile): इसका उपयोग वेब एप्लिकेशन, मोबाइल ऐप (एंड्रॉइड), डेस्कटॉप एप्लिकेशन, गेम, वैज्ञानिक अनुसंधान और बड़े पैमाने पर एंटरप्राइज सिस्टम बनाने के लिए किया जाता है।

जावा में वेरिएबल (Variable) कैसे घोषित करें?

वेरिएबल डेटा स्टोर करने के लिए कंटेनर होते हैं। जावा में, आपको वेरिएबल का उपयोग करने से पहले उसका डेटा टाइप और नाम घोषित करना होता है।



// सिंटैक्स: dataType variableName = value;

int age = 25; // Integer variable

double salary = 55000.50; // Double-precision floating point variable

String name = "Rohan"; // String variable (String is a class)

char grade = 'A'; // Character variable

boolean isEmployed = true; // Boolean variable

// आप पहले घोषित कर सकते हैं और बाद में मान असाइन कर सकते हैं:

int score;

score = 100;

System.out.println("Name: " + name); // Output: Name: Rohan

System.out.println("Age: " + age); // Output: Age: 25

        

जावा में डेटा टाइप (Data Types) क्या हैं?

जावा में दो मुख्य प्रकार के डेटा टाइप होते हैं:

  1. प्रिमिटिव डेटा टाइप्स (Primitive Data Types): ये भाषा द्वारा पूर्वनिर्धारित होते हैं और इनमें शामिल हैं:
    • बाइट (byte): 8-बिट साइन्ड इंटीजर।
    • शॉर्ट (short): 16-बिट साइन्ड इंटीजर।
    • इंट (int): 32-बिट साइन्ड इंटीजर (सबसे आम)।
    • लॉन्ग (long): 64-बिट साइन्ड इंटीजर।
    • फ्लोट (float): 32-बिट सिंगल-प्रिसिजन फ्लोटिंग पॉइंट।
    • डबल (double): 64-बिट डबल-प्रिसिजन फ्लोटिंग पॉइंट (दशमलव संख्याओं के लिए आम)।
    • बूलियन (boolean): केवल दो मान हो सकते हैं: true या false
    • चार (char): 16-बिट यूनिकोड कैरेक्टर।
  2. नॉन-प्रिमिटिव (रेफरेंस) डेटा टाइप्स (Non-Primitive/Reference Data Types): ये क्लासेस, इंटरफेस, एरेज़ आदि द्वारा बनाए जाते हैं। उदाहरण: String, Array, ArrayList, और आपके द्वारा बनाई गई कोई भी क्लास। ये मेमोरी में ऑब्जेक्ट के एड्रेस (रेफरेंस) को स्टोर करते हैं।

जावा में ऑपरेटर (Operators) कैसे काम करते हैं?

ऑपरेटर विशेष प्रतीक होते हैं जो वेरिएबल्स और मानों पर ऑपरेशन करते हैं। मुख्य प्रकार के ऑपरेटर हैं:

  • अरिथमेटिक ऑपरेटर्स (Arithmetic Operators): +, -, *, /, % (मॉड्यूलस), ++ (इंक्रीमेंट), -- (डिक्रीमेंट)।
  • रिलेशनल ऑपरेटर्स (Relational Operators): ==, !=, >, <, >=, <=। ये बूलियन मान (true/false) लौटाते हैं।
  • लॉजिकल ऑपरेटर्स (Logical Operators): && (AND), || (OR), ! (NOT)।
  • असाइनमेंट ऑपरेटर्स (Assignment Operators): =, +=, -=, *=, /=, %=
  • बिटवाइज़ ऑपरेटर्स (Bitwise Operators): बिट स्तर पर काम करते हैं (&, |, ^, ~, <<, >>)।
  • टर्नरी ऑपरेटर (Ternary Operator): condition ? value_if_true : value_if_false


int a = 10;

int b = 5;

int sum = a + b; // Arithmetic: sum is 15

boolean isEqual = (a == b); // Relational: isEqual is false

boolean logicalAnd = (a > 5 && b < 10); // Logical: logicalAnd is true

a += 5; // Assignment: a becomes 15 (equivalent to a = a + 5)

String result = (a > b) ? "a is greater" : "b is greater or equal"; // Ternary

System.out.println(result); // Output: a is greater

        

जावा में कंट्रोल फ्लो (Control Flow)

कंट्रोल फ्लो स्टेटमेंट्स कोड के निष्पादन के क्रम को नियंत्रित करते हैं।

  • If-Else: शर्तों के आधार पर कोड ब्लॉक निष्पादित करता है।
  • Switch: एक वेरिएबल के कई संभावित मानों के आधार पर कोड ब्लॉक निष्पादित करता है।
  • For Loop: कोड ब्लॉक को निश्चित संख्या में दोहराता है।
  • While Loop: जब तक शर्त सत्य रहती है, तब तक कोड ब्लॉक को दोहराता है।
  • Do-While Loop: कोड ब्लॉक को कम से कम एक बार निष्पादित करता है, फिर जब तक शर्त सत्य रहती है, तब तक दोहराता है।


int number = 10;

// If-Else

if (number > 0) {

    System.out.println("Positive");

} else if (number < 0) {

    System.out.println("Negative");

} else {

    System.out.println("Zero");

}

// For Loop

for (int i = 0; i < 5; i++) {

    System.out.println("Iteration: " + i);

}

// While Loop

int count = 0;

while (count < 3) {

    System.out.println("Count: " + count);

    count++;

}

        

जावा में क्लास (Class) और ऑब्जेक्ट (Object) क्या हैं और कैसे बनाएं?

जावा एक ऑब्जेक्ट-ओरिएंटेड भाषा है।

  • क्लास (Class): ऑब्जेक्ट बनाने के लिए एक ब्लूप्रिंट या टेम्पलेट है। यह गुणों (वेरिएबल्स, जिन्हें फील्ड्स या एट्रिब्यूट्स कहा जाता है) और व्यवहारों (मेथड्स) को परिभाषित करता है।
  • ऑब्जेक्ट (Object): क्लास का एक इंस्टेंस (instance) होता है। इसके पास स्टेट (गुणों के मान) और बिहेवियर (मेथड्स) होते हैं जो क्लास द्वारा परिभाषित होते हैं।

ऑब्जेक्ट बनाने के लिए new कीवर्ड का उपयोग किया जाता है।



// 1. क्लास की परिभाषा (Blueprint)

class Dog {

    // Fields (Properties/Attributes)

    String breed;

    int age;

    String color;

    // Constructor (विशेष मेथड ऑब्जेक्ट बनाने के लिए)

    public Dog(String breed, int age, String color) {

        this.breed = breed;

        this.age = age;

        this.color = color;

        System.out.println("Dog object created!");

    }

    // Methods (Behavior)

    void bark() {

        System.out.println("Woof Woof!");

    }

    void displayInfo() {

        System.out.println("Breed: " + breed + ", Age: " + age + ", Color: " + color);

    }

}

// 2. ऑब्जेक्ट बनाना (Creating Instances)

public class Main {

    public static void main(String[] args) {

        // Creating Dog objects using the 'new' keyword and the constructor

        Dog myDog1 = new Dog("Labrador", 3, "Golden");

        Dog myDog2 = new Dog("German Shepherd", 5, "Black and Tan");

        // Accessing object properties and methods

        myDog1.displayInfo(); // Output: Breed: Labrador, Age: 3, Color: Golden

        myDog1.bark();       // Output: Woof Woof!

        myDog2.displayInfo(); // Output: Breed: German Shepherd, Age: 5, Color: Black and Tan

    }

}

        

जावा में इनहेरिटेंस (Inheritance) क्या है और कैसे काम करता है?

इनहेरिटेंस एक OOP सिद्धांत है जिसमें एक क्लास (जिसे सबक्लास या चाइल्ड क्लास कहा जाता है) दूसरी क्लास (जिसे सुपरक्लास या पेरेंट क्लास कहा जाता है) के गुणों और मेथड्स को प्राप्त करती है। यह कोड के पुन: उपयोग (reusability) को बढ़ावा देता है। जावा में extends कीवर्ड का उपयोग किया जाता है।



// Superclass (Parent)

class Animal {

    String name;

    public Animal(String name) {

        this.name = name;

    }

    void eat() {

        System.out.println(name + " is eating.");

    }

}

// Subclass (Child) inherits from Animal

class Cat extends Animal {

    String sound;

    public Cat(String name, String sound) {

        super(name); // Call the superclass constructor

        this.sound = sound;

    }

    void makeSound() {

        System.out.println(name + " says " + sound);

    }

    // Method Overriding (Optional): Redefining a superclass method

    @Override

    void eat() {

        System.out.println(name + " (a cat) is eating fish.");

    }

}

public class InheritanceDemo {

    public static void main(String[] args) {

        Cat myCat = new Cat("Whiskers", "Meow");

        myCat.eat(); // Calls the overridden eat() method in Cat

        myCat.makeSound(); // Calls the method defined in Cat

    }

}

        

जावा में पॉलिमॉर्फिज़म (Polymorphism) क्या है और कैसे काम करता है?

पॉलिमॉर्फिज़म का अर्थ है "अनेक रूप"। OOP में, यह एक ही क्रिया को अलग-अलग तरीकों से करने की क्षमता को संदर्भित करता है। जावा में पॉलिमॉर्फिज़म दो प्रकार का होता है:

  1. कंपाइल-टाइम पॉलिमॉर्फिज़म (Compile-time Polymorphism / Method Overloading): एक ही क्लास में समान नाम वाले लेकिन अलग-अलग पैरामीटर (संख्या, प्रकार, या क्रम) वाले कई मेथड्स बनाना। कंपाइलर मेथड कॉल को उसके पैरामीटर के आधार पर सही मेथड से जोड़ता है।
  2. रन-टाइम पॉलिमॉर्फिज़म (Run-time Polymorphism / Method Overriding): जब सबक्लास सुपरक्लास के मेथड को अपनी विशिष्ट कार्यान्वयन (implementation) प्रदान करती है। कौन सा मेथड कॉल होगा, यह रनटाइम पर ऑब्जेक्ट के प्रकार के आधार पर तय होता है। यह इनहेरिटेंस के साथ हासिल किया जाता है।


// --- Method Overloading (Compile-time Polymorphism) ---

class Calculator {

    int add(int a, int b) {

        return a + b;

    }

    double add(double a, double b) { // Same name, different parameter types

        return a + b;

    }

    int add(int a, int b, int c) { // Same name, different number of parameters

        return a + b + c;

    }

}

// --- Method Overriding (Run-time Polymorphism) ---

class Shape {

    void draw() {

        System.out.println("Drawing a generic shape.");

    }

}

class Circle extends Shape {

    @Override // Annotation indicating overriding

    void draw() {

        System.out.println("Drawing a circle.");

    }

}

class Square extends Shape {

    @Override

    void draw() {

        System.out.println("Drawing a square.");

    }

}

public class PolymorphismDemo {

    public static void main(String[] args) {

        // Overloading Demo

        Calculator calc = new Calculator();

        System.out.println("Sum (int): " + calc.add(5, 10));       // Calls int version

        System.out.println("Sum (double): " + calc.add(2.5, 3.7)); // Calls double version

        System.out.println("Sum (3 ints): " + calc.add(1, 2, 3)); // Calls 3-int version

        // Overriding Demo (Run-time Polymorphism)

        Shape myShape; // Superclass reference

        myShape = new Circle(); // Refers to a Circle object

        myShape.draw();        // Calls Circle's draw() method at runtime

        myShape = new Square(); // Refers to a Square object

        myShape.draw();        // Calls Square's draw() method at runtime

        myShape = new Shape(); // Refers to a Shape object

        myShape.draw();       // Calls Shape's draw() method

    }

}

        

जावा में एब्स्ट्रैक्शन (Abstraction) क्या है और कैसे काम करता है?

एब्स्ट्रैक्शन आवश्यक विशेषताओं को दिखाने और अनावश्यक विवरणों को छिपाने की प्रक्रिया है। जावा में एब्स्ट्रैक्शन दो तरीकों से प्राप्त किया जाता है:

  1. एब्स्ट्रैक्ट क्लासेस (Abstract Classes): वे क्लासेस जिन्हें abstract कीवर्ड से घोषित किया जाता है। इनमें एब्स्ट्रैक्ट (बिना बॉडी वाले) और नॉन-एब्स्ट्रैक्ट (बॉडी वाले) दोनों मेथड्स हो सकते हैं। एब्स्ट्रैक्ट क्लास का ऑब्जेक्ट नहीं बनाया जा सकता है, इसे केवल इनहेरिट (extend) किया जा सकता है। सबक्लास को सभी एब्स्ट्रैक्ट मेथड्स को लागू (implement) करना होता है।
  2. इंटरफेस (Interfaces): यह क्लास का एक ब्लूप्रिंट होता है जिसमें केवल public static final वेरिएबल्स (कांस्टेंट्स) और public abstract मेथड्स (जावा 8+ में डिफ़ॉल्ट और स्टैटिक मेथड्स भी हो सकते हैं) होते हैं। एक क्लास कई इंटरफेस को implements कीवर्ड का उपयोग करके लागू कर सकती है। यह 100% एब्स्ट्रैक्शन प्राप्त करने का एक तरीका है।


// --- Abstract Class Example ---

abstract class Vehicle {

    String type;

    public Vehicle(String type) {

        this.type = type;

    }

    abstract void start(); // Abstract method (no implementation)

    void stop() { // Concrete method

        System.out.println(type + " is stopping.");

    }

}

class Car extends Vehicle {

    public Car() {

        super("Car");

    }

    @Override

    void start() { // Implementation of the abstract method

        System.out.println("Car engine starts with a key turn.");

    }

}

// --- Interface Example ---

interface Drawable {

    void draw(); // Abstract method by default

    // Java 8+ feature: default method

    default void getInfo() {

        System.out.println("This is a drawable object.");

    }

}

class Rectangle implements Drawable {

    @Override

    public void draw() { // Implementation of the interface method

        System.out.println("Drawing a rectangle.");

    }

}

public class AbstractionDemo {

    public static void main(String[] args) {

        // Abstract Class Usage

        Vehicle myCar = new Car();

        myCar.start(); // Output: Car engine starts with a key turn.

        myCar.stop();  // Output: Car is stopping.

        // Vehicle v = new Vehicle("Bike"); // Error: Cannot instantiate abstract class

        // Interface Usage

        Drawable rect = new Rectangle();

        rect.draw();    // Output: Drawing a rectangle.

        rect.getInfo(); // Output: This is a drawable object. (Default method)

    }

}

        

जावा में एक्सेप्शन (Exceptions) क्या हैं और कैसे काम करते हैं?

एक्सेप्शन एक अप्रत्याशित या असामान्य घटना है जो प्रोग्राम के सामान्य प्रवाह को बाधित करती है। उदाहरण: फ़ाइल न मिलना, नेटवर्क कनेक्शन विफल होना, शून्य से भाग देना। जावा में एक्सेप्शन हैंडलिंग मैकेनिज्म इन त्रुटियों को शालीनता से संभालने और प्रोग्राम को क्रैश होने से बचाने की अनुमति देता है।

मुख्य एक्सेप्शन क्लासेस Throwable क्लास से इनहेरिट होती हैं। दो मुख्य प्रकार हैं:

  • चेक्ड एक्सेप्शन (Checked Exceptions): कंपाइल-टाइम पर चेक किए जाते हैं (जैसे IOException, SQLException)। इन्हें या तो try-catch ब्लॉक में हैंडल किया जाना चाहिए या मेथड सिग्नेचर में throws कीवर्ड के साथ घोषित किया जाना चाहिए।
  • अनचेक्ड एक्सेप्शन (Unchecked Exceptions / Runtime Exceptions): रनटाइम पर होते हैं (जैसे NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException)। कंपाइलर इन्हें चेक करने के लिए बाध्य नहीं करता, लेकिन इन्हें भी हैंडल किया जा सकता है।

जावा में ट्राई-कैच ब्लॉक (Try-Catch Block) कैसे उपयोग करें?

try-catch ब्लॉक का उपयोग एक्सेप्शन को हैंडल करने के लिए किया जाता है:

  • try ब्लॉक: इसमें वह कोड होता है जिसमें एक्सेप्शन आ सकता है।
  • catch ब्लॉक: यह try ब्लॉक के तुरंत बाद आता है। यदि try ब्लॉक में कोई एक्सेप्शन आता है, तो संबंधित catch ब्लॉक (जो उस एक्सेप्शन टाइप को हैंडल कर सकता है) निष्पादित होता है। आप एक try ब्लॉक के साथ कई catch ब्लॉक का उपयोग कर सकते हैं।


public class TryCatchDemo {

    public static void main(String[] args) {

        try {

            // Code that might throw an exception

            int result = 10 / 0; // Potential ArithmeticException

            System.out.println("Result: " + result); // This line won't execute if exception occurs

            int[] numbers = {1, 2, 3};

            System.out.println(numbers[5]); // Potential ArrayIndexOutOfBoundsException

        } catch (ArithmeticException e) {

            // Handle division by zero

            System.err.println("Error: Cannot divide by zero.");

            System.err.println("Exception details: " + e.getMessage());

        } catch (ArrayIndexOutOfBoundsException e) {

            // Handle array index error

            System.err.println("Error: Array index is out of bounds.");

            System.err.println("Exception details: " + e.getMessage());

        } catch (Exception e) { // Generic catch block (catches any other exception)

             System.err.println("An unexpected error occurred: " + e.getMessage());

        }

        System.out.println("Program continues after handling exceptions...");

    }

}

        

जावा में फाइनली ब्लॉक (Finally Block) क्या है और कैसे उपयोग करें?

finally ब्लॉक try-catch संरचना का एक वैकल्पिक हिस्सा है। finally ब्लॉक में लिखा गया कोड हमेशा निष्पादित होता है, चाहे एक्सेप्शन आया हो या नहीं, और चाहे एक्सेप्शन हैंडल हुआ हो या नहीं। इसका उपयोग आमतौर पर संसाधनों को जारी करने के लिए किया जाता है (जैसे फ़ाइल बंद करना, नेटवर्क कनेक्शन बंद करना)।



import java.io.FileReader;

import java.io.IOException;

import java.io.BufferedReader;

public class FinallyDemo {

    public static void main(String[] args) {

        BufferedReader reader = null; // Declare outside try to be accessible in finally

        try {

            reader = new BufferedReader(new FileReader("nonexistentfile.txt"));

            String line = reader.readLine();

            System.out.println("Read line: " + line);

        } catch (IOException e) {

            System.err.println("Error reading file: " + e.getMessage());

        } finally {

            // This block ALWAYS executes

            System.out.println("Entering finally block.");

            try {

                if (reader != null) {

                    reader.close(); // Ensure the resource is closed

                    System.out.println("BufferedReader closed.");

                }

            } catch (IOException ex) {

                System.err.println("Error closing reader: " + ex.getMessage());

            }

        }

        System.out.println("Program finished.");

    }

}

        

जावा में कलेक्शन फ्रेमवर्क (Collection Framework) क्या है और कैसे उपयोग करें?

जावा कलेक्शन फ्रेमवर्क ऑब्जेक्ट्स के समूह को स्टोर और मैनेज करने के लिए एक एकीकृत आर्किटेक्चर प्रदान करता है। यह विभिन्न डेटा संरचनाओं (जैसे लिस्ट, सेट, मैप) और एल्गोरिदम (जैसे सॉर्टिंग, सर्चिंग) के लिए रेडीमेड क्लासेस और इंटरफेस प्रदान करता है।

मुख्य इंटरफेस हैं:

  • Collection: फ्रेमवर्क का रूट इंटरफेस।
  • List: क्रमबद्ध (ordered) कलेक्शन, डुप्लिकेट तत्वों की अनुमति देता है।
  • Set: क्रमबद्ध नहीं (unordered) कलेक्शन, डुप्लिकेट तत्वों की अनुमति नहीं देता है।
  • Map: की-वैल्यू पेयर (key-value pairs) का कलेक्शन, कीज़ (keys) यूनिक होनी चाहिए।
  • Queue: FIFO (First-In, First-Out) डेटा संरचना।

जावा में लिस्ट (List), सेट (Set), और मैप (Map) क्या हैं और कैसे उपयोग करें?

  • लिस्ट (List): क्रम बनाए रखता है, इंडेक्स द्वारा तत्वों तक पहुँचा जा सकता है। सामान्य कार्यान्वयन: ArrayList (डायनामिक ऐरे, तेज रैंडम एक्सेस), LinkedList (लिंक्ड लिस्ट, तेज इंसर्शन/डिलीशन)।
    
    
    import java.util.ArrayList;
    
    import java.util.List;
    
    List<String> names = new ArrayList<>();
    
    names.add("Alice");
    
    names.add("Bob");
    
    names.add("Charlie");
    
    names.add("Alice"); // Duplicates allowed
    
    System.out.println(names); // Output: [Alice, Bob, Charlie, Alice]
    
    System.out.println(names.get(1)); // Output: Bob (access by index)
    
                    
  • सेट (Set): यूनिक तत्वों का कलेक्शन, क्रम की गारंटी नहीं (HashSet) या क्रमबद्ध (TreeSet, LinkedHashSet)। सामान्य कार्यान्वयन: HashSet (सबसे तेज, क्रमहीन), TreeSet (तत्वों को सॉर्टेड रखता है), LinkedHashSet (इंसर्शन ऑर्डर बनाए रखता है)।
    
    
    import java.util.HashSet;
    
    import java.util.Set;
    
    Set<Integer> numbers = new HashSet<>();
    
    numbers.add(10);
    
    numbers.add(20);
    
    numbers.add(10); // Duplicate, will be ignored
    
    numbers.add(30);
    
    System.out.println(numbers); // Output: [20, 10, 30] (order not guaranteed)
    
    System.out.println(numbers.contains(20)); // Output: true
    
                    
  • मैप (Map): की-वैल्यू पेयर स्टोर करता है। प्रत्येक की (key) यूनिक होनी चाहिए। सामान्य कार्यान्वयन: HashMap (सबसे तेज, क्रमहीन), TreeMap (कीज़ को सॉर्टेड रखता है), LinkedHashMap (इंसर्शन ऑर्डर बनाए रखता है)।
    
    
    import java.util.HashMap;
    
    import java.util.Map;
    
    Map<String, Integer> studentScores = new HashMap<>();
    
    studentScores.put("Ravi", 85);
    
    studentScores.put("Priya", 92);
    
    studentScores.put("Amit", 85);
    
    studentScores.put("Priya", 95); // Updates the value for key "Priya"
    
    System.out.println(studentScores); // Output: {Amit=85, Ravi=85, Priya=95} (order not guaranteed)
    
    System.out.println(studentScores.get("Ravi")); // Output: 85
    
    System.out.println(studentScores.containsKey("Sunil")); // Output: false
    
    // Iterating over a map
    
    for (Map.Entry<String, Integer> entry : studentScores.entrySet()) {
    
        System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
    
    }
    
                    

जावा में मल्टीथ्रेडिंग (Multithreading) क्या है और कैसे काम करता है?

मल्टीथ्रेडिंग एक प्रक्रिया (process) के भीतर कई थ्रेड्स (हल्के उप-प्रोसेस) को एक साथ चलाने की क्षमता है। प्रत्येक थ्रेड का अपना निष्पादन पथ होता है, लेकिन वे प्रक्रिया के मेमोरी स्पेस को साझा करते हैं। यह समवर्ती (concurrency) प्राप्त करने और एप्लिकेशन के प्रदर्शन और जवाबदेही (responsiveness) को बेहतर बनाने में मदद करता है, खासकर मल्टी-कोर प्रोसेसर पर।

उपयोग के उदाहरण: बैकग्राउंड टास्क चलाना, यूजर इंटरफेस को रिस्पॉन्सिव रखना, सर्वर एप्लिकेशन में कई क्लाइंट अनुरोधों को संभालना।

जावा में थ्रेड (Thread) कैसे बनाएं और कैसे उपयोग करें?

जावा में थ्रेड बनाने के दो मुख्य तरीके हैं:

  1. Thread क्लास को एक्सटेंड (Extend) करके:
  2. 
    
    class MyThread extends Thread {
    
        private String threadName;
    
        public MyThread(String name) {
    
            this.threadName = name;
    
            System.out.println("Creating " +  threadName );
    
        }
    
        @Override
    
        public void run() { // Thread's execution logic goes here
    
            System.out.println("Running " +  threadName );
    
            try {
    
                for(int i = 4; i > 0; i--) {
    
                    System.out.println("Thread: " + threadName + ", " + i);
    
                    Thread.sleep(50); // Pause execution
    
                 }
    
            } catch (InterruptedException e) {
    
                 System.out.println("Thread " +  threadName + " interrupted.");
    
            }
    
            System.out.println("Thread " +  threadName + " exiting.");
    
        }
    
    }
    
    public class ThreadExtendDemo {
    
       public static void main(String args[]) {
    
          MyThread t1 = new MyThread("Thread-1");
    
          MyThread t2 = new MyThread("Thread-2");
    
          t1.start(); // Starts the thread execution (calls run())
    
          t2.start();
    
       }
    
    }
    
                
  3. Runnable इंटरफेस को इम्प्लीमेंट (Implement) करके (Recommended): यह अधिक लचीला है क्योंकि आपकी क्लास अभी भी किसी अन्य क्लास को एक्सटेंड कर सकती है।
  4. 
    
    class MyRunnable implements Runnable {
    
        private String threadName;
    
        public MyRunnable(String name) {
    
            this.threadName = name;
    
            System.out.println("Creating runnable for " +  threadName );
    
        }
    
        @Override
    
        public void run() { // Execution logic
    
            System.out.println("Running " +  threadName );
    
            try {
    
                for(int i = 4; i > 0; i--) {
    
                    System.out.println("Runnable: " + threadName + ", " + i);
    
                    Thread.sleep(50);
    
                 }
    
            } catch (InterruptedException e) {
    
                 System.out.println("Runnable " +  threadName + " interrupted.");
    
            }
    
            System.out.println("Runnable " +  threadName + " exiting.");
    
        }
    
    }
    
    public class RunnableDemo {
    
       public static void main(String args[]) {
    
          MyRunnable r1 = new MyRunnable("Thread-A");
    
          Thread t1 = new Thread(r1); // Pass Runnable to Thread constructor
    
          MyRunnable r2 = new MyRunnable("Thread-B");
    
          Thread t2 = new Thread(r2);
    
          t1.start(); // Start the thread
    
          t2.start();
    
       }
    
    }
    
                

थ्रेड को शुरू करने के लिए start() मेथड का उपयोग किया जाता है, जो आंतरिक रूप से run() मेथड को कॉल करता है। सीधे run() को कॉल करने से थ्रेड नए निष्पादन स्टैक में शुरू नहीं होगा।

जावा में फाइल कैसे पढ़ें और लिखें? (File I/O)

जावा java.io पैकेज में फाइल ऑपरेशन के लिए क्लासेस प्रदान करता है।

फाइल पढ़ना (Reading a File - Text):



import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

public class ReadFileDemo {

    public static void main(String[] args) {

        String fileName = "example.txt"; // Assume this file exists

        // Try-with-resources ensures the reader is closed automatically

        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {

            String line;

            System.out.println("Reading from file: " + fileName);

            while ((line = reader.readLine()) != null) {

                System.out.println(line);

            }

        } catch (IOException e) {

            System.err.println("Error reading file '" + fileName + "': " + e.getMessage());

        }

    }

}

        

फाइल लिखना (Writing to a File - Text):



import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

public class WriteFileDemo {

    public static void main(String[] args) {

        String fileName = "output.txt";

        String content = "This is the first line.\nThis is the second line.";

        // Try-with-resources ensures the writer is closed automatically

        // FileWriter(fileName, true) appends instead of overwriting

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {

            writer.write(content);

            System.out.println("Successfully wrote to file: " + fileName);

        } catch (IOException e) {

            System.err.println("Error writing to file '" + fileName + "': " + e.getMessage());

        }

    }

}

        

नोट: बाइनरी फाइलों (जैसे इमेज, ऑडियो) को पढ़ने/लिखने के लिए FileInputStream और FileOutputStream का उपयोग करें। जावा NIO (java.nio) पैकेज अधिक उन्नत और कुशल फाइल I/O ऑपरेशन प्रदान करता है।

जावा में फाइल मोड (File Modes) क्या हैं और कैसे उपयोग करें?

पारंपरिक java.io में स्पष्ट "मोड" (जैसे 'r', 'w', 'a') नहीं होते जैसे कुछ अन्य भाषाओं में होते हैं। मोड का निर्धारण उपयोग की जाने वाली क्लास और उसके कंस्ट्रक्टर द्वारा होता है:

  • पढ़ना (Read): FileReader, FileInputStream आदि का उपयोग करने का मतलब है कि आप फाइल को पढ़ने के लिए खोल रहे हैं।
  • लिखना (Write - Overwrite): FileWriter(fileName) या FileOutputStream(fileName) (बिना दूसरे boolean आर्ग्युमेंट के) फाइल को लिखने के लिए खोलता है। यदि फाइल मौजूद है, तो उसे ओवरराइट कर दिया जाएगा। यदि नहीं, तो नई फाइल बनाई जाएगी।
  • लिखना (Write - Append): FileWriter(fileName, true) या FileOutputStream(fileName, true) फाइल को एपेंड मोड में खोलता है। यदि फाइल मौजूद है, तो नया डेटा अंत में जोड़ा जाएगा। यदि नहीं, तो नई फाइल बनाई जाएगी।

जावा NIO में Files.newByteChannel या Files.newOutputStream जैसे मेथड्स StandardOpenOption एनम (enum) का उपयोग करके अधिक स्पष्ट मोड (जैसे READ, WRITE, APPEND, CREATE, TRUNCATE_EXISTING) निर्दिष्ट करने की अनुमति देते हैं।

जावा में डेटाबेस कनेक्टिविटी (Database Connectivity - JDBC) कैसे स्थापित करें?

JDBC (Java Database Connectivity) एक API है जो जावा एप्लिकेशन्स को विभिन्न रिलेशनल डेटाबेस से कनेक्ट करने और इंटरैक्ट करने की अनुमति देता है।

कनेक्शन स्थापित करने के चरण:

  1. JDBC ड्राइवर लोड करें: प्रत्येक डेटाबेस (MySQL, PostgreSQL, Oracle, आदि) का अपना JDBC ड्राइवर होता है (आमतौर पर एक JAR फ़ाइल)। इसे क्लासपाथ में शामिल करना होगा। Class.forName("com.mysql.cj.jdbc.Driver"); (उदाहरण MySQL के लिए) का उपयोग करके ड्राइवर को रजिस्टर करें (आधुनिक JDBC संस्करणों में अक्सर यह स्वचालित होता है)।
  2. कनेक्शन स्थापित करें: DriverManager.getConnection(url, user, password) का उपयोग करें। URL डेटाबेस के प्रकार, होस्ट, पोर्ट और नाम को निर्दिष्ट करता है।
  3. स्टेटमेंट बनाएं: SQL क्वेरी निष्पादित करने के लिए Connection ऑब्जेक्ट से Statement या PreparedStatement (सुरक्षा और प्रदर्शन के लिए अनुशंसित) बनाएं।
  4. क्वेरी निष्पादित करें: Statement ऑब्जेक्ट के मेथड्स (जैसे executeQuery() SELECT के लिए, executeUpdate() INSERT/UPDATE/DELETE के लिए) का उपयोग करें।
  5. परिणाम प्रोसेस करें (यदि आवश्यक हो): executeQuery() एक ResultSet ऑब्जेक्ट लौटाता है, जिससे आप डेटा प्राप्त कर सकते हैं।
  6. संसाधन बंद करें: ResultSet, Statement, और Connection को finally ब्लॉक में या ट्राई-विद-रिसोर्स स्टेटमेंट का उपयोग करके बंद करना सुनिश्चित करें।

जावा में एसक्यूएल क्वेरी (SQL Query) कैसे चलाएं?

यहाँ JDBC का उपयोग करके एक सरल SELECT क्वेरी चलाने का उदाहरण दिया गया है (मान लें कि MySQL ड्राइवर क्लासपाथ में है):



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.SQLException;

public class JdbcSelectDemo {

    // Database credentials (Replace with your actual details)

    static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";

    static final String USER = "username";

    static final String PASS = "password";

    public static void main(String[] args) {

        String query = "SELECT id, name, email FROM users WHERE country = 'India'";

        // Use try-with-resources for automatic closing

        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

             Statement stmt = conn.createStatement();

             ResultSet rs = stmt.executeQuery(query)) {

            System.out.println("Connected to database successfully...");

            System.out.println("Executing query: " + query);

            System.out.println("Users from India:");

            // Extract data from result set

            while (rs.next()) {

                // Retrieve by column name or index (index starts from 1)

                int id = rs.getInt("id");

                String name = rs.getString("name");

                String email = rs.getString("email");

                // Display values

                System.out.print("ID: " + id);

                System.out.print(", Name: " + name);

                System.out.println(", Email: " + email);

            }

            System.out.println("Finished processing results.");

        } catch (SQLException e) {

            System.err.println("Database connection or query execution failed!");

            e.printStackTrace(); // Print detailed error

        }

        System.out.println("Program finished.");

    }

}

        

PreparedStatement का उपयोग पैरामीटर वाली क्वेरी के लिए किया जाता है, जो SQL इंजेक्शन हमलों को रोकने में मदद करता है:



import java.sql.*; // Import necessary classes

// ... (inside main or another method, connection 'conn' assumed)

String countryParam = "India";

String query = "SELECT id, name FROM users WHERE country = ?"; // Placeholder '?'

try (PreparedStatement pstmt = conn.prepareStatement(query)) {

    pstmt.setString(1, countryParam); // Set the parameter (index 1)

    try (ResultSet rs = pstmt.executeQuery()) { // Execute the prepared query

        while (rs.next()) {

            System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));

        }

    }

} catch (SQLException e) {

    e.printStackTrace();

}

        

जावा में वेब डेवलपमेंट (Web Development) के लिए कौन से फ्रेमवर्क उपयोग करें?

जावा वेब डेवलपमेंट के लिए एक मजबूत इकोसिस्टम प्रदान करता है। कुछ लोकप्रिय फ्रेमवर्क और टेक्नोलॉजीज हैं:

  • Spring Framework (विशेष रूप से Spring Boot): एंटरप्राइज-ग्रेड वेब एप्लिकेशन, माइक्रोडर्विसेज, REST APIs आदि बनाने के लिए सबसे लोकप्रिय और व्यापक फ्रेमवर्क में से एक। यह कॉन्फ़िगरेशन को सरल बनाता है और तेजी से विकास को सक्षम बनाता है।
  • Jakarta EE (पहले Java EE): एंटरप्राइज एप्लिकेशन बनाने के लिए स्पेसिफिकेशन्स का एक सेट। इसमें Servlets, JSP, JPA (Java Persistence API), EJB (Enterprise JavaBeans) जैसी टेक्नोलॉजीज शामिल हैं। WildFly, GlassFish जैसे एप्लिकेशन सर्वर इसे लागू करते हैं।
  • Servlets और JSP (JavaServer Pages): वेब डेवलपमेंट के लिए मूलभूत जावा टेक्नोलॉजीज। सर्वलेट जावा क्लासेस हैं जो अनुरोधों को प्रोसेस करती हैं, और JSP HTML में जावा कोड एम्बेड करने की अनुमति देता है (हालांकि आधुनिक विकास में अक्सर व्यू लेयर के लिए अन्य टेक्नोलॉजीज का उपयोग किया जाता है)।
  • Hibernate: एक लोकप्रिय ORM (Object-Relational Mapping) फ्रेमवर्क जो जावा ऑब्जेक्ट्स को डेटाबेस तालिकाओं में मैप करना आसान बनाता है (अक्सर JPA स्पेसिफिकेशन के कार्यान्वयन के रूप में उपयोग किया जाता है)।
  • Vaadin: जावा में वेब यूजर इंटरफेस बनाने के लिए एक फ्रेमवर्क, जो क्लाइंट-साइड UI लॉजिक को सर्वर-साइड जावा कोड से एब्स्ट्रैक्ट करता है।
  • Play Framework: एक उच्च-उत्पादकता वाला वेब फ्रेमवर्क जो Scala और Java दोनों का समर्थन करता है।

जावा में सर्वलेट (Servlet) और जेएसपी (JSP) क्या हैं और कैसे उपयोग करें?

  • सर्वलेट (Servlet): एक जावा क्लास जो वेब सर्वर पर चलती है और क्लाइंट (आमतौर पर वेब ब्राउज़र) से अनुरोध (request) प्राप्त करती है और प्रतिक्रिया (response) भेजती है। यह डायनामिक वेब कंटेंट उत्पन्न करने के लिए सर्वर-साइड लॉजिक को संभालती है। सर्वलेट्स jakarta.servlet.http.HttpServlet (या पुराने संस्करणों में javax.servlet.http.HttpServlet) को एक्सटेंड करती हैं और doGet(), doPost() जैसे मेथड्स को ओवरराइड करती हैं।
  • जेएसपी (JavaServer Pages - JSP): HTML पेज के भीतर जावा कोड एम्बेड करके डायनामिक वेब पेज बनाने की एक तकनीक। JSP फाइलों को वेब सर्वर द्वारा सर्वलेट में ट्रांसलेट और कंपाइल किया जाता है। यह प्रेजेंटेशन लॉजिक को बिजनेस लॉजिक से अलग करने में मदद करता है (हालांकि आजकल व्यू लेयर के लिए Thymeleaf, Freemarker, या क्लाइंट-साइड फ्रेमवर्क जैसे React/Angular/Vue का अधिक उपयोग होता है)।

सर्वलेट और JSP का उपयोग करने के लिए आमतौर पर एक वेब सर्वर/कंटेनर (जैसे Apache Tomcat, Jetty) की आवश्यकता होती है।

आधुनिक जावा वेब डेवलपमेंट में, विशेष रूप से Spring Boot के साथ, सीधे सर्वलेट और JSP का उपयोग कम आम हो गया है, क्योंकि फ्रेमवर्क उच्च-स्तरीय एब्स्ट्रैक्शन प्रदान करते हैं।

जावा में एंड्रॉइड ऐप डेवलपमेंट (Android App Development) कैसे करें?

जावा लंबे समय तक एंड्रॉइड ऐप डेवलपमेंट के लिए प्राथमिक भाषा थी (अब Kotlin भी आधिकारिक तौर पर समर्थित और पसंदीदा है, लेकिन जावा अभी भी व्यापक रूप से उपयोग किया जाता है)। एंड्रॉइड डेवलपमेंट में शामिल हैं:

  1. सेटअप: Android Studio (आधिकारिक IDE) इंस्टॉल करें, जिसमें एंड्रॉइड SDK (Software Development Kit) और अन्य आवश्यक टूल्स शामिल हैं।
  2. प्रोजेक्ट बनाना: Android Studio में एक नया प्रोजेक्ट बनाएं, अपनी ऐप का नाम, पैकेज का नाम और न्यूनतम SDK संस्करण चुनें।
  3. यूजर इंटरफेस (UI) डिजाइन करना: XML लेआउट फाइलों का उपयोग करके ऐप की स्क्रीन (एक्टिविटीज/फ्रैगमेंट्स) डिजाइन करें। आप विजेट्स (जैसे बटन, टेक्स्ट व्यू, इमेज व्यू) को ड्रैग-एंड-ड्रॉप या सीधे XML में कोड कर सकते हैं।
  4. एक्टिविटी/फ्रैगमेंट लॉजिक लिखना: जावा (या कोटलिन) क्लासेस (आमतौर पर Activity या Fragment को एक्सटेंड करते हुए) लिखें जो UI एलिमेंट्स के साथ इंटरैक्ट करती हैं, यूजर इनपुट को संभालती हैं, डेटा प्रोसेस करती हैं, और ऐप के व्यवहार को नियंत्रित करती हैं।
  5. एंड्रॉइड लाइफसाइकिल को समझना: एंड्रॉइड कंपोनेंट्स (जैसे एक्टिविटीज) का एक विशिष्ट जीवनचक्र होता है (onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy())। इन मेथड्स को सही ढंग से प्रबंधित करना महत्वपूर्ण है।
  6. डेटा हैंडलिंग: डेटा स्टोर करने के लिए विभिन्न विकल्पों का उपयोग करें: SharedPreferences (सरल की-वैल्यू), SQLite डेटाबेस (स्ट्रक्चर्ड डेटा), Room Persistence Library (SQLite पर एब्स्ट्रैक्शन), या नेटवर्क से डेटा लाना।
  7. टेस्टिंग: यूनिट टेस्ट और इंस्ट्रुमेंटेड टेस्ट लिखें।
  8. बिल्ड और डिप्लॉय करना: ऐप को एक APK (Android Package Kit) या AAB (Android App Bundle) में बिल्ड करें और इसे डिवाइस या एम्यूलेटर पर चलाएं या Google Play Store पर प्रकाशित करें।

जावा में एंड्रॉइड ऐप के लिए कौन से टूल्स और फ्रेमवर्क उपयोग करें?

  • Android Studio: आधिकारिक और सबसे महत्वपूर्ण IDE। इसमें कोड एडिटर, डिबगर, एम्यूलेटर, लेआउट एडिटर, बिल्ड टूल्स (Gradle) आदि शामिल हैं।
  • Android SDK: एंड्रॉइड ऐप्स बनाने और चलाने के लिए आवश्यक लाइब्रेरीज, टूल्स और APIs का संग्रह।
  • Gradle: एंड्रॉइड प्रोजेक्ट्स के लिए बिल्ड ऑटोमेशन टूल। यह निर्भरता (dependencies) को मैनेज करता है और ऐप को कंपाइल और पैकेज करता है।
  • Android Jetpack: गूगल द्वारा प्रदान की गई लाइब्रेरीज, टूल्स और गाइडेंस का एक सूट जो डेवलपर्स को उच्च-गुणवत्ता वाले, मजबूत एंड्रॉइड ऐप्स आसानी से बनाने में मदद करता है। इसमें शामिल हैं:
    • Room: SQLite डेटाबेस एक्सेस के लिए।
    • ViewModel & LiveData: UI-संबंधित डेटा को लाइफसाइकिल-अवेयर तरीके से स्टोर और मैनेज करने के लिए।
    • Navigation Component: ऐप के भीतर नेविगेशन को सरल बनाने के लिए।
    • WorkManager: विश्वसनीय बैकग्राउंड टास्क के लिए।
    • Compose: (कोटलिन-फर्स्ट) आधुनिक, डिक्लेरेटिव UI टूलकिट।
  • Retrofit / Volley: नेटवर्क अनुरोध (REST APIs कॉल करना) करने के लिए लोकप्रिय लाइब्रेरीज।
  • Glide / Picasso: इमेज लोडिंग और कैशिंग के लिए लाइब्रेरीज।
  • Firebase: गूगल का मोबाइल प्लेटफ़ॉर्म जो बैकएंड सेवाएं (डेटाबेस, प्रमाणीकरण, एनालिटिक्स, क्लाउड मैसेजिंग आदि) प्रदान करता है।

यह जावा का एक व्यापक अवलोकन था। जावा एक विशाल विषय है, और प्रत्येक क्षेत्र में गहराई से जाने के लिए बहुत कुछ है। निरंतर सीखते रहें और अभ्यास करते रहें!

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

JavaScript basic to advance guide

Tool Room Lath Machine: A Complete Guide

html Post Creator introduction