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

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

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

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

11 ответов

Решение

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


  • поле

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

  • имущество

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

  • атрибут

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

  • переменная

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

Да, есть.

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

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

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

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

Свойство является комбинацией получателя и установщика.

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

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

}

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

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

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

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

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

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

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

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

Если вы берете подсказку из 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>

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

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

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

Разница между переменной, полем, атрибутом и свойством в Java:

Переменная - это имя, присвоенное ячейке памяти. Это основная единица хранения в программе.

Поле - это член данных класса. Если не указано иное, поле может быть общедоступным, статическим, не статическим и окончательным.

Атрибут - это еще один термин для поля. Обычно это общедоступное поле, к которому можно получить прямой доступ.

  • В NetBeans или Eclipse, когда мы вводим объект класса и после этой точки (.) Они дают некоторые предложения, которые называются атрибутами.

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

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

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

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

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

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

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

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

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

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

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

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}
  • variable- именованный адрес хранения. У каждой переменной есть тип, который определяет размер памяти, атрибуты и поведение. Существуют типы переменных Java: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

[Swift переменная, свойство]

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

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

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

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

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

Другие вопросы по тегам