静态方法是一种不能向对象实施操作的方法。例如,Math类的pow方法就是一个静态方法。表达式

  1. Math.pow(x, a); 

计算幂xa。在运算时,不使用任何Math对象。换句话说,没有隐式的参数。

    可以认为静态方法是没有this参数的方法(在一个非静态的方法中,this参数表示这个方法的隐式参数)。

    因为静态方法不能操作对象,所以不能在静态方法中访问实例域。但是,静态方法可以访问自身类中的静态域。下面是使用这个静态方法的一个示例:

  1. public static int getNextId() 
  2.     return nextId;    // return static field 

    可以通过类名调用这个方法:

  1. int n = Employee.getNextId(); 

    这个方法可以省略关键字static吗?答案是肯定的。但是,需要通过Employee类对象的引用调用这个方法。

    注释:可以使用对象调用静态方法。例如,如果harry是一个Employee对象,可以用harry.getNextId()代替Employee.getNextId()。不过,这种方式很容易造成混淆,其原因是getNextId方法计算的结果与harry毫无关系。我们建议使用类名,而不是对象来调用静态方法。

    在下面两种情况使用静态方法:

  • 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如:Math.pow)。
  • 一个方法只需要访问类的静态域(例如:Employee.getNetId)。

    C++注释:Java中的静态域域静态方法在功能上与C++相同。但是,语法书写上却稍有所不同。在C++中使用::操作符访问自身作用域之外的静态域和静态方法,如Math::PI。术语“static”有一段不寻常的历史。起初,C引人关键字static是为了表示退出一个块后依然存在的局部变量。在这种情况下,术语“static”是有意义的:变量一直存在,当再次进入该块时仍然存在。随后,static在C中有了第二种含义,表示不能被其他文件访问的全局变量和函数。为了避免引入一个新的关键字,关键字static被重用了。最后,C++第三次重用了这个关键字,与前面赋予的含义完全不一样,这里将其解释为:属于类且不属于类对象的变量和函数。这个含义与Java相同。