मैं दो शब्दों के बीच बहुत भ्रमित हूँ। मैंने स्टैकओवरफ़्लो पर जाँच की और C ++ के लिए एक समान प्रश्न है, लेकिन जावा के लिए नहीं।
क्या कोई जावा के लिए दो शब्दों के बीच का अंतर समझा सकता है?
मैं दो शब्दों के बीच बहुत भ्रमित हूँ। मैंने स्टैकओवरफ़्लो पर जाँच की और C ++ के लिए एक समान प्रश्न है, लेकिन जावा के लिए नहीं।
क्या कोई जावा के लिए दो शब्दों के बीच का अंतर समझा सकता है?
जवाबों:
वैचारिक अंतर सरल है:
घोषणा : आप घोषणा कर रहे हैं कि कुछ मौजूद है, जैसे कि एक वर्ग, फ़ंक्शन या चर। आप इस बारे में कुछ भी नहीं कहते हैं कि वह वर्ग या कार्य कैसा दिखता है, आप बस यह कहते हैं कि यह मौजूद है।
परिभाषा : आप परिभाषित करते हैं कि किसी चीज़ को कैसे लागू किया जाता है, जैसे कि एक वर्ग, फ़ंक्शन या चर, यानी आप कहते हैं कि यह वास्तव में क्या है।
जावा में , दोनों के बीच थोड़ा अंतर है, और औपचारिक रूप से, एक घोषणा में न केवल पहचानकर्ता शामिल है, बल्कि इसकी परिभाषा भी है। यहाँ मैं विस्तार से शब्दों की व्याख्या व्यक्तिगत रूप से कर रहा हूँ:
कक्षाएं : जावा वास्तव में सी / सी ++ के रूप में घोषणाओं और परिभाषाओं को अलग नहीं करता है (हेडर और सीपीपी फ़ाइलों में)। आप उन्हें उस बिंदु पर परिभाषित करते हैं जहां आप उन्हें घोषित करते हैं।
कार्य : जब आप एक इंटरफ़ेस (या एक सार वर्ग) लिख रहे हैं, तो आप कह सकते हैं कि आप इसे परिभाषित किए बिना एक फ़ंक्शन की घोषणा कर रहे हैं। साधारण कार्य हालांकि, हमेशा सही घोषित किए जाते हैं जहां वे घोषित किए जाते हैं। यदि आप चाहें तो फंक्शन की बॉडी को इसकी परिभाषा के रूप में देखें।
चर : एक चर घोषणा इस तरह दिख सकती है:
int x;
(आप घोषित कर रहे हैं कि एक चर xमौजूद है और टाइप है int) या तो यह एक स्थानीय चर या सदस्य क्षेत्र है। जावा में, परिभाषितx करने के लिए कोई जानकारी नहीं बची है , सिवाय संभव है कि यह किन मूल्यों को रखेगा, जो इसे असाइनमेंट द्वारा निर्धारित किया जाता है।
यहां बताया गया है कि मैं शर्तों का कैसे उपयोग करता हूं:
abstract class SomeClass { // class decl.
// \
int x; // variable decl. |
// |
public abstract void someMethod(); // function decl. |
// |
public int someOtherMethod() { // function decl. |
// | class
if (Math.random() > .5) // \ | def.
return x; // | function definition |
else // | |
return -x; // / |
// |
} // |
} // /
javac, कक्षा की घोषणाएं कक्षा की परिभाषा का पर्याय लगती हैं। उदाहरण के लिए विचार करें public void visitClassDef(JCClassDecl tree)।
जावा लैंग्वेज स्पेसिफिकेशन "घोषणा" शब्द का विस्तार और उपयोग करता है, लेकिन यह सामान्य अंग्रेजी शब्द के अलावा "परिभाषा" का उपयोग नहीं करता है।
मेरा प्रमाण यह है कि शब्द "घोषणा" जेएलएस तालिका में सामग्री और सूचकांक में कई बार दिखाई देता है, लेकिन "परिभाषा" शब्द भी प्रकट नहीं होता है।
इसलिए, जब आप किसी को जावा के संदर्भ में "परिभाषा" शब्द का उपयोग करते हुए देखते हैं, तो वे या तो इसे गैर-तकनीकी अर्थ में उपयोग कर रहे हैं, या वे अपनी शब्दावली के साथ मैला हो रहे हैं।
बाद के मामले में, उनका मतलब वही हो सकता है जो तकनीकी शब्द "घोषणा" के समान है, या उनका मतलब कुछ और हो सकता है। और अगर उनका मतलब कुछ और है, तो आपको उनसे पूछने की जरूरत है कि उनका क्या मतलब है। अगर उन्होंने इसे परिभाषित किया है ... पर्याप्त रूप से उचित है, लेकिन यह मानक शब्दावली नहीं है।
उत्तर जो कि "परिभाषा" बताता है, उस बिंदु को संदर्भित करता है जिस पर चर को आरंभीकृत किया जाता है, विशेष रूप से सहायक नहीं है ... जावा के संदर्भ में। जावा में, एक वैरिएबल का प्रारंभ या तो घोषणा के बिंदु पर होता है, या बाद के असाइनमेंट में होता है। बाद के मामले में, कोई विशेष शब्द का उपयोग नहीं किया जाता है ... असाइनमेंट और / या आरंभीकरण के अलावा ... की आवश्यकता होती है। कोई निर्दिष्ट बिंदु नहीं है जिस पर चर के लिए भंडारण आवंटित किया गया है। वास्तव में, संभावना यह है कि घोषणा के पूरा होने से पहले चर के लिए स्थान आवंटित किया जाता है।
JLS कल्पना में जावा में "परिभाषा" शब्द का उपयोग नहीं किया गया है, इसकी आवश्यकता नहीं है।
(जावा में एकमात्र स्थान जहाँ उन्होंने घोषणा बनाम परिभाषा का उपयोग किया हो सकता है, सार विधियों में है। सिवाय इसके कि अगर उन्होंने किया था, तो एक नियमित रूप से घोषणा को परिभाषा के रूप में संदर्भित करना होगा ... संगति के लिए ... और वह भ्रामक होगा। इसलिए वे "अमूर्त" को एक अमूर्त पद्धति की घोषणा कहते हैं।)
C और C ++ इन बातों को अलग ढंग से संभाल, और इसलिए करते हैं की जरूरत है अलग "घोषणा" और उनके तकनीकी विवरण में "परिभाषा" शर्तों। मेरी "सूर्य शब्दावली" परिभाषाएं हैं कि वे C / C ++ -centric हैं।
से सूर्य शब्दकोष के परिभाषाएँ:
घोषणा:
एक बयान जो एक पहचानकर्ता को स्थापित करता है और उसके साथ विशेषताओं को जोड़ता है, आवश्यक रूप से इसके भंडारण (डेटा के लिए) को जलाए बिना या कार्यान्वयन प्रदान करता है (विधियों के लिए)।
परिभाषा: एक घोषणा जो भंडारण (डेटा के लिए) को संग्रहीत करती है या कार्यान्वयन (विधियों के लिए) प्रदान करती है।
मैं जिस तरह से सूर्य शब्दावली पढ़ता हूं वह इस तरह होगी:
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
1. घोषणा का अर्थ है एक primitive or Object reference variable, लेकिन क्रमशः मूल्य या वस्तु के असाइनमेंट के साथ नहीं।
उदाहरण के लिए:
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2. डिफिकेशन तब होता है जब हम उन्हें मान या ऑब्जेक्ट असाइन करते हैं।
int x = 5;
Cat myCat = new Cat();
3. मेथड के मामले में, इस तरह ...
public abstract void go(); // Method Declaration (Abstract method)
public void go(){ // Method Defination
// Your code
}
मुझे लगता है कि मैं इस प्रश्न को कुछ इस तरह समझा सकता हूं:
निम्नलिखित परिदृश्य के बारे में सोचो:
आपकी फर्म में सॉफ्टवेयर इंजीनियर का एक नया पद खाली है। इसका मतलब यह है कि जिस व्यक्ति को आपने इस पद को भरने के लिए चुना है, वह एक सॉफ्टवेयर इंजीनियर होगा, (आप इस पद के लिए कोई मार्केटिंग आदमी नहीं चुन सकते हैं)। तो इस पोस्ट को बनाना घोषणा के समान है।
अब जब आप परिभाषित करते हैं कि इस पद वाला व्यक्ति क्या कर सकता है / नहीं कर सकता है, उसके पास कौन से अधिकारी हैं, उसकी सीमाएँ क्या हैं, तो इसे परिभाषा कहा जाता है।
इसलिए कह रहे हैं
SoftwareEngineer se;
डिक्लेरेशन का मतलब;
तथा
class SoftwareEngineer {
// define role and responsibilities
}
मतलब परिभाषा। आशा है कि यह आपकी मदद करता है।
Java भाषा केवल घोषणा शब्द को परिभाषित करती है जो परिभाषा का उपयोग नहीं करती है।
घोषणा:
class A{}// class declaration
String str;// variable declaration
घोषणा : एक बयान जो एक पहचानकर्ता को स्थापित करता है और उसके साथ विशेषताओं को जोड़ता है, आवश्यक रूप से इसके भंडारण (डेटा के लिए) को जलाए बिना या कार्यान्वयन प्रदान करता है (विधियों के लिए)।
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
परिभाषा : एक घोषणा जो भंडारण (डेटा के लिए) को संग्रहीत करती है या कार्यान्वयन (विधियों के लिए) प्रदान करती है।
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference