Java POJO中的字段,变量,属性和属性有什么区别?

Vic*_*sky 137 java pojo

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

  • 领域
  • 变量
  • 属性
  • 属性

上面有什么区别吗?如果是这样,使用的正确术语是什么?持有此实体时是否有不同的术语?

jah*_*roy 114

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


  • 领域

    • 类的数据成员.除非另有说明,否则字段不是静态的.

  • 属性

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

  • 属性

    • 未在上述词汇表中列出

  • 变量

    • 由标识符命名的数据项.每个变量都有一个类型,例如int或Object,以及一个范围.另请参见类变量,实例变量,局部变量.

  • 我还是不明白字段和属性之间的区别? (19认同)
  • @John - 也许基于上述内容,如前所述,这是来自 Oracle 的复制/粘贴。我个人认为属性是公开可见的并且可能是可变的,而字段 _could_ 是仅由类使用的内部私有字段。 (3认同)
  • 我认为最好强调的是,作为场和财产的存在并不相互排斥。从这个答案的措辞方式来看,对于新开发人员来说,它看起来像是一个不同事物的列表。 (2认同)

Ada*_*ent 85

就在这里.

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

" 价值观 ".这可能来自Scala等新兴的JVM FP语言.

Field通常是实例类的私有变量.这并不意味着有一个吸气剂和一个二传手.

属性是一个模糊的术语.它很容易与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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

  • @AdamGent JAVA =另一个模糊的缩写:) (4认同)
  • @Chris Thompson这就是Eclipse在其对话框中所称的内容.嘿,他们的Java.我能告诉你什么 这没有意义. (3认同)
  • 一个常数变量?这对我来说听起来不对. (2认同)

hot*_*309 5

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

通常,Java"属性"似乎可以定义为至少具有getter或其他一些允许您获取其值的公共方法的字段.有些人还说房产需要有一个二传手.对于这样的定义,上下文就是一切.


Man*_*ngo 5

Dietel和Dietel有一个很好的解释字段与变量的方法.

"一个类的静态变量和实例变量一起被称为其字段."(第6.3节)

"只有当变量需要在类的多个方法中使用时,或者程序应该在对类的方法的调用之间保存它们的值时,才应将变量声明为字段."(第6.4节)

所以类的字段是它的静态或实例变量 - 即用类范围声明.

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


vim*_*hna 5

如果您从 Hibernate 中得到线索:

\n\n

Hibernate 通过其字段读取/写入对象的状态。\nHibernate 还将 Java Bean 样式属性映射到 DB Schema。\nHibernate 访问用于加载/保存对象的字段。\n如果映射是通过属性完成的,则 hibernate 使用 getter 和 setter。

\n\n

封装的区别在于字段有 getter/setter,它被称为属性,有了它,我们在 setMethod 中隐藏该属性的底层数据结构,我们可以防止 setter 内部发生不必要的更改。封装所代表的一切...

\n\n

字段在使用之前必须进行声明和初始化。主要供班级内部使用。

\n\n

属性可以通过 setter 更改,并通过 getter 公开。这里的字段价格有 getter/setter,所以它是属性。

\n\n
class Car{\n private double price;\n public double getPrice() {\xe2\x80\xa6};\n private void setPrice(double newPrice) {\xe2\x80\xa6};\n}\n\n<class name="Car" \xe2\x80\xa6>\n<property name="price" column="PRICE"/>\n</class>\n
Run Code Online (Sandbox Code Playgroud)\n\n

类似地使用fields,[在 hibernate 中,推荐使用 fields 进行 MAP 的方式,其中 private int id; 被注释为@Id,但使用Property你有更多的控制权]

\n\n
class Car{\n  private double price;\n}\n<class name="Car">\n<property name=" price" column="PRICE" access="field"/>\n</class>\n
Run Code Online (Sandbox Code Playgroud)\n\n

Java 文档说:\nField 是类的数据成员。字段是非静态、非瞬态实例变量。\n字段通常是实例类上的私有变量。

\n