Theory
Semester 3 से एक Transfer Student
पिछले semester आपने C++ में CanteenTill बनाया: classes, constructors, delete, एक-दो friend functions। अब एक Java file खोलिए और 90% familiar लगता है: braces, semicolons, if, for, यहाँ तक कि class भी।
Exam बाकी 10% में रहता है। "Java को C++ से Compare कीजिए" सबसे ज़्यादा repeated BCA403 questions में से एक है, और good news यह है कि लगभग हर difference एक design decision follow करता है जो Java ने बनाया।
Theory
वह Locked Drawer
C++ एक workshop है जहाँ हर tool open bench पर है, वे भी जो आपको काट सकते हैं: raw pointers, manual delete, operator overloading।
Java एक safety audit के बाद वही workshop है: dangerous drawer locked है। आप कुछ low-level control खोते हैं; बदले में, crashes की पूरी categories (dangling pointers, memory leaks, double frees) बस हो ही नहीं सकतीं। Comparison table की हर row यही एक trade है: safety के लिए control।
At a glance
Java बनाम C++ (यह table सीखिए, यही answer है)
| Feature | C++ | Java |
|---|---|---|
| Compilation | Native machine code में | Bytecode में, JVM से run होता है |
| Pointers | Yes, पूरा pointer arithmetic | कोई pointers नहीं; सिर्फ़ references |
| Memory freeing | Manual, delete के साथ (destructors) | Automatic garbage collection |
| Multiple inheritance | Classes के लिए allowed | Classes के लिए नहीं; interfaces के ज़रिए |
| Operator overloading | Yes | No (Strings के लिए सिर्फ़ built-in +) |
| Preprocessor | #include, #define | कोई नहीं; import इस्तेमाल करता है |
| Global variables/functions | Allowed | No; सब कुछ एक class के अंदर |
| goto | Available | Reserved word, कभी usable नहीं |
Theory
Java ने Sharp Tools क्यों छोड़े
Pointers C++ code को किसी भी memory address को पढ़ने या लिखने देते हैं; एक ग़लत address data corrupt कर देता है या program crash कर देता है। Java के references objects की तरफ़ point करते हैं पर raw memory पर add, subtract या aim नहीं किए जा सकते।
Destructors और delete programmer को memory free करने के लिए responsible बनाते थे; एक बार भूलिए और आप leak करते हैं। Java का garbage collector उन objects के लिए watch करता है जिनकी तरफ़ अब कुछ भी refer नहीं करता और उन्हें automatically reclaim करता है। Safer, memory कब वापस आती है इस पर exact control की कीमत पर।
Quiz
इनमें से कौन सी feature Java में available NAHI है?
- Classes का multiple inheritance
- Garbage collection
- Interfaces
- Classes के बीच single inheritance
Show the answer
Classes का multiple inheritance
Java एक class को 2 parent classes extend करने से forbid करता है (C++ का diamond problem एक motivation था)। Garbage collection Java की headline features में से एक है, interfaces multiple inheritance का Java का replacement route हैं (Unit 2), और extends के साथ single inheritance everyday Java है। अगर इस तरह के question में एक option interfaces या garbage collection को missing की तरह mention करता है, यह एक trap है।
Think first
delete कहाँ गया?
CanteenTill में आपने इस्तेमाल के बाद delete के साथ एक Bill object free किया। Tap करने से पहले: Java में equivalent step क्या है?
Show the answer
कोई equivalent step नहीं है, और यही answer है जो examiner चाहता है। जब अब किसी object की तरफ़ कोई reference नहीं point करता, garbage collector इसे automatically reclaim करता है; आप कभी delete call नहीं करते और Java के पास destructors नहीं हैं। ज़्यादा से ज़्यादा आप एक reference drop कर सकते हैं (bill = null) object को sooner eligible बनाने के लिए। Manual memory freeing exactly वह C++ responsibility है जो Java ने हटा दी।
Watch out
इस Comparison में दो Traps
Trap 1: "Java multiple inheritance नहीं कर सकता" लिखना। Incomplete। कहिए: classes के साथ नहीं, पर एक class कई interfaces implement कर सकता है, जो same idea तक Java का route है।
Trap 2: "Java में pointers नहीं हैं, तो objects हर जगह copy होते हैं" लिखना। Class types के Java variables objects की तरफ़ references hold करते हैं। Java जो हटाता है वह pointer arithmetic और raw memory access है, किसी object को refer करने का concept नहीं।
Theory
पूरे Subject में इस Thread को Carry कीजिए
पूरे semester CanteenTill को एक हाथ में और BookBridge को दूसरे में रखिए। Constructors (Unit 2) दोनों languages में similarly behave करते हैं; this C++ के this pointer syntax को replace करता है; extends colon को replace करता है; interfaces (Unit 2) multiple inheritance answer करते हैं; garbage collection delete को replace करता है। जब भी एक Java feature odd लगे, पूछिए: यह किस C++ problem को fix करने के लिए design किया गया था? Answer आमतौर पर आपके लिए exam paragraph लिख देता है।
Summary
Key takeaways
- Java और C++ C-family syntax और OOP share करते हैं; differences deliberate safety choices हैं।
- Java में कोई pointers नहीं, कोई destructors/delete नहीं, कोई operator overloading नहीं, कोई preprocessor नहीं, कोई globals नहीं।
- Memory garbage collector reclaim करता है, programmer नहीं।
- Classes का multiple inheritance forbidden है; interfaces Java route provide करते हैं।
- C++ native machine code में compile होता है; Java JVM के लिए bytecode में compile होता है।
- goto और const Java में reserved words की तरह exist करते हैं पर कभी इस्तेमाल नहीं हो सकते।
- Memory hook: Java dangerous drawer locked वाला C++ है।