由于静态事物在类加载时加载,甚至可以在创建对象之前用作ClassName.member
但是如果静态方法是私有的,那么你只能在类中执行ClassName.method()
这个事情,直接method()
可以访问它而不附加类名。
因此,使private
方法static
没有任何意义,直到它没有在同一个类的任何static
方法中使用。因为只有private才能在其他静态方法中使用同一类。
但是我看到一些方法没有在任何其他静态内容中使用,但仍然是static
。例如hugeCapacity
的方法ArrayList
-
private static int hugeCapacity(int minCapacity) {...}
为什么我们不将它仅保密?
private int hugeCapacity(int minCapacity) {...}
可以让我知道背后的意义,在我们的java库中使这个方法保持静态吗?
答案 0 :(得分:6)
进行这种区分(这不是强制性的)为班级的客户传达了意义,并给出了他们行为的提示。
private int hugeCapacity(int minCapacity) {...}
假设方法行为取决于当前实例。 因此,客户端类期望它可以操纵实例成员和可选静态成员。
虽然这个
private static int hugeCapacity(int minCapacity) {...}
假设方法行为是与特定实例无关的类方法。因此它可以操纵仅静态成员。
这不是一个很好的优化,但是它可以省去JVM传递给每个方法的附加参数。
您没有在源代码中看到它,但是对于实例方法,this
确实在编译的代码中添加为参数。
答案 1 :(得分:4)
如果你有一个不使用该实例的方法,那么使它成为static
会更清晰,更有效。
使用实际上不使用this
的实例方法可能会造成混淆,并且JVM传递您不使用的引用可能会更有用。