https://cloud.tencent.com/developer/article/1807403
字段(Field),是 Java 编程语言中类的一个成员,主要用来存储对象的状态(如同某些编程语言中的变量),所以有时也可称为成员字段或成员变量。
在类中有下列几种变量(Variable):
/**
* 字段示例
*
* @author Blume
*/
public class FieldDemo {
public static void main(String[] args) {
// 类中的常量字段可直接访问而无需创建对象。
System.out.println(MyField.CONSTANT_FIELD);
System.out.println("---- ---- ---- ---- ----");
// 类中的静态字段可直接访问而无需创建对象。
MyField.sharedField = "sharedField:\n这是在 MyField 类中的字符串静态字段。";
System.out.println(MyField.sharedField);
System.out.println("---- ---- ---- ---- ----");
// 类中的实例变量只有在创建对象后才能访问。
final MyField demo = new MyField();
demo.setName("name:\n这是在 MyField 类中的字符串实例变量。");
System.out.println(demo.getName());
}
}
/**
* 定义 MyField 类
*
* @author Blume
*/
class MyField {
// 声明一个常量字段。
public static final String CONSTANT_FIELD =
"CONSTANT_FIELD:\n这是在 MyField 类中的字符串常量字段。";
// 声明一个静态字段。
public static String sharedField;
// 声明一个实例变量。
private String name;
// 获取实例变量值。
public String getName() {
return name;
}
// 设置实例变量值。
public void setName(String name) {
// 可插入用于更改实例变量值的条件判断语句,
// 以防实例变量值被意外或非法更改。
this.name = name;
}
}
/* 输出结果:
CONSTANT_FIELD:
这是在 MyField 类中的字符串常量字段。
---- ---- ---- ---- ----
sharedField:
这是在 MyField 类中的字符串静态字段。
---- ---- ---- ---- ----
name:
这是在 MyField 类中的字符串实例变量。
*/
如上例所示,字段声明通常包括下列几个部分,顺序如下:
可在字段声明的开头部分添加 public、protected 或 private 访问修饰符或者不加,用来表示字段的访问控制级别。
也可在访问修饰符之后添加其他修饰符:
final
修饰符,则表示该字段的值在初始化后保持不变,即它只接受首次分配给它的值,之后在其生命期内无法改变,类似于常量,可作为对字段值的一种限定和保护。static
修饰符,则表示该字段可直接访问而无需创建对象。或者说,这是在告诉 Java 编译器,无论该字段所在的类被实例化了多少次,该字段始终都存在,故可作为该类所有实例的共有字段。abstract
修饰符,因为字段本质上是实体,不存在抽象字段。否则,Java 编译器将会生成一条类似于“此处不允许使用修饰符 abstract
”的错误消息。可使用原初类型(Primitive Type):
true
和 false
。'\u0000'
(0)至 '\uffff'
(65535)之间。-128
至 127
之间。-32768
至 32767
之间。-2147483648
至 2147483647
之间。-9223372036854775808
至 9223372036854775807
之间。也可使用引用类型(Reference Type):
还可使用类、接口或原初类型的数组类型(Array Type)。比如,int[] 表示一个 int 原初类型的一维数组类型(请参阅 arrayType(int) 示例)等。
所有变量,无论是成员变量、局部变量还是参数,都应遵循以下的命名规则和约定:
a
- z
、A
- Z
):长度不限。0
- 9
):长度不限。$
):按惯例,根本不使用美元符。一些自动生成的名称中可能会包含美元符(请参阅 nested(String) 示例),但变量名应始终避免使用它。_
):按惯例,变量名不使用下划线。下划线只用于常量字段名。package
、import
、class
、interface
、default
等等。demo
和 DEMO
将视为两个名称。除下列两项外,变量的命名规则和约定适用常量字段:
字段名不能与同一类中另一个字段的名称相同。若字段与其所在类中的局部变量或参数具有相同的名称,则会发生遮蔽。具体请参阅《遮蔽 - 重名问题》。
按使用修饰符的不同,字段可分为:
字段通过其名称进行访问。在访问时,必须使用明确无误的名称。
在方法中,可使用一个简单名称来表示其所在类中的字段:
public String getName() {
return name;
}
在这种情况下,name 是简单名称。
由于静态字段与对象的创建无关,所以在访问它时,使用类名或相关表达式,然后是点(.
)操作符,然后是静态字段的简单名称:
System.out.println(MyField.CONSTANT_FIELD);
System.out.println(MyField.sharedField);
若非静态字段没有声明为 private,则在它所在的类外访问它时,必须使用对象引用或相关表达式,然后是点(.
)操作符,然后是非静态字段的简单名称。
建议将实例变量声明为 private,否则可能会产生面条式代码(Spaghetti Code)。如果可在类外更改该类中的实例变量值,那么该实例变量将会变得不确定,因为任何一段在类外的代码都有可能改变其值。
可使用方法来更改实例变量值:
public void setName(String name) {
// 可插入用于更改实例变量值的条件判断语句,
// 以防实例变量值被意外或非法更改。
this.name = name;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。