Вопрос по java – В чем разница между полем, переменной, атрибутом и свойством в Java POJO?

125

При обращении к внутренним закрытым переменным Java POJO, которые имеют геттеры / сеттеры, я использовал следующие термины:

field variable attribute property

Есть ли разница между вышеперечисленным? Если да, какой правильный термин использовать? Есть ли другой термин, чтобы использовать, когда эта сущность сохраняется?

Ваш Ответ

9   ответов
1

и той же вещи, но существуют некоторые исключительные ситуации. Поле может хранить состояние объекта. Также все поля являются переменными. Таким образом, ясно, что могут быть переменные, которые не являются полями. Таким образом, рассматривая переменные типа 4 (переменная класса, переменная экземпляра, локальная переменная и переменная параметра), мы видим, что переменные класса и переменные экземпляра могут влиять на состояние объекта. Другими словами, если переменная класса или экземпляра изменяется, состояние объекта изменяется. Таким образом, мы можем сказать, что переменные класса и переменные экземпляра являются полями, а локальные переменные и переменные параметров - нет.

Если вы хотите глубже понять, вы можете обратиться к источнику ниже:

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

0

как показано ниже, и я не говорю, что это на 100% правильно, я мог бы также ошибаться ..

variable это то, что вы объявляете, которое может измениться по умолчанию и иметь другие значения, но это также может быть явно объявлено как окончательное. В Java это будет:

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

В общем, переменная - это все, что объявлено и может содержать значения. Метод foo, приведенный выше, возвращает, например, переменную. Он возвращает переменную типа Integer, которая содержит адрес памяти нового Integer (); Все остальное, что вы видите выше, также является переменными listVariable, aFinalVariableExample и объясняется здесь:

Поле - это переменная, где область видимости более ясна (или конкретна). Переменная, возвращаемая из области видимости метода foo, не ясна в приведенном выше примере, поэтому я бы не назвал ее полем. С другой стороны, iAmAlsoVariable является "локальным" поле, ограниченное областью применения метода foo, а listVariable является «экземпляром» поле, в котором область действия поля (переменной) ограничена областью действия объектов.

Свойство - это поле, к которому можно получить доступ / изменить его. Любое поле, которое предоставляет метод получения / установки, является свойством.

Я не знаю об атрибутах, и я также хотел бы повторить, что я понимаю, что такое переменные, поля и свойства.

110

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

field

A data member of a class. Unless specified otherwise, a field is not static.

property

Characteristics of an object that users can set, such as the color of a window.

attribute

Not listed in the above glossary

variable

An item of data named by an identifier. Each variable has a type, such as int or Object, and a scope. See also class variable, instance variable, local variable.
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsettableError: User Rate Limit Exceeded
Error: User Rate Limit ExceededcouldError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
79

Variable может быть локальным, полевым или постоянным (хотя это технически неправильно). Это неопределенный атрибут. Кроме того, вы должны знать, что некоторые люди любят звонитьfinal нестатические (локальные или экземплярные) переменные

& Quot;Values& Quot ;. Это, вероятно, происходит от появляющихся языков FP JVM, таких как Scala.

Field обычно является закрытой переменной класса экземпляра. Это не значит, что есть геттер и сеттер.

Attribute это неопределенный термин. Его легко спутать с API именования XML или Java. Старайтесь не использовать этот термин.

Property является комбинацией геттера и сеттера.

Some examples below

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

}

Есть еще много комбинаций, но мои пальцы устают :)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

& # x201C; Вместе статические переменные класса и переменные экземпляра называются его полями. & # x201D; (Раздел 6.3)

& # x201C; Переменные должны объявляться как поля, только если они необходимы для использования более чем в одном методе класса или если программа должна сохранять их значения между вызовами методов класса. & # x201D ; (Раздел 6.4)

Таким образом, полями класса являются его статические переменные или переменные экземпляра, т.е. объявленные с областью действия класса.

Ссылка - Dietel P., Dietel, H. - Java & # x2122; Как программировать (ранние объекты), десятое издание (2014)

2

Hibernate читает / записывает состояние объекта с его полем. Hibernate также отображает свойства стиля Java Bean в схему БД. Hibernate Доступ к полям для загрузки / сохранения объекта. Если сопоставление выполняется по свойству, hibernate использует методы получения и установки.

It is the Encapsulation that differentiates means where you have getter/setters for a field and it is called property, withthat and we hide the underlying data structure of that property within setMethod, we can prevent unwanted change inside setters. All what encapsulation stands for...

Fields должны быть объявлены и инициализированы перед использованием. Главным образом для внутреннего использования класса.

Properties могут быть изменены сеттером, и они выставлены геттерами. Здесь цена поля имеет геттер / сеттер, так что это свойство.

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

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

Аналогично используяfields, [В спящем режиме это рекомендуемый способ MAP с использованием полей, где private int id; аннотирован @Id, но с помощью Property вы получаете больший контроль]

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

Java документ говорит: Поле является членом данных класса. Поле не является статической, не преходящей переменной экземпляра. Поле обычно является частной переменной в классе экземпляра.

0

но другое важное различие между переменной и полем состоит в том, что поле получает значение по умолчанию, когда оно объявлено. С другой стороны, переменная должна быть инициализирована.

Error: User Rate Limit Exceeded
5

ыйXMLAccessType, У меня такой же вопрос. JAXBJavadoc говорит, что "поле" является нестатической, непереходной переменной экземпляра. «Свойство» имеет пару геттер / сеттер (так что это должна быть приватная переменная). «Публичный участник» является публичным, и, следовательно, вероятно, является константой. Также в JAXB атрибут & quot; атрибут & quot; относится к части элемента XML, как в<myElement myAttribute="first">hello world</myElement>.

Кажется, что свойство Java "quot;" в общем, может быть определено как поле с по крайней мере геттером или каким-либо другим открытым методом, который позволяет вам получить его значение. Некоторые люди также говорят, что у собственности должен быть сеттер. Для таких определений контекст - это все.

1

Поля могут быть либо:

Static fields or non-static fields also called instantiations e.g. x = F()

Неполями могут быть:

local variables, the analog of fields but inside a methods rather than outside all of them, or parameters e.g. y in x = f(y)

В заключение следует отметить, что ключевое различие между переменными заключается в том, являются ли они полями или не полями, то есть находятся ли они внутри методов или вне всех методов.

Базовый пример (извините за синтаксис, я только начинающий)

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

Похожие вопросы