- Java核心技术卷I基础知识(原书第9版)
- (美)Cay S.Horstmann Gary Cornell
- 698字
- 2021-04-01 04:35:57
4.4.3 静态方法
静态方法是一种不能向对象实施操作的方法。例如,Math类的pow方法就是一个静态方法。表达式
计算幂x a。在运算时,不使用任何Math对象。换句话说,没有隐式的参数。
可以认为静态方法是没有this参数的方法(在一个非静态的方法中,this参数表示这个方法的隐式参数,参见4.3.5节)。
因为静态方法不能操作对象,所以不能在静态方法中访问实例域。但是,静态方法可以访问自身类中的静态域。下面是使用这种静态方法的一个示例:
可以通过类名调用这个方法:
这个方法可以省略关键字static吗?答案是肯定的。但是,需要通过Employee类对象的引用调用这个方法。
注释:可以使用对象调用静态方法。例如,如果harry是一个Employee对象,可以用harry.getNextId()代替Employee.getnextId()。不过,这种方式很容易造成混淆,其原因是getNextId方法计算的结果与harry毫无关系。我们建议使用类名,而不是对象来调用静态方法。
在下面两种情况下使用静态方法:
●一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如:Math.pow)。
●一个方法只需要访问类的静态域(例如:Employee.getNextId)。
C++注释:Java中的静态域与静态方法在功能上与C++相同。但是,语法书写上却稍有所不同。在C++中,使用::操作符访问自身作用域之外的静态域和静态方法,如Math::PI。
术语“static”有一段不寻常的历史。起初,C引入关键字static是为了表示退出一个块后依然存在的局部变量。在这种情况下,术语“static”是有意义的:变量一直存在,当再次进入该块时仍然存在。随后,static在C中有了第二种含义,表示不能被其他文件访问的全局变量和函数。为了避免引入一个新的关键字,关键字static被重用了。最后,C++第三次重用了这个关键字,与前面赋予的含义完全不一样,这里将其解释为:属于类且不属于类对象的变量和函数。这个含义与Java相同。