Java POJO中的field,variable,attribute和property有什么区别?

当引用具有getter / setter的Java POJO的内部私有variables时,我使用了以下术语:

  • 领域
  • variables
  • 属性
  • 属性

上面有没有区别? 如果是这样,那么正确的术语是什么? 当这个实体被保存时是否有不同的术语?

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


  • 领域

    • 一个类的数据成员。 除非另外指定,否则字段不是静态的。

  • 属性

    • 用户可以设置的对象的特征,例如窗口的颜色。

  • 属性

    • 未在上述术语表中列出

  • variables

    • 一个由标识符命名的数据项。 每个variables都有一个types,例如int或Object和一个作用域。 另请参阅类variables,实例variables,局部variables。

就在这里。

variables可以是本地,字段或常量(虽然这在技术上是错误的)。 它像属性一样模糊。 此外,你应该知道一些人喜欢调用最终的非静态(本地或实例)variables

价值观 ”。 这可能来自新兴的JVM FP语言,如Scala。

字段通常是一个实例类的私有variables。 这并不意味着有一个getter和一个setter。

属性是一个模糊的术语。 它可以很容易地与XML或Java命名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; } } 

还有更多的组合,但我的手指越来越累了:)

如果您的问题是使用JAXB提示的,并且想要select正确的XMLAccessType ,那么我有同样的问题。 JAXB Javadoc说“字段”是一个非静态的,非瞬态的实例variables。 一个“属性”有一个getter / setter对(所以它应该是一个私有variables)。 “公共成员”是公开的,因此可能是一个常数。 同样在JAXB中,“属性”是指XML元素的一部分,如在<myElement myAttribute="first">hello world</myElement>

一般来说,一个Java“属性”可以被定义为一个至less有一个getter或者其他公有方法的字段,这个方法可以让你获得它的价值。 有些人还说,一个财产需要一个二传手。 对于这样的定义,上下文就是一切。

Dietel和Dietel有一个很好的解释领域与variables的方法。

“一个类的静态variables和实例variables一起被称为它的字段”(6.3节)

“variables应该被声明为字段,只要它们被要求用于多于一个类的方法,或者程序应该在调用类的方法之间保存它们的值。”(6.4节)

所以一个类的字段是它的静态variables或实例variables – 即用类作用域声明。

参考资料 – Dietel P.,Dietel,H. – Java™如何编程(早期对象),第十版(2014年)

如果你从Hibernate中获得线索:

Hibernate用它的字段读/写Object的状态。 Hibernate还将Java Bean样式属性映射到DB架构。 Hibernate访问加载/保存对象的字段。 如果映射是由属性完成的,hibernate使用getter和setter。

它是封装区分的意思,你有一个字段的getter / setter,它被称为属性,并且我们隐藏了setMethod中该属性的底层数据结构,我们可以防止setter方法中不需要的更改。 所有封装代表什么…

字段必须在使用之前声明和初始化。 主要用于课堂内部使用。

属性可以被setter改变,并且被getter暴露。 这里现场价格有getter / setter,所以它是财产。

 class Car{ private double price; public double getPrice() {…}; private void setPrice(double newPrice) {…}; } <class name="Car" …> <property name="price" column="PRICE"/> </class> 

同样使用字段 ,[在hibernate,这是推荐的方式使用字段,其中私人诠释ID; 被注释@Id,但与财产,你有更多的控制]

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

Java doc说:Field是一个类的数据成员。 一个字段是非静态的,非瞬态的实例variables。 字段通常是一个实例类的私有variables。

variables由字段和非字段组成。

字段可以是:

  1. 静态字段或
  2. 非静态字段也称为实例,例如x = F()

非字段可以是:

  1. 局部variables,字段的类比,但内部的方法,而不是所有的外部,或
  2. 参数例如y in x = f(y)

总之,variables之间的关键区别在于它们是字段还是非字段,意味着它们是在方法内还是在所有方法之外。

基本的例子(对不起,我的语法,我只是一个初学者)

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

其实这两个词经常被用来代表同样的东西,但也有一些特殊的情况。 一个字段可以存储一个对象的状态。 而且所有的字段都是variables。 所以很显然,可以有不是领域的variables。 因此,查看4种types的variables(类variables,实例variables,局部variables和参数variables),我们可以看到类variables和实例variables可以影响对象的状态。 换句话说,如果一个类或实例variables发生变化,对象的状态就会改变。 所以我们可以说类variables和实例variables是字段,而局部variables和参数variables则不是。

如果你想深入了解,你可以转到下面的来源:

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

问题是旧的,但variables和字段之间的另一个重要区别是字段在声明时会获取默认值。另一方面,variables必须初始化。

我的理解如下,我不是说这是100%正确的,我不太可能被误解。

一个variables是你声明的东西,它可以在默认情况下改变并具有不同的值,但也可以明确地说是最终的。 在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(); } } 

所以基本上,一个variables就是声明的任何东西,并且可以保存值。 上面的方法foo返回一个variables,例如..它返回一个Integertypes的variables,它保存新的Integer()的内存地址; 你在上面看到的其他东西也是variables,listVariable,aFinalVariableExample,并在这里解释:

一个字段是一个范围更清晰(或具体)的variables。 在上面的例子中,从foo方法返回的variables是不清楚的,所以我不会把它称为一个字段。 另一方面,iAmAlsoVariable是一个“本地”字段,受方法foo的作用域限制,而listVariable是一个“实例”字段,字段(variables)的作用域被对象作用域所限制。

属性是可以被访问/变异的字段。 公开getter / setter的任何字段都是属性。

我不知道属性,我也想重申一下,这是我对variables,属性和属性的理解。