जावा POJOs में फ़ील्ड, चर, विशेषता और संपत्ति के बीच अंतर क्या है?


142

जावा POJOs के आंतरिक निजी चर का जिक्र करते समय, जिसमें गेटर्स / सेटर हैं, मैंने निम्नलिखित शब्दों का उपयोग किया है:

  • मैदान
  • परिवर्तनशील
  • गुण
  • संपत्ति

क्या उपरोक्त में कोई अंतर है? यदि हां, तो उपयोग करने के लिए सही शब्द क्या है? क्या इस इकाई के बने रहने पर उपयोग करने के लिए एक अलग शब्द है?

जवाबों:


117

यहाँ से: http://docs.oracle.com/javase/tutorial/information/glossary.html


  • मैदान

    • किसी वर्ग का डेटा सदस्य। जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, तब तक कोई क्षेत्र स्थिर नहीं होता है।

  • संपत्ति

    • किसी ऑब्जेक्ट की विशेषताएं जो उपयोगकर्ता सेट कर सकते हैं, जैसे कि विंडो का रंग।

  • गुण

    • उपरोक्त शब्दावली में सूचीबद्ध नहीं है

  • परिवर्तनशील

    • एक पहचानकर्ता द्वारा नामित डेटा का एक आइटम। प्रत्येक चर का एक प्रकार होता है, जैसे इंट या ऑब्जेक्ट और एक स्कोप। वर्ग चर, उदाहरण चर, स्थानीय चर भी देखें।

27
मुझे अभी भी एक क्षेत्र और एक संपत्ति के बीच अंतर समझ में नहीं आता है?
कोरे तुगाई

1
@KorayTugay - किसी क्षेत्र को किसी वस्तु से संबंधित डेटा के अल्पविकसित टुकड़े के रूप में देखें। एक संपत्ति (मेरे लिए) एक ऐसी वस्तु की विशेषता है जो बाहरी दुनिया को दिखाई देती है (और जाहिर है)।
जहरॉय

उपरोक्त के आधार पर, यह कहना उचित होगा कि "संपत्ति और क्षेत्र समान हैं, एक संपत्ति को छोड़कर एक व्यवस्थित क्षेत्र है"?
jdurston

2
@ जॉन - शायद ऊपर आधारित है, जो, जैसा कि नोट किया गया है, Oracle से एक कॉपी / पेस्ट है। व्यक्तिगत रूप से मैं यह भेद करूंगा कि एक संपत्ति सार्वजनिक रूप से दिखाई दे रही है और संभवतः परस्पर है, जबकि एक क्षेत्र एक आंतरिक, निजी क्षेत्र हो सकता है जिसका उपयोग केवल वर्ग द्वारा किया जाता है।
जहरॉय

1
मुझे लगता है कि तनाव की सबसे अच्छी बात यह है कि एक क्षेत्र और एक संपत्ति के रूप में अस्तित्व परस्पर अनन्य नहीं है। जिस तरह से यह उत्तर नए डेवलपर्स को दिया जाता है, वह अलग-अलग चीजों की एक सूची की तरह दिखता है।
कार्तिक चुघ

89

हाँ वहाँ है।

परिवर्तनीय स्थानीय, क्षेत्र या स्थिर हो सकता है (हालांकि यह तकनीकी रूप से गलत है)। यह विशेषता की तरह अस्पष्ट है। इसके अलावा, आपको पता होना चाहिए कि कुछ लोग अंतिम गैर-स्थिर (स्थानीय या उदाहरण) चर को कॉल करना पसंद करते हैं

" मान "। यह संभवत: स्केला जैसी उभरती हुई जेवीएम एफपी भाषाओं से आता है।

फील्ड आमतौर पर एक उदाहरण वर्ग पर एक निजी चर है। इसका मतलब यह नहीं है कि एक गेटटर और एक सेटर है।

विशेषता एक अस्पष्ट शब्द है। यह आसानी से एक्सएमएल या जावा नामकरण एपीआई के साथ भ्रमित हो सकता है। उस शब्द के उपयोग से बचने की कोशिश करें।

संपत्ति गटर और सेटर संयोजन है।

नीचे कुछ उदाहरण

public class Variables {

    //Constant
    public final static String MY_VARIABLE = "that was a lot for a constant";

    //Value
    final String dontChangeMeBro = "my god that is still long for a val";

    //Field
    protected String flipMe = "wee!!!";

    //Property
    private String ifYouThoughtTheConstantWasVerboseHaHa;

    //Still the property
    public String getIfYouThoughtTheConstantWasVerboseHaHa() {
        return ifYouThoughtTheConstantWasVerboseHaHa;
    }

    //And now the setter
    public void setIfYouThoughtTheConstantWasVerboseHaHa(String ifYouThoughtTheConstantWasVerboseHaHa) {
        this.ifYouThoughtTheConstantWasVerboseHaHa = ifYouThoughtTheConstantWasVerboseHaHa;
    }

}

कई और संयोजन हैं, लेकिन मेरी उंगलियां थक रही हैं :)


3
@ क्रिस थॉम्पसन थाट्स ने ग्रहण को अपने एक संवाद में कहा। अरे दोस्तों इसके जावा। मैं आपसे क्या कह सकता हूं। इसका कोई मतलब नहीं है।
एडम जेंट

4
@AdamGent JAVA = सिर्फ एक और अस्पष्ट रेटिंग :)
एमोरी

@emory खैर यह पुराने प्रसिद्ध ऑक्सिमोरॉन है। यह जावा के लिए कुछ भी विशिष्ट नहीं है, कि "समस्या" कम से कम सी और शायद लंबे समय तक वापस चली जाती है .. जाहिर है कि कुछ भी आपको इसे केवल "स्थिर" कहने से नहीं रोकता है
Voo

@AdamGent गंभीर नहीं था, बस आपको एक कठिन समय दिया ;-)
क्रिस थॉम्पसन

1
पहचान करने वाले नामों का मज़ाक उड़ाते समय अच्छी व्याख्या की जा सकती है कि वे हास्यास्पद रूप से लंबे हो सकते हैं (और वे बहुत बार हास्यास्पद हो जाते हैं)।
सरगस

5

यदि आपके सवाल को JAXB का उपयोग करके और सही चुनने के लिए प्रेरित किया गया था XMLAccessType, तो मेरा भी यही सवाल था। JAXB Javadoc का कहना है कि "फ़ील्ड" एक गैर-स्थैतिक, गैर-क्षणिक उदाहरण चर है। एक "संपत्ति" में एक गेट्टर / सेटर जोड़ी होती है (इसलिए यह एक निजी चर होना चाहिए)। एक "सार्वजनिक सदस्य" सार्वजनिक है, और इसलिए शायद एक स्थिर है। JAXB में भी, एक "विशेषता" एक XML तत्व के भाग को संदर्भित करता है, जैसे कि <myElement myAttribute="first">hello world</myElement>

ऐसा लगता है कि एक जावा "संपत्ति," सामान्य रूप से, एक क्षेत्र के रूप में परिभाषित किया जा सकता है जिसमें कम से कम एक गेट्टर या कुछ अन्य सार्वजनिक विधि होती है जो आपको इसके मूल्य प्राप्त करने की अनुमति देती है। कुछ लोग यह भी कहते हैं कि एक संपत्ति के लिए एक सेटर की आवश्यकता होती है। इस तरह की परिभाषाओं के लिए, संदर्भ सब कुछ है।


5

डिटेल और डिटेल में खेतों बनाम चर को समझाने का अच्छा तरीका है।

"एक साथ एक वर्ग के स्थिर चर और उदाहरण चर को इसके क्षेत्र के रूप में जाना जाता है।" (धारा 6.3)

"चर को केवल फ़ील्ड के रूप में घोषित किया जाना चाहिए, यदि वे कक्षा के एक से अधिक तरीकों में उपयोग के लिए आवश्यक हैं या यदि प्रोग्राम को कॉल के बीच के मूल्यों को कक्षा के तरीकों में सहेजना चाहिए।" (धारा 6.4)

तो एक वर्ग के क्षेत्र उसके स्थिर या उदाहरण चर हैं - अर्थात वर्ग गुंजाइश के साथ घोषित।

संदर्भ - डाइटेल पी।, डिटेल, एच। - जावा ™ कैसे प्रोग्राम (प्रारंभिक ऑब्जेक्ट्स), दसवें संस्करण (2014)


3

यदि आप हाइबरनेट से सुराग लेते हैं:

हाइबरनेट अपने क्षेत्र के साथ ऑब्जेक्ट की स्थिति को पढ़ता / लिखता है। हाइबरनेट भी जावा बीन शैली के गुणों को डीबी स्कीमा में मैप करता है। हाइबरनेट ऑब्जेक्ट को लोड / सेव करने के लिए खेतों तक पहुंचें। यदि मैपिंग संपत्ति द्वारा की जाती है, तो हाइबरनेट गेट्टर और सेटर का उपयोग करता है।

यह एनकैप्सुलेशन है कि विभेदक का अर्थ है जहां आपके पास एक क्षेत्र के लिए गेट्टर / सेटर हैं और इसे संपत्ति कहा जाता है, withthat और हम सेटमैथोड के भीतर उस संपत्ति के अंतर्निहित डेटा संरचना को छिपाते हैं, हम सेटर्स के अंदर अवांछित परिवर्तन को रोक सकते हैं। क्या सभी encapsulation के लिए खड़ा है ...

उपयोग किए जाने से पहले फ़ील्ड घोषित और आरंभ की जानी चाहिए। ज्यादातर वर्ग आंतरिक उपयोग के लिए।

गुणों को सेटर द्वारा बदला जा सकता है और उन्हें गेटर्स द्वारा उजागर किया जाता है। यहां फील्ड प्राइस में गेटटर / सेटर है इसलिए यह संपत्ति है।

class Car{
 private double price;
 public double getPrice() {…};
 private void setPrice(double newPrice) {…};
}

<class name="Car" …>
<property name="price" column="PRICE"/>
</class>

इसी तरह खेतों का उपयोग करते हुए , [हाइबरनेट में) खेतों का उपयोग करके एमएपी के लिए अनुशंसित तरीका है, जहां निजी इंट आईडी; @Id एनोटेट किया गया है, लेकिन संपत्ति के साथ आपके पास अधिक नियंत्रण है]

class Car{
  private double price;
}
<class name="Car">
<property name=" price" column="PRICE" access="field"/>
</class>

जावा डॉक कहता है: फील्ड एक वर्ग का डेटा सदस्य है। एक क्षेत्र गैर स्थिर, गैर-क्षणिक उदाहरण चर है। फील्ड आमतौर पर एक उदाहरण वर्ग पर एक निजी चर है।


2

चर क्षेत्र और गैर-फ़ील्ड शामिल हैं।

फ़ील्ड्स या तो हो सकते हैं:

  1. स्थैतिक क्षेत्र या
  2. गैर-स्थिर क्षेत्रों को भी इंस्टेंटिएशन कहा जाता है जैसे x = F ()

गैर-क्षेत्र या तो हो सकते हैं:

  1. स्थानीय चर, खेतों का एनालॉग लेकिन उन सभी के बाहर के बजाय एक विधि के अंदर, या
  2. पैरामीटर जैसे x = f (y) में y

अंत में, चर के बीच मुख्य अंतर यह है कि वे क्षेत्र या गैर-क्षेत्र हैं, जिसका अर्थ है कि क्या वे एक विधि के अंदर हैं या सभी विधियों के बाहर हैं।

मूल उदाहरण (मेरे वाक्यविन्यास के लिए मुझे क्षमा करें, मैं सिर्फ एक शुरुआत हूं)

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

1

दरअसल ये दोनों शब्द अक्सर एक ही चीज़ का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं, लेकिन कुछ असाधारण स्थितियां हैं। कोई फ़ील्ड किसी ऑब्जेक्ट की स्थिति को संग्रहीत कर सकती है। इसके अलावा सभी क्षेत्र चर हैं। तो यह स्पष्ट है कि ऐसे चर हो सकते हैं जो क्षेत्र नहीं हैं। तो 4 प्रकार के चर (वर्ग चर, उदाहरण चर, स्थानीय चर और पैरामीटर चर) को देखते हुए हम देख सकते हैं कि वर्ग चर और उदाहरण चर किसी वस्तु की स्थिति को प्रभावित कर सकते हैं। दूसरे शब्दों में यदि कोई वर्ग या आवृत्ति परिवर्तनशील है, तो वस्तु की स्थिति बदल जाती है। तो हम कह सकते हैं कि वर्ग चर और उदाहरण चर क्षेत्र हैं जबकि स्थानीय चर और पैरामीटर चर नहीं हैं।

यदि आप अधिक गहराई से समझना चाहते हैं, तो आप नीचे दिए गए स्रोत को देख सकते हैं: -

http://sajupauledayan.com/java/fields-vs-variables-in-java


0

सवाल पुराना है लेकिन एक चर और क्षेत्र के बीच एक और महत्वपूर्ण अंतर यह है कि किसी क्षेत्र को घोषित किए जाने पर डिफ़ॉल्ट मान मिलता है। दूसरी ओर, चर को आरंभिक रूप से देखा जाना चाहिए।


कैसे एक संपत्ति के बारे में?
कोरे तुगय

0

मेरी समझ नीचे दी गई है, और मैं यह नहीं कह रहा हूं कि यह 100% सही है, मैं गलत भी हो सकता हूं।

एक चर वह चीज है जिसे आप घोषित करते हैं, जो डिफ़ॉल्ट रूप से बदल सकता है और अलग-अलग मूल्य हो सकता है, लेकिन यह भी स्पष्ट रूप से अंतिम कहा जा सकता है। जावा में यह होगा:

public class Variables {

    List<Object> listVariable; // declared but not assigned
    final int aFinalVariableExample = 5; // declared, assigned and said to be final!

    Integer foo(List<Object> someOtherObjectListVariable) {
        // declare..
        Object iAmAlsoAVariable;

        // assign a value..
        iAmAlsoAVariable = 5;

        // change its value..
        iAmAlsoAVariable = 8;

        someOtherObjectListVariable.add(iAmAlsoAVariable);

        return new Integer();
    }
}

तो मूल रूप से, एक चर कुछ भी है जो घोषित किया गया है और मूल्यों को पकड़ सकता है। उदाहरण के लिए विधि फू ऊपर एक चर देता है .. यह प्रकार का एक चर लौटाता है जो कि पूर्णांक का स्मृति पता रखता है; बाकी सब कुछ जो आप ऊपर देख रहे हैं वह भी चर, listVariable, aFinalVariableExample और यहां समझाया गया है:

एक क्षेत्र एक चर है जहां गुंजाइश अधिक स्पष्ट (या ठोस) है। विधि foo के दायरे से लौटने वाला चर ऊपर के उदाहरण में स्पष्ट नहीं है, इसलिए मैं इसे क्षेत्र नहीं कहूंगा। दूसरी ओर, iAmAlsoVariable एक "स्थानीय" फ़ील्ड है, जो विधि foo के दायरे से सीमित है, और listVariable एक "उदाहरण" फ़ील्ड है जहां फ़ील्ड (चर) का दायरा ऑब्जेक्ट स्कोप द्वारा सीमित है।

एक संपत्ति एक क्षेत्र है जिसे एक्सेस / म्यूट किया जा सकता है। कोई भी क्षेत्र जो एक गेटटर / सेटर को उजागर करता है वह एक संपत्ति है।

मुझे विशेषता के बारे में नहीं पता है और मैं यह भी दोहराना चाहूंगा कि यह मेरी समझ है कि चर, क्षेत्र और गुण क्या हैं।


0
  • variable- नाम भंडारण पता। हर वेरिएबल में एक प्रकार होता है जो एक मेमोरी साइज, विशेषताओं और व्यवहारों को परिभाषित करता है। जावा चर के प्रकार के लिए कर रहे हैं: class variable, instance variable, local variable,method parameter
//pattern
<Java_type> <name> ;

//for example
int myInt;
String myString;
CustomClass myCustomClass;
  • field- सदस्य चर या डेटा सदस्य। यह variableएक class( class variableया instance variable) के अंदर है

  • attribute- कुछ लेखों में आप पा सकते हैं कि attributeयह एक objectप्रतिनिधित्व है class variable। जिसके Objectद्वारा attributesविशेषताओं का एक सेट परिभाषित किया जाता है ।

CustomClass myCustomClass = new CustomClass();
myCustomClass.something = "poor fantasy"; //something is an attribute of myCustomClass object with a "poor fantasy" value
  • property- field+ निकाला हुआ getter/setter। इसमें एक फ़ील्ड सिंटैक्स है लेकिन हुड के नीचे विधियों का उपयोग करता है। Javaशुद्ध रूप में इसका समर्थन नहीं करता है। पर एक नजर डालें Objective-C, Swift,Kotlin

उदाहरण के लिए Kotlinनमूना:

//field - Backing Field
class Person {
    var name: String = "default name"
        get() = field
        set(value) { field = value }
}

//using
val person = Person()
person.name = "Alex"    // setter is used
println(person.name)    // getter is used

[स्विफ्ट चर, संपत्ति]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.