前言
本文是橙子出于兴趣爱好对Java官方教程的尝试翻译,几乎每日更新,感兴趣的朋友可以关注一下橙子;翻译过程中尽可能多的对一些关键词保留了英文原文,如果你想看最纯正的英文原版教材却又看不懂,可以试着来看一下橙子的翻译版啊,欢迎大家留言讨论,冲鸭!
更多相关文章点击阅读
Java官方教程目录2021最新版
Understanding Class Members
在本节中,我们将讨论如何使用static关键字创建属于类而不是该类实例的字段和方法。
Class Variables
当从一个类中创建多个对象时,每个对象有独自的实例变量副本。对于Bicycle类,实例变量是cadence, gear, and speed。Bicycle类对于这些变量都有其自己的值,存储在不同的内存空间。
有时需要所有对象共有的变量,这可以通过static修饰符完成。static修饰发字段称为静态字段(static fields)或类变量(class variables)。它们与类关联,而不与任何对象关联。类的每个实例共享类变量,类变量在内存中只需存储一次。任何对象都可以更改类变量的值,可以在不创建类实例的情况下操作类变量。
例如,假定要创建一个类变量,并每每个变量分配一个序列号,该id号对于每个对象都是唯一的,因此是一个实例变量。同时需要一个字段来跟踪创建了多少对象,以便于知道下一个对象要分配的id。该字段与任何对象都不相关,而与类相关,因此需要用类变量(numberOfBicycles)。
public class Bicycle {
private int cadence;
private int gear;
private int speed;
// add an instance variable for the object ID
private int id;
// add a class variable for the
// number of Bicycle objects instantiated
private static int numberOfBicycles = 0;
...
}
类变量由类名本身引用,这清楚的表示了它们是类变量,如:
Bicycle.numberOfBicycles
注意:也可以通过对象引用来引用静态字段,如:
myBike.numberOfBicycles
但并不提倡这样做,因为不能清楚地表明它们是类变量。
可以使用Bicycle类的构造方法来设置id实例变量和numberOfBicycles类变量:
public class Bicycle {
private int cadence;
private int gear;
private int speed;
private int id;
private static int numberOfBicycles = 0;
public Bicycle(int startCadence, int startSpeed, int startGear){
gear = startGear;
cadence = startCadence;
speed = startSpeed;
// increment number of Bicycles
// and assign ID number
id = ++numberOfBicycles;
}
// new method to return the ID instance variable
public int getID() {
return id;
}
...
}
Class Methods
Java语言支持静态方法和静态变量。可以使用static修饰符来声明静态方法。应该使用类名来调用它们,而不需要创建类的实例,如:
ClassName.methodName(args)
注意:可以使用对象来引用静态方法,但并不推荐,如:
instanceName.methodName(args)
静态方法常用来访问静态字段。例如,可以在Bicycle类中添加静态方法访问numberOfBicycles静态变量:
public static int getNumberOfBicycles() {
return numberOfBicycles;
}
实例和类变量以及方法是不能随意组合的:
- 实例方法可以直接访问实例变量和实例方法。
- 实例方法可以直接访问类变量和类方法。
- 类方法可以直接访问类变量和类方法。
- 类方法不能直接访问实例变量或实例方法,它们必须使用对象引用。 同样,类方法不能使用this关键字,因为没有可引用的实例。
Constants 常量
可以把static修饰符和final修饰符结合使用来定义常量(Constants)。final修饰符代表该字段的值不能被改变。
例如,下面声明了一个名为PI的常量,其值是pi(圆周率)的近似值:
static final double PI = 3.141592653589793;
不能重新分配以这种方式定义的常量,如果这样做会导致编译错误。按照规约,常量值用大写字母表示,如果由多个单词组成,用下划线分隔。
注意:如果在编译时将基本数据类型或字符长定义为常量,编译器将使用其值替换代码中的常量名称。这称为编译时常量(compile-time constant)。如果外界的常量庶之分发生了变化,需要重新定义。并且需要重新编译使用该常量的所有类以获取当前值。
The Bicycle Class
经过本节中的所有修改后,Bicycle类现在为:
public class Bicycle {
private int cadence;
private int gear;
private int speed;
private int id;
private static int numberOfBicycles = 0;
public Bicycle(int startCadence,
int startSpeed,
int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
id = ++numberOfBicycles;
}
public int getID() {
return id;
}
public static int getNumberOfBicycles() {
return numberOfBicycles;
}
public int getCadence() {
return cadence;
}
public void setCadence(int newValue) {
cadence = newValue;
}
public int getGear(){
return gear;
}
public void setGear(int newValue) {
gear = newValue;
}
public int getSpeed() {
return speed;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}