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

Когда мы ссылаемся на внутренние частные переменные Java POJO, у которых есть getters/seters, я использовал следующие термины:

  • поле
  • переменная
  • атрибут
  • свойство

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

Ответ 1

Отсюда: http://docs.oracle.com/javase/tutorial/information/glossary.html


  • поле

    • Элемент данных класса. Если не указано иное, поле не является статическим.

  • свойство

    • Характеристики объекта, который могут быть установлены пользователем, например цвет окна.

  • Атрибут

    • В приведенном выше глоссарии не указан

  • переменная

    • Элемент данных, названный идентификатором. Каждая переменная имеет тип, такой как int или Object, и область. См. Также переменную класса, переменную экземпляра, локальную переменную.

Ответ 2

Да, есть.

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

" Значение". Вероятно, это происходит из новых языков JVM FP, таких как Scala.

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

Атрибут - неопределенный термин. Его можно легко спутать с XML или Java Naming API. Старайтесь не использовать этот термин.

Свойство - это комбинация getter и setter.

Ниже приведены примеры

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

Dietel и Dietel имеют приятный способ объяснения полей и переменных.

"Вместе статические переменные классов и переменные экземпляра известны как его поля". (Раздел 6.3)

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

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

Ссылка - Дитель П., Дитель, Х. - Java ™ Как программировать (ранние объекты), десятое издание (2014)

Ответ 4

Если ваш вопрос был задан с помощью JAXB и вы хотите выбрать правильный XMLAccessType, у меня был тот же вопрос. JAXB Javadoc говорит, что "поле" - это нестатическая, непереходная переменная экземпляра. "Свойство" имеет пару геттер/сеттер (поэтому она должна быть частной переменной). "Публичный член" является публичным, и, следовательно, он, вероятно, является постоянным. Также в JAXB "атрибут" относится к части элемента XML, как в <myElement myAttribute="first">hello world</myElement>.

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

Ответ 5

Если вы берете ключ из Hibernate:

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

Именно инкапсуляция, которая отличает, означает, что у вас есть getter/seters для поля, и это называется свойством, и поэтому мы скрываем основную структуру данных этого свойства в setMethod, мы можем предотвратить нежелательные изменения внутри сеттеров. Все, что означает инкапсуляция...

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

Свойства могут быть изменены установщиком, и они отображаются с помощью геттеров. Здесь цена поля имеет getter/setters, поэтому это свойство.

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

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

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

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

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

Ответ 6

Переменные состоят из полей и не-полей.

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

  • Статические поля или
  • нестатические поля также называются экземплярами, например. x = F()

Неполя может быть:

  • локальные переменные, аналог полей, но внутри методов, а не вне их всех, или
  • например. y в x = f (y)

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

Основной пример (извините за мой синтаксис, я просто новичок)

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

A переменная - это то, что вы объявляете, которое по умолчанию может меняться и иметь разные значения, но также может быть явно указано как окончательное. В 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 является "экземпляром" поля, в котором область действия (переменная) ограничена областью объектов.

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

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