Jakob Jenkov 发布于 2015-03-03
Java 字段是类中的变量。例如,在一个表示员工的类中,Employee 类可能包含以下字段:
- name(姓名)
- position(职位)
- salary(薪水)
- hiredDate(入职日期)
对应的 Java 类可以这样定义:
public class Employee {
String name;
String position;
int salary;
Date hiredDate;
}
字段声明语法
Java 字段使用以下语法声明:
[访问修饰符] [static] [final] 类型 名称 [= 初始值];
方括号 [ ] 表示该部分是可选的。只有 类型 和 名称 是必需的。
- 访问修饰符(可选):决定哪些类可以访问该字段。在上面的
Employee示例中没有指定访问修饰符。 - 数据类型(必需):如
String、int、Date等。 - static 关键字(可选):静态字段属于类本身,而不是类的实例。所有实例共享同一个静态字段。
- final 关键字(可选):
final字段一旦赋值后就不能再更改。通常与static一起使用,构成“常量”。 - 字段名称(必需):命名需遵循 Java 标识符规则。
- 初始值(可选):可以在声明时直接初始化。
下面各节将详细说明上述部分。
Java 字段的访问修饰符
Java 字段的访问修饰符决定了除本类之外哪些类可以访问该字段。共有四种访问修饰符:
- private:只有本类内部的代码可以访问。
- package:同一包内的其他类也可以访问(不写修饰符即为此级别)。
- protected:同包内类 + 所有子类(即使子类在不同包中)都可以访问。
- public:应用程序中所有类都可以访问。
示例:
public class Customer {
private String email; // 仅本类可访问
String position; // 包级私有
protected String name; // 子类和同包可访问
public String city; // 全局可访问
}
注:实际开发中通常使用
private或protected。对于简单的数据载体类(DTO),有时会将所有字段设为public。
静态字段(Static)与非静态字段(Non-static)
静态字段
静态字段属于类本身,无论创建多少个对象,该字段在内存中只有一份。所有实例共享同一个值。
public class Customer {
static String staticField1;
}
访问方式(无需实例):
Customer.staticField1 = "value";
System.out.println(Customer.staticField1);
flowchart TD
A["Class
• staticField1
• staticField2
• staticField3"] A --> Object1 A --> Object2 A --> Object3
• staticField1
• staticField2
• staticField3"] A --> Object1 A --> Object2 A --> Object3
静态字段位于类中,而非实例中
非静态字段
非静态字段属于每个对象实例,每个实例拥有自己独立的字段值。
public class Customer {
String field1;
}
访问方式(需要实例):
Customer customer = new Customer();
customer.field1 = "value";
System.out.println(customer.field1);
flowchart TD
A[Class]
A --> Object1["Object1
• field1
• field2
• field3"] A --> Object2["Object2
• field1
• field2
• field3"] A --> Object3["Object3
• field1
• field2
• field3"]
• field1
• field2
• field3"] A --> Object2["Object2
• field1
• field2
• field3"] A --> Object3["Object3
• field1
• field2
• field3"]
非静态字段位于实例中
final 字段
final 字段一旦赋值后不可更改。声明时必须初始化(或在构造器中初始化)。
public class Customer {
final String field1 = "Fixed Value";
}
若字段值对所有实例都相同,通常将其同时声明为 static final,即常量:
public class Customer {
static final String CONSTANT_1 = "Fixed Value";
}
按照命名规范,常量名应全部大写,单词间用下划线 _ 分隔。
字段命名
字段命名规则与其他变量相同。示例:
Customer customer = new Customer();
customer.city = "New York";
System.out.println(customer.city);
第一行创建 Customer 对象并赋给变量 customer;
第二行为其 city 字段赋值;
第三行打印该字段值。
字段的初始值
字段可在声明时赋予初始值。该值在字段创建时被赋给它:
- 静态字段:在类加载时初始化(类首次被引用时加载)。
- 非静态字段:在对象创建时初始化。
示例:
public class Customer {
String customerType = "OnlineCustomer";
}
是否初始化字段取决于编程习惯。作者建议始终为变量赋予合理的初始值,但这不是强制要求。