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


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

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

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

9 117

9 ответов:

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


  • поле

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

  • свойства

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

  • атрибут

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

  • переменная

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

Да, есть.

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

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

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

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

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

некоторые примеры ниже

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

}

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

дитель и дитель имеют хороший способ объяснить поля против переменных.

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

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

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

Reference-Dietel P., Dietel, H.-Java™ How To Program (Early Objects), Tenth Edition (2014)

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

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

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

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

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

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

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

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

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

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

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

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

переменные состоят из полей, а не поля.

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

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

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

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

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

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

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

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

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

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

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

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

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

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