Java POJO'larda alan, değişken, öznitelik ve özellik arasındaki fark nedir?


142

Alıcıları / ayarlayıcıları olan Java POJO'ların dahili özel değişkenlerine başvururken aşağıdaki terimleri kullandım:

  • alan
  • değişken
  • nitelik
  • Emlak

Yukarıdakiler arasında herhangi bir fark var mı? Öyleyse, kullanılacak doğru terim nedir? Bu varlık devam ettiğinde kullanılacak farklı bir terim var mı?

Yanıtlar:


117

Buradan: http://docs.oracle.com/javase/tutorial/information/glossary.html


  • alan

    • Bir sınıfın veri üyesi. Aksi belirtilmedikçe, alan statik değildir.

  • Emlak

    • Bir pencerenin rengi gibi kullanıcıların ayarlayabileceği bir nesnenin özellikleri.

  • nitelik

    • Yukarıdaki sözlükte listelenmemiştir

  • değişken

    • Tanımlayıcı tarafından adlandırılan bir veri öğesi. Her değişkenin int veya Object gibi bir türü ve kapsamı vardır. Ayrıca bkz. Sınıf değişkeni, örnek değişkeni, yerel değişken.

27
Hala bir alan ile bir mülk arasındaki farkı anlamıyorum.
Koray Tugay

1
@KorayTugay - Bir alana, bir nesneyle ilgili temel bir veri parçası olarak bakın. Bir özellik (benim için), dış dünyaya görünür (ve görünüşte değişebilir) bir nesnenin karakteristiğidir.
jahroy

Yukarıdakilere dayanarak, "Bir özellik ayarlanabilir bir alan hariç, özellikler ve alanlar aynıdır" demek adil olur mu?
jdurston

2
@John - Belki de belirtildiği gibi Oracle'dan bir kopya / yapıştır olan yukarıdakilere dayanmaktadır. Şahsen, bir mülkün herkes tarafından görülebilir ve muhtemelen değişebilir olduğu ayrımını yaparken, bir alan sadece sınıf tarafından kullanılan dahili, özel bir alan olabilir .
jahroy

1
Stres için en iyi şey, bir alan ve bir mülk olarak varlığın karşılıklı olarak münhasır olmadığıdır. Bu cevabın ifade edilmesinden yeni geliştiricilere kadar, farklı şeylerin bir listesi gibi görünüyor.
Kartik Chugh

89

Evet var.

Değişken yerel, alan veya sabit olabilir (bu teknik olarak yanlış olsa da). Belirsiz bir özellik. Ayrıca, bazı kişilerin nihai statik olmayan (yerel veya örnek) değişkenleri aramayı sevdiğini bilmelisiniz

" Değerler ". Bu muhtemelen Scala gibi yükselen JVM FP dillerinden geliyor.

Alan genellikle bir örnek sınıfındaki özel bir değişkendir. Bu bir alıcı ve ayarlayıcı olduğu anlamına gelmez.

Nitelik belirsiz bir terimdir. XML veya Java Adlandırma API'sı ile kolayca karıştırılabilir. Bu terimi kullanmaktan kaçının.

Özellik alıcı ve ayarlayıcı birleşimidir.

Aşağıda bazı örnekler

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;
    }

}

Daha fazla kombinasyon var, ama parmaklarım yoruluyor :)


3
@Chris Thompson Eclipse'ın diyaloglarından birinde söylediği şey bu. Hey, Java'sıdır. Sana ne söyleyebilirim. Mantıklı değil.
Adam Gent

4
@AdamGent JAVA = Başka Bir belirsiz kısaltması :)
Emory

@emory Eski bilinen oksimoron. Bu Java için özel bir şey değil, bu "sorun" en az C ve muhtemelen daha uzun kadar geri gider .. Açıkçası hiçbir şey sadece "sabit"
Voo

@AdamGent Ciddi değildi, sadece size zor bir zaman veriyor ;-)
Chris Thompson

1
Tanımlayıcı adlarının gülünç derecede uzayabileceği ile ilgili iyi bir açıklama (ve gülünç derecede uzun sürüyorlar).
Mart'ta sargas

5

Sorunuz JAXB kullanılarak isteniyorsa ve doğru seçimi yapmak istiyorsanız XMLAccessType, aynı soruyu sordum. JAXB Javadoc , bir "alanın" statik olmayan, geçici olmayan bir örnek değişkeni olduğunu söylüyor. Bir "özellik" bir alıcı / ayarlayıcı çiftine sahiptir (bu nedenle özel bir değişken olmalıdır). Bir "kamu üyesi" halka açıktır ve bu nedenle muhtemelen sabittir. Ayrıca JAXB'de "öznitelik", olduğu gibi bir XML öğesinin bir parçasına karşılık gelir <myElement myAttribute="first">hello world</myElement>.

Genel olarak bir Java "özelliği", en azından alıcı veya değerini almanıza izin veren başka bir genel yöntem içeren bir alan olarak tanımlanabilir. Bazı insanlar bir mülkün pasör olması gerektiğini de söyler. Bunun gibi tanımlar için bağlam her şeydir.


5

Dietel ve Dietel'in alanları ve değişkenleri açıklamanın güzel bir yolu var.

“Bir sınıfın statik değişkenleri ve örnek değişkenleri birlikte alanları olarak bilinir.” (Bölüm 6.3)

“Değişkenler yalnızca sınıfın birden fazla yönteminde kullanılması gerekiyorsa veya program değerlerini sınıfın yöntemlerine yapılan çağrılar arasında kaydetmesi gerekiyorsa alan olarak bildirilmelidir.” (Bölüm 6.4)

Yani bir sınıfın alanları statik veya örnek değişkenleridir - yani sınıf kapsamıyla bildirilir.

Referans - Dietel P., Dietel, H. - Java ™ Nasıl Programlanır (Erken Nesneler), Onuncu Baskı (2014)


3

Hazırda Beklet'ten ipucu alırsanız:

Hazırda Bekletme, Nesnenin durumunu alanıyla birlikte okur / yazar. Hazırda Beklet ayrıca Java Bean stili özelliklerini DB Şeması ile eşler. Hazırda Beklet Nesneyi yüklemek / kaydetmek için alanlara erişin. Eşleme özellik tarafından yapılırsa, hazırda bekletme özelliği alıcı ve ayarlayıcıyı kullanır.

Bir alan için alıcı / ayarlayıcılara sahip olduğunuz anlamına gelen Kapsülleme'dir ve buna özellik denir, bununla birlikte setMethod içinde o özelliğin temel veri yapısını gizleriz, ayarlayıcılar içinde istenmeyen değişiklikleri önleyebiliriz. Enkapsülasyonun anlamı ...

Alanlar kullanılmadan önce bildirilmeli ve başlatılmalıdır. Çoğunlukla sınıf içi kullanım içindir.

Özellikler ayarlayıcı tarafından değiştirilebilir ve alıcılar tarafından gösterilir. Burada alan fiyatı alıcı / ayarlayıcıları vardır, bu yüzden mülkiyettir.

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

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

Benzer şekilde alanları kullanarak , [Hazırda bekletme modunda, özel int id alanlarını kullanarak MAP için önerilen yoldur; @Id eklenir, ancak Mülk ile daha fazla kontrolünüz vardır]

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

Java doc diyor ki: Alan bir sınıfın veri üyesidir. Bir alan statik olmayan, geçici olmayan örnek değişkendir. Alan genellikle bir örnek sınıfındaki özel bir değişkendir.


2

Değişkenler, alanlardan ve alan olmayanlardan oluşur.

Alanlar şunlardan biri olabilir:

  1. Statik alanlar veya
  2. statik olmayan alanlar örnekleme olarak da adlandırılır, örneğin x = F ()

Alan olmayanlar şunlardan biri olabilir:

  1. yerel değişkenler, alanların analogu ancak hepsinin dışında değil, bir yöntem içinde veya
  2. parametreler örn. y in x = f (y)

Sonuç olarak, değişkenler arasındaki temel ayrım, alan ya da alan dışı olmalarıdır, yani bir yöntem içinde ya da tüm yöntemlerin dışında olmalarıdır.

Temel Örnek (benim sözdizim için affedersiniz, ben sadece acemiyim)

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

1

Aslında bu iki terim genellikle aynı şeyi temsil etmek için kullanılır, ancak bazı istisnai durumlar vardır. Bir alan bir nesnenin durumunu saklayabilir. Ayrıca tüm alanlar değişkendir. Dolayısıyla, alan olmayan değişkenler olabileceği açıktır. Bu nedenle, 4 değişken türüne (sınıf değişkeni, örnek değişkeni, yerel değişken ve parametre değişkeni) baktığımızda, sınıf değişkenlerinin ve örnek değişkenlerin bir nesnenin durumunu etkileyebileceğini görebiliriz. Başka bir deyişle, bir sınıf veya örnek değişkeni değişirse, nesnenin durumu değişir. Yani yerel değişkenler ve parametre değişkenleri sınıf değişkenleri ve örnek değişkenlerin alan olduğunu söyleyebiliriz.

Daha derinlemesine anlamak istiyorsanız, aşağıdaki kaynağa gidebilirsiniz: -

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


0

Soru eskidir, ancak bir değişken ile bir alan arasındaki diğer bir önemli fark, bir alanın bildirildiğinde varsayılan bir değer almasıdır.Öte yandan bir değişken başlatılmalıdır.


Bir mülke ne dersiniz?
Koray Tugay

0

Benim anlayışım aşağıdaki gibidir ve bunun% 100 doğru olduğunu söylemiyorum, yanılıyor olabilirim ..

Bir değişken beyan ettiğiniz, varsayılan olarak değişebilen ve farklı değerlere sahip olan, ancak açıkça son olduğu söylenebilen bir şeydir. Java'da şöyle olur:

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();
    }
}

Yani temel olarak, değişken bildirilen ve değerleri tutabilen herhangi bir şeydir. Yukarıdaki yöntem foo, örneğin bir değişken döndürür. Yeni Integer () 'in bellek adresini tutan Integer türünde bir değişken döndürür; Yukarıda gördüğünüz her şey değişkenler, listVariable, aFinalVariableExample ve burada açıklanmıştır:

Alan, kapsamın daha net (veya somut) olduğu bir değişkendir. Yöntem foo'nun kapsamından dönen değişken yukarıdaki örnekte net değildir, bu yüzden ona bir alan demezdim. Öte yandan, iAmAlsoVariable yöntemi foo yönteminin kapsamıyla sınırlı bir "yerel" alandır ve listVariable ise alanın (değişken) kapsamının nesnelerin kapsamıyla sınırlı olduğu bir "örnek" alanıdır.

Özellik, erişilebilen / değiştirilebilen bir alandır. Alıcı / ayarlayıcıyı ortaya çıkaran herhangi bir alan bir özelliktir.

Öznitelik hakkında bilmiyorum ve ayrıca bu değişkenlerin, alanların ve özelliklerin ne olduğuyla ilgili anlayışım olduğunu tekrarlamak istiyorum.


0
  • variable- adlandırılmış depolama adresi. Her değişkenin bellek boyutunu, niteliklerini ve davranışlarını tanımlayan bir türü vardır. Java değişkenlerin tipleri için vardır: class variable, instance variable, local variable,method parameter
//pattern
<Java_type> <name> ;

//for example
int myInt;
String myString;
CustomClass myCustomClass;
  • field- üye değişkeni veya veri üyesi. Bu a, variableiçinde bir class( class variableya da instance variable)

  • attribute- bazı makalelerde attributebunun bir objecttemsili olduğunu görebilirsiniz class variable. bir dizi özelliği tanımlayan şekilde Objectçalışır attributes.

CustomClass myCustomClass = new CustomClass();
myCustomClass.something = "poor fantasy"; //something is an attribute of myCustomClass object with a "poor fantasy" value
  • property- field+ sınırlı getter/setter. Alan sözdizimi vardır, ancak başlık altında yöntemler kullanır. Javasaf formda desteklemez. Bir göz atın Objective-C, Swift,Kotlin

Örnek Kotlinörnek:

//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

[Swift değişkeni, özellik]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.