मुख्य सामग्री पर जाएं
मॉड्यूल 2 · पाठ 1 का 2पाठ्यक्रम में 3/14~12 min
मॉड्यूल पाठ (1/2)

कक्षाएँ और वस्तुएँ

जावा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) पर केंद्रित भाषा है। OOP में, हम वस्तुओं का उपयोग करके वास्तविक दुनिया का मॉडल बनाते हैं। किसी वस्तु में स्थिति (डेटा) और व्यवहार (क्रियाएँ) होती हैं।

कक्षाएँ और वस्तुएँ

  • क्लास: यह एक ब्लूप्रिंट (या टेम्प्लेट) है जो किसी प्रकार की वस्तु के गुणों और व्यवहार को परिभाषित करता है।
  • ऑब्जेक्ट: यह एक क्लास से बनाया गया एक ठोस उदाहरण है।

उदाहरण के लिए, यदि Car वर्ग है, तो गैरेज में आपकी कार वास्तविक वस्तु है।

इंस्टेंस फ़ील्ड्स और कंस्ट्रक्टर्स

किसी क्लास के अंदर के डेटा को इंस्टेंस फ़ील्ड (या विशेषताएँ) कहा जाता है। किसी वस्तु के निर्माण के समय उसकी स्थिति को आरंभ करने के लिए, हम एक विशेष विधि का उपयोग करते हैं जिसे कन्स्ट्रक्टर कहा जाता है।

एक कंस्ट्रक्टर का क्लास के समान नाम होता है और उसका कोई रिटर्न प्रकार नहीं होता (void भी नहीं)।

Java
class Dog {
    // Instance fields
    String name;
    int age;

    // Constructor
    public Dog(String name, int age) {
        this.name = name; // 'this' refers to the current object's field
        this.age = age;
    }
}

new के साथ एक ऑब्जेक्ट बनाना

मेमोरी में ऑब्जेक्ट बनाने के लिए, हम क्लास कंस्ट्रक्टर के बाद new कीवर्ड का उपयोग करते हैं:

Java
public class Main {
    public static void main(String[] args) {
        // Creating a Dog object
        Dog myDog = new Dog("Fido", 3);

        // Accessing fields
        System.out.println(myDog.name + " is " + myDog.age + " years old.");
    }
}

this संदर्भ

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

Java
class User {
    String username;

    public User(String username) {
        this.username = username; // this.username is the instance field, username is the parameter
    }
}

मेमोरी आवंटन: स्टैक बनाम हीप

यह समझना आवश्यक है कि जावा मेमोरी कैसे आवंटित करता है:

  1. स्टैक: यह एक तेज़ और व्यवस्थित मेमोरी क्षेत्र है जहां तरीकों के लिए स्थानीय आदिम चर और ऑब्जेक्ट संदर्भ (मेमोरी एड्रेस) संग्रहीत होते हैं।
  2. हीप: यह एक बड़ा और गतिशील मेमोरी क्षेत्र है जहां वास्तविक ऑब्जेक्ट आवंटित किए जाते हैं (new कीवर्ड का उपयोग करके)।

जब हम Dog myDog = new Dog("Fido", 3); घोषित करते हैं:

  • संदर्भ myDog स्टैक पर बनाया गया है।
  • वास्तविक Dog ऑब्जेक्ट अपने डेटा के साथ हीप पर बनाया गया है।
  • myDog वेरिएबल हीप पर ऑब्जेक्ट के स्थान को इंगित करता है।

खुद कोशिश करना

व्यायाम#java.m2.l1.e1
प्रयास: 0लोड हो रहा है...

फ़ील्ड नाम और एक उपयुक्त कंस्ट्रक्टर जोड़कर व्यक्ति वर्ग को पूरा करें। फिर, मुख्य विधि में, ऐलिस नाम के साथ p नामक एक व्यक्ति ऑब्जेक्ट बनाएं।

संपादक लोड हो रहा है...
संकेत दिखाएँ

क्लास के अंदर `स्ट्रिंग नाम;` लिखें, कंस्ट्रक्टर को `सार्वजनिक व्यक्ति (स्ट्रिंग नाम) { यह.नाम = नाम; घोषित करें; }` और इसे `नए व्यक्ति('ऐलिस')` के साथ त्वरित करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m2.l1.e2
प्रयास: 0लोड हो रहा है...

फ़ील्ड शीर्षक (स्ट्रिंग) और पेज (इंट), एक पूर्ण कंस्ट्रक्टर के साथ एक बुक क्लास बनाएं, और मुख्य विधि में मोबी डिक शीर्षक और 600 पृष्ठों के साथ बी नामक एक पुस्तक को इंस्टेंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

बुक में दोनों फ़ील्ड को परिभाषित करना याद रखें, उन्हें `this.title = title;` और `this.pages = पेज;` का उपयोग करके कंस्ट्रक्टर में मैप करें, और `new Book('मोबी डिक', 600)` का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m2.l1.e3
प्रयास: 0लोड हो रहा है...

फ़ील्ड नाम (स्ट्रिंग) और मूल्य (डबल) के साथ एक उत्पाद वर्ग बनाएं, और एक कंस्ट्रक्टर जो दोनों फ़ील्ड को प्रारंभ करता है। मुख्य विधि में, लैपटॉप नाम और कीमत 999.99 के साथ p नाम से एक उत्पाद ऑब्जेक्ट बनाएं।

संपादक लोड हो रहा है...
संकेत दिखाएँ

उत्पाद में `स्ट्रिंग नाम;` और `डबल प्राइस;` फ़ील्ड घोषित करें, उन्हें कंस्ट्रक्टर में `this.name = name;` और `this.price = कीमत;` के साथ असाइन करें, और अंत में मुख्य विधि में ऑब्जेक्ट बनाएं।

3 प्रयासों के बाद समाधान उपलब्ध है