JavaPOJO 中字段、变量、属性和属性之间的区别是什么?

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

  • 场地
  • 变量
  • 属性
  • 财产

以上两者之间有什么区别吗?如果是的话,正确的术语是什么?持久化此实体时是否使用其他术语?

134596 次浏览

有的。

变量 可以是本地、字段或常量(尽管这在技术上是错误的)。就像属性一样模糊。另外,您应该知道有些人喜欢调用 期末考试非静态(本地或实例)变量

这可能来自于新兴的 JVM FP 语言,比如 Scala。

Field 通常是实例类上的私有变量。这并不意味着存在一个 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;
}


}

还有很多组合,但我的手指已经开始累了:)

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


  • 场地

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

  • 财产

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

  • 属性

    • 未列入上述词汇表

  • 变量

    • 由标识符命名的数据项。每个变量都有一个类型(如 int 或 Object)和一个作用域。另请参阅 class 变量、实例变量、 local 变量。

如果您的问题是由于使用 JAXB 而产生的,并且希望选择正确的 XMLAccessType,那么我也有同样的问题。JAXB 贾瓦多克说“字段”是一种非静态、非瞬态的实例变量。一个“ property”有一个 getter/setter 对(因此它应该是一个私有变量)。“ public member”是 public,因此可能是一个常量。同样在 JAXB 中,“属性”指的是 XML 元素的一部分,如 <myElement myAttribute="first">hello world</myElement>

一般来说,Java“属性”可以定义为至少包含一个 getter 或其他允许您获取其值的公共方法的字段。有些人还说,一个财产需要一个塞特。对于这样的定义,上下文就是一切。

变量由字段和非字段组成。

字段可以是:

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

非字段可以是:

  1. 局部变量,类似于字段,但是在一个方法内部,而不是在所有方法外部,或者
  2. 参数,例如 y 在 x = f (y)中

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

基本示例(请原谅我的语法,我只是个初学者)

Class {
//fields


method1 {
//non-fields


}
}

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

“将类的静态变量和实例变量放在一起称为它的字段。”(第6.3节)

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

所以类的字段就是它的静态变量或者实例变量——也就是说,是用类作用域声明的。

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

实际上,这两个术语通常用来表示同一件事情,但也有一些例外的情况。字段可以存储对象的状态。而且所有字段都是变量。所以很明显,有些变量不是字段。因此,研究4种类型的变量(类变量、实例变量变量、局部变量和参数变量) ,我们可以看到类变量和实例变量可以影响对象的状态。换句话说,如果一个类或者实例变量发生了变化,那么对象的状态就会发生变化。所以我们可以说类变量和实例变量是字段,而局部变量和参数变量不是。

如果你想更深入地了解,你可以看看下面的资料来源:-

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

这个问题已经过时了,但是变量和字段之间的另一个重要区别是,字段在声明时会获得一个默认值。另一方面,变量必须被初始化。

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

变量是您声明的东西,它在默认情况下可以更改并具有不同的值,但也可以明确地说是 final。在爪哇语中是这样的:

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 ()的内存地址; 上面你看到的所有其他内容也是变量,列表变量,aFinalVariableexample,并在这里解释:

字段是范围更清晰(或更具体)的变量。从 foo 方法的作用域返回的变量在上面的示例中并不清楚,因此我不会将其称为字段。另一方面,iAmAlsovariable 是一个受方法 foo 作用域限制的“本地”字段,而 listVariable 是一个“实例”字段,其中字段(变量)的作用域受到对象作用域的限制。

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

我不知道属性,我还想重复一下,这是我对什么是变量,字段和属性的理解。

如果你从 Hibernate 获得线索:

Hibernate 使用 Object 的字段读/写 Object 的状态。 Hibernate 还将 JavaBean 样式属性映射到 DBSchema。 Hibernate 访问加载/保存对象的字段。 如果映射是通过属性完成的,则 hibernate 使用 getter 和 setter。

封装区分了字段的 getter/setter,它被称为 property,我们在 setMethod 中隐藏了这个属性的底层数据结构,我们可以防止 setter 内部发生不必要的变化。所有封装代表的是..。

字段 在使用之前必须声明和初始化。

属性 可以由 setter 更改,并由 getter 公开。这里的字段 price 有 getter/setter,所以它是 property。

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


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

类似地,使用 田野,[在休眠状态下,推荐使用字段进行 MAP,其中 private int id; 注释为@Id,但是使用 Property 可以获得更多控制]

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

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

Java 变量、字段、属性

  • variable命名的存储地址。每个变量都有一个定义内存大小、属性和行为的类型。Java 变量的类型有: class variableinstance variablelocal variablemethod parameter
//pattern
<Java_type> <name> ;


//for example
int myInt;
String myString;
CustomClass myCustomClass;
  • 成员变量或数据成员。它是 class(class variableinstance variable)中的 variable

  • 在一些文章中,你可以发现 attributeclass variableobject表示。Objectattributes操作,attributes定义了一组特性。

CustomClass myCustomClass = new CustomClass();
myCustomClass.myAttribute = "poor fantasy"; //`myAttribute` is an attribute of `myCustomClass` object with a "poor fantasy" value

[ Objective-C 属性]

  • property-field + 有界 getter/setter。它有一个字段语法,但是使用了底层的方法。Java不支持它的纯形式。看看 Objective-CSwiftKotlin

例如 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 变量,property... ]

Java 中 变量、字段、属性和属性的区别:

变量 是内存位置的名称,它是程序中存储的基本单元。

字段 是类的数据成员。除非另有指定,否则字段可以是公共的、静态的、非静态的和最终的。

属性 是字段的另一个术语,它通常是可以直接访问的公共字段。

  • 在 NetBeans 或 Eclipse 中,当我们键入一个类的对象时,在那个点(.)之后他们提出了一些建议,这些建议被称为属性。

属性 是用于字段的术语,但它通常具有 getter 和 setter 组合。