变量与命名
变量
如前一篇提到的,一个对象使用 fields 存储它自己的 states 。
int cadence = 0;
int speed = 0;
int gear = 1;
Java 编程语言定义以下几种变量:
- Instance Variables(Non-Static Fields) 严格来说,对象使用”non-static fields”存储它们个体的状态。也就是说,字段在声明的时候不包含 static 关键字。非静态字段也被认为是实例字段是因为它们的值在每个类的实例中都是唯一的。一辆自行车的当前速度独立于另一辆自行车的当前速度。
- Class Variables(Static Fields) 类变量是任何用 static修饰符修饰的字段。这个修饰符告诉编译器,该变量仅存在一份副本,不用理会该类被实例化了多少次。定义特定类型自行车齿轮数量的字段可标记为静态,因为概念上所有实例都将采用相同的齿轮数量。以下代码将会创建一个这样的静态字段。额外地,final 关键字将会被添加用来表明这个齿轮的数量永远不会改变。
static final int numGears = 6;
- Local Variables 类似于对象如何用字段存储它们的状态,一个方法将会经常存储它的临时状态到 local variables 中。声明局部变量的语法和声明字段类似,没有什么特殊的关键字指定一个变量是一个局部变量。该变量的作用域完全取决于变量声明的位置,那就是一个方法的开闭大括号之间。因此,局部变量仅仅在声明的方法内可见,类的剩余部分无法访问它。
- Parameters 已经在前面见过了。main(String[] args) 这个args就是参数。特别重要的是,请记住参数被归类为 variables 而不是 fields。这一规则同样也适用于其他接受参数的概念。(such as constructors and exception hanlers)
话虽如此,讨论 variables 和 fields 时,通常遵循以下准则。当我们谈论的是一般意义上的 fields 时,我们简单的称它们为 fields。如果讨论适用于以上所有变量类型时,我们称它们为 variables。若语境需要区分变量类型时,我们将酌情更特殊的术语(例如static field,local variables,etc.)。你可能也会偶尔看到属于 member。一个类型的字段,方法,和嵌套类型都被称为该类型的成员。
命名
每个编程语言都有自己的一套规则和约定,规定了什么是允许的名称类型,Java也没有什么不同。这些规则和约定可以总结如下:
- 变量名称是大小写敏感的。一个变量的名称可以是任何合法的Identifier。一个不限制长度的Unicode字符序列和数字的组合,开头是字母,美元符号\$,或下划线_。然而,惯例总是用字母开头而不是\$或_。额外地,\$已经不再使用。你可能会发现,在一些自动生成的变量名中仍然使用了$符号,但是你的变量明应该始终避免使用它。一个相似的惯例是下划线_,虽然从技术书上讲变量名以下划线_开头是合法的,这种实践不被推荐。不允许出现空白区域。
- 随后的字符可以是字母,数字,美元符号\$,或下划线_的任意组合。当你给变量命名时,使用全部词语替代隐晦的缩写。这么做将会使你的代码容易阅读和理解。在很多例子中,它也会使你的代码自文档化。举例来说,用speed,gear,cadence比隐晦的名称更易懂,例如s,c和g。同时也要注意,不能取关键字和保留字作为变量名。
- 如果你选择的名字仅由一个单词组成,那么该单词的所有字母都应该是小写。如果它由多个单词组成,大写第二个及后续单词的首字母。gearRatio和currentGear的都是很典型的例子。对于静态变量NUM_GEARS = 6,惯例有些许不同。所有字母都大写并且是用下划线_分隔单词。按照惯例,下划线_不会在其他地方使用了