函数容器
我们看个例子——Java API中的类Math,它里面主要包含了若干数学函数,表3-1列出了其中一些。
要使用这些函数,直接在前面加Math.即可,例如Math.abs(-1)返回1。这些函数都有相同的修饰符:public static。
static表示类方法,也叫静态方法,与类方法相对的是实例方法
。实例方法没有static修饰符,必须通过实例或者对象调用,而类方法可以直接通过类名进行调用,不需要创建实例。public表示这些函数是公开的,可以在任何地方被外部调用。
表3-1 Math类的常用函数
与public相对的是private。如果是private,则表示私有,这个函数只能在同一个类内被别的函数调用,而不能被外部的类调用。在Math类中,有一个函数Random initRNG()就是private的,这个函数被public的方法random()调用以生成随机数,但不能在Math类以外的地方被调用。
将函数声明为private可以避免该函数被外部类误用,调用者可以清楚地知道哪些函数是可以调用的,哪些是不可以调用的。类实现者通过private函数封装和隐藏内部实现细节,而调用者只需要关心public就可以了。可以说,通过private封装和隐藏内部实现细节,避免被误操作,是计算机程序的一种基本思维方式。
除了Math类,我们再来看一个例子Arrays。Arrays里面包含很多与数组操作相关的函数,表3-2列出了其中一些。
表3-2 Arrays类的一些函数
这里将类看作函数的容器,更多的是从语言实现的角度看,从概念的角度看,Math和Arrays也可以看作自定义数据类型,分别表示数学和数组类型,其中的public static函数可以看作类型能进行的操作。接下来更为详细地讨论自定义数据类型。