Java 字段(Fields)

更新于 2025-12-25

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] 类型 名称 [= 初始值];

方括号 [ ] 表示该部分是可选的。只有 类型名称 是必需的。

  1. 访问修饰符(可选):决定哪些类可以访问该字段。在上面的 Employee 示例中没有指定访问修饰符。
  2. 数据类型(必需):如 StringintDate 等。
  3. static 关键字(可选):静态字段属于类本身,而不是类的实例。所有实例共享同一个静态字段。
  4. final 关键字(可选):final 字段一旦赋值后就不能再更改。通常与 static 一起使用,构成“常量”。
  5. 字段名称(必需):命名需遵循 Java 标识符规则。
  6. 初始值(可选):可以在声明时直接初始化。

下面各节将详细说明上述部分。

Java 字段的访问修饰符

Java 字段的访问修饰符决定了除本类之外哪些类可以访问该字段。共有四种访问修饰符:

  • private:只有本类内部的代码可以访问。
  • package:同一包内的其他类也可以访问(不写修饰符即为此级别)。
  • protected:同包内类 + 所有子类(即使子类在不同包中)都可以访问。
  • public:应用程序中所有类都可以访问。

示例:

public class Customer {
    private String email;        // 仅本类可访问
    String position;             // 包级私有
    protected String name;       // 子类和同包可访问
    public String city;          // 全局可访问
}

注:实际开发中通常使用 privateprotected。对于简单的数据载体类(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

静态字段位于类中,而非实例中

非静态字段

非静态字段属于每个对象实例,每个实例拥有自己独立的字段值。

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"]

非静态字段位于实例中

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";
}

是否初始化字段取决于编程习惯。作者建议始终为变量赋予合理的初始值,但这不是强制要求。