为什么存在私有静态方法,而不是在任何静态上下文中调用它们?

时间:2017-08-04 11:44:07

标签: java arraylist static private

由于静态事物在类加载时加载,甚至可以在创建对象之前用作ClassName.member

但是如果静态方法是私有的,那么你只能在类中执行ClassName.method()这个事情,直接method()可以访问它而不附加类名。

因此,使private方法static没有任何意义,直到它没有在同一个类的任何static方法中使用。因为只有private才能在其他静态方法中使用同一类。

但是我看到一些方法没有在任何其他静态内容中使用,但仍然是static。例如hugeCapacity的方法ArrayList -

private static int hugeCapacity(int minCapacity) {...} 

为什么我们不将它仅保密?

private int hugeCapacity(int minCapacity) {...} 

可以让我知道背后的意义,在我们的java库中使这个方法保持静态吗?

2 个答案:

答案 0 :(得分:6)

进行这种区分(这不是强制性的)为班级的客户传达了意义,并给出了他们行为的提示。

private int hugeCapacity(int minCapacity) {...} 

假设方法行为取决于当前实例。 因此,客户端类期望它可以操纵实例成员和可选静态成员。

虽然这个

private static int hugeCapacity(int minCapacity) {...} 

假设方法行为是与特定实例无关的类方法。因此它可以操纵静态成员。

这不是一个很好的优化,但是它可以省去JVM传递给每个方法的附加参数。
您没有在源代码中看到它,但是对于实例方法,this确实在编译的代码中添加为参数。

答案 1 :(得分:4)

如果你有一个不使用该实例的方法,那么使它成为static会更清晰,更有效。

使用实际上不使用this的实例方法可能会造成混淆,并且JVM传递您不使用的引用可能会更有用。