Java字段
Java字段是类内部的变量。例如,在代表雇员的类中,"雇员"类可能包含以下字段:
- 姓名
- 位置
- 薪水
- 聘用日期
可以这样定义相应的Java类:
public class Employee { String name ; String position ; int salary ; Date hiredDate; }
字段声明语法
Java字段使用以下语法声明:
[access_modifier] [static] [final] type name [= initial value] ;
某些关键字周围的方括号[]表示此选项是可选的。只需要输入类型和名称。
首先,可以为Java字段声明访问修饰符。访问修饰符确定可以访问该字段的对象类。在上面的"雇员"示例中,没有访问修饰符。
其次,必须分配Java字段的数据类型。在上面的"雇员"示例中,使用了数据类型"字符串","整数"和"日期"。
第三,可以将Java字段声明为"静态"。在Java中,静态字段属于该类,而不是该类的实例。因此,任何类的所有实例都将访问相同的静态字段变量。对于类的每个对象(实例),非静态字段值可以不同。
第四,可以将Java字段声明为" final"或者不声明为" final"。 " final"字段不能更改其值。必须为最终字段分配一个初始值,并且一旦设置了该值,就不能再次更改该值。 "最终"字段通常也被声明为"静态"。声明为"静态"和"最终"的字段也称为"常量"。
第五,给Java字段起一个名字。我们可以自由选择此名称,但是名称可以包含哪些字符有一些限制。
第六,我们可以选择为该字段设置一个初始值。
以下各节将更详细地描述上述某些选项。
Java字段访问修饰符
Java字段访问修饰符确定除拥有该字段的类之外的其他类是否可以访问该字段。 Java字段有四个可能的访问修饰符:
- private
- package
- protected
- public
" private"访问修饰符意味着只有类内部的代码才能访问此Java字段。
"包"访问修饰符意味着只有类本身内部的代码或者同一包中的其他类才能访问该字段。我们实际上并没有编写package修饰符。通过省略任何访问修饰符,访问修饰符默认为程序包作用域。
" protected"访问修饰符类似于" package"修饰符,但该类的子类也可以访问该字段,即使该子类不在同一包中也是如此。
" public"访问修饰符意味着应用程序中的所有类都可以访问该字段。
以下是使用访问修饰符声明的字段的一些示例。修饰符以粗体显示。
public class Customer { private String email; String position; //no modifier = package access modifier protected String name; public String city; }
上面对Java字段访问修饰符的使用仅出于此示例的目的。我们可能不会在同一类中使用所有访问修饰符。大多数情况下,我们使用"私有"和"受保护"。对于简单的数据携带类,我们可以将所有字段声明为public。
我的Java访问修饰符教程中更详细地介绍了Java访问修饰符。
静态和非静态字段
Java字段可以是静态的也可以是非静态的。
静态字段属于该类。因此,无论我们为该类创建了多少个对象,该类中都将只存在一个字段,并且该字段的值是相同的,无论从哪个对象访问它。
我们可以通过在字段声明中使用static
关键字来定义静态字段,如下所示:
public class Customer { static String staticField1; }
静态字段位于类中,因此我们不需要该类的实例即可访问静态字段。我们只需将类名写在前面,如下所示:
Customer.staticField1 = "value"; System.out.println(Customer.staticField1);
另一方面,非静态Java字段位于类的实例中。该类的每个实例对于这些字段可以有其自己的值。
我们只需省略" static"关键字即可定义一个非静态Java字段。这是一个例子:
public class Customer { String field1; }
要访问非静态字段,我们需要可以在其上访问的类(对象)的实例。这是一个例子:
Customer customer = new Customer(); customer.field1 = "value"; System.out.println(customer.field1);
Final字段
可以将Java字段声明为"final"。最终字段一旦分配就不能更改其值。我们可以通过在字段声明中添加final
关键字来将字段声明为" final"。这是一个例子:
public class Customer { final String field1 = "Fixed Value"; }
" field1"字段的值现在无法更改。这意味着,即使字段属于对象(类实例),也无法在对象之间更改字段的值。
当我们仍然无法更改final字段的值时,在许多情况下,也将其声明为" static"是有意义的。这样,它仅存在于类中,而不存在于每个对象中。这是一个例子:
public class Customer { static final String field1 = "Fixed Value"; }
由于" static final"字段通常用作常量,因此命名约定是将字段名称全部大写,并用下划线_分隔单词。这是一个Javastatic
final
字段示例:
public class Customer { static final String CONSTANT_1 = "Fixed Value"; }
命名Java字段
Java字段的名称用于从代码中引用该字段。这是一个例子:
Customer customer = new Customer(); customer.city = "New York"; System.out.println(customer.city);
第一行创建一个新的"客户"对象("客户"类的实例),并将其存储在名为"客户"的变量中。第二行将"字符串"值"纽约"分配给"客户"对象"城市"字段。第三行将city
字段的值输出到控制台输出。
字段的命名限制和命名约定与任何其他类型的变量相同。
初始字段值
可以给Java字段一个初始值。在JVM中创建字段时,会将此值分配给该字段。加载类时会创建静态字段。第一次在程序中引用该类时,将加载该类。非静态字段是在创建拥有它们的对象时创建的。
这是一个用初始值声明的Java字段的示例:
public class Customer { String customerType = "OnlineCustomer"; }
是否要将Java字段(和其他变量)初始化为初始值取决于我们。我习惯将变量初始化为一些合理的值,但这只是一种习惯。没有必要这样做。