Qual é a diferença entre campo, variável, atributo e propriedade em POJOs Java?

Ao se referir a variables ​​privadas internas de POJOs Java que possuem getters / setters, usei os seguintes termos:

  • campo
  • variável
  • atributo
  • propriedade

Existe alguma diferença entre o acima? Em caso afirmativo, qual é o termo correto a ser usado? Existe um termo diferente para usar quando esta entidade é persistida?

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


    • campo

      • Um membro de dados de uma class. A menos que especificado de outra forma, um campo não é estático.

    • propriedade

      • Características de um object que os usuários podem definir, como a cor de uma janela.

    • atributo

      • Não listado no glossário acima

    • variável

      • Um item de dados nomeado por um identificador. Cada variável tem um tipo, como int ou Object, e um escopo. Veja também variável de class, variável de instância, variável local.

    Sim existe.

    A variável pode ser local, campo ou constante (embora isso seja tecnicamente errado). É vago como atributo. Além disso, você deve saber que algumas pessoas gostam de chamar variables ​​não-estáticas (locais ou de instância) finais

    Valores “. Isso provavelmente vem de linguagens emergentes de FP da JVM, como o Scala.

    O campo é geralmente uma variável privada em uma class de instância. Isso não significa que há um getter e um setter.

    Atributo é um termo vago. Ele pode ser facilmente confundido com XML ou API de nomenclatura Java. Tente evitar usar esse termo.

    Propriedade é a combinação de getter e setter.

    Alguns exemplos abaixo

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

    Existem muitas outras combinações, mas meus dedos estão ficando cansados ​​:)

    Dietel e Dietel têm uma boa maneira de explicar campos e variables.

    “Juntas, as variables ​​estáticas e as variables ​​de instância de uma class são conhecidas como seus campos.” (Seção 6.3)

    “As variables ​​devem ser declaradas como campos apenas se forem necessárias para uso em mais de um método da class ou se o programa deve salvar seus valores entre as chamadas para os methods da class.” (Seção 6.4)

    Portanto, os campos de uma class são suas variables ​​estáticas ou de instância – isto é, declaradas com escopo de class.

    Referência – Dietel P., Dietel, H. – Java ™ Como programar (primeiros objects), décima edição (2014)

    Se sua pergunta foi solicitada usando o JAXB e querendo escolher o XMLAccessType correto, eu fiz a mesma pergunta. O Javadoc JAXB diz que um “campo” é uma variável de instância não estática, não transiente. Uma “propriedade” tem um par de getter / setter (portanto, deve ser uma variável privada). Um “membro público” é público e, portanto, é provavelmente uma constante. Também em JAXB, um “atributo” refere-se a parte de um elemento XML, como em hello world .

    Parece que uma “propriedade” Java, em geral, pode ser definida como um campo com pelo menos um getter ou algum outro método público que permita obter seu valor. Algumas pessoas também dizem que uma propriedade precisa ter um setter. Para definições como essa, o contexto é tudo.

    Se você der uma pista do Hibernate:

    O Hibernate lê / escreve o estado do Objeto com seu campo. O Hibernate também mapeia as propriedades de estilo do Java Bean para o DB Schema. Hibernar Acesse os campos para carregar / salvar o object. Se o mapeamento for feito por propriedade, o hibernate usa o getter e o setter.

    É o encapsulamento que diferencia significa onde você tem getter / setters para um campo e é chamado de propriedade, com isso e ocultamos a estrutura de dados subjacente dessa propriedade dentro de setMethod, podemos evitar alterações indesejadas dentro de setters. Tudo o que significa encapsulamento …

    Os campos devem ser declarados e inicializados antes de serem usados. Principalmente para uso interno de class.

    As propriedades podem ser alteradas pelo setter e são expostas pelos getters. Aqui, o preço do campo tem getter / setters, portanto é uma propriedade.

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

    Da mesma forma, usando campos , [No hibernate é a maneira recomendada de mapear usando campos, onde private int id; é anotado como @Id, mas com Propriedade você tem mais controle]

     class Car{ private double price; }    

    Documento Java diz: Campo é um membro de dados de uma class. Um campo é uma variável de instância não estática e não transiente. O campo é geralmente uma variável privada em uma class de instância.

    As variables ​​são compostas por campos e não campos.

    Campos podem ser:

    1. Campos estáticos ou
    2. campos não estáticos também chamados de instanciações, por exemplo, x = F ()

    Os campos não podem ser:

    1. variables ​​locais, o análogo de campos, mas dentro de um método, e não fora de todos eles, ou
    2. parâmetros eg y in x = f (y)

    Em conclusão, a principal diferença entre as variables ​​é se elas são campos ou não campos, ou seja, se estão dentro de um método ou fora de todos os methods.

    Exemplo básico (desculpe-me pela minha syntax, eu sou apenas um iniciante)

     Class { //fields method1 { //non-fields } } 

    Na verdade, esses dois termos costumam ser usados ​​para representar a mesma coisa, mas existem algumas situações excepcionais. Um campo pode armazenar o estado de um object. Também todos os campos são variables. Portanto, é claro que pode haver variables ​​que não são campos. Então, olhando para o tipo 4 de variables ​​(variável de class, variável de instância, variável local e variável de parâmetro), podemos ver que variables ​​de class e variables ​​de instância podem afetar o estado de um object. Em outras palavras, se uma variável de class ou instância for alterada, o estado do object será alterado. Portanto, podemos dizer que variables ​​de class e variables ​​de instância são campos, enquanto variables ​​locais e variables ​​de parâmetro não são.

    Se você quiser entender mais profundamente, você pode ir até a fonte abaixo:

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

    A questão é antiga, mas outra diferença importante entre uma variável e um campo é que um campo obtém um valor padrão quando é declarado. Uma variável, por outro lado, deve ser inicializada.

    Meu entendimento é o seguinte, e eu não estou dizendo que isso é 100% correto, posso muito bem estar enganado ..

    Uma variável é algo que você declara, que pode, por padrão, mudar e ter valores diferentes, mas que também pode ser dito explicitamente como final. Em Java isso seria:

     public class Variables { List listVariable; // declared but not assigned final int aFinalVariableExample = 5; // declared, assigned and said to be final! Integer foo(List someOtherObjectListVariable) { // declare.. Object iAmAlsoAVariable; // assign a value.. iAmAlsoAVariable = 5; // change its value.. iAmAlsoAVariable = 8; someOtherObjectListVariable.add(iAmAlsoAVariable); return new Integer(); } } 

    Então, basicamente, uma variável é qualquer coisa declarada e pode conter valores. O método foo acima retorna uma variável por exemplo. Ele retorna uma variável do tipo Integer que contém o endereço de memory do novo Integer (); Tudo o mais que você vê acima também são variables, listVariable, aFinalVariableExample e explicado aqui:

    Um campo é uma variável onde o escopo é mais claro (ou concreto). A variável retornando do escopo do método foo não está clara no exemplo acima, então eu não a chamaria de um campo. Por outro lado, iAmAlsoVariable é um campo “local”, limitado pelo escopo do método foo, e listVariable é um campo “instância” em que o escopo do campo (variável) é limitado pelo escopo dos objects.

    Uma propriedade é um campo que pode ser acessado / mutado. Qualquer campo que exponha um getter / setter é uma propriedade.

    Eu não sei sobre atributo e também gostaria de repetir que este é o meu entendimento de quais variables, campos e propriedades são.