【发布时间】:2015-07-05 12:21:19
【问题描述】:
就我的理解而言:
当一个方法是静态的时,它是
- 早绑定
- 在没有对象创建之前就可以调用类名
- 只能调用其中的静态成员。
我从未在编译时或运行时发现静态的任何其他行为。 有吗?
当一个方法是私有的时,它是
- 也早绑定
- 只能在调用内部调用,所以可以不带对象直接调用。
例如ArrayList 类中的hugeCapacity() 方法。
private static final int DEFAULT_CAPACITY = 10;
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
由于Java中存在私有+静态方法。为什么他们的需要发生。是否出于限制目的,限制方法内非静态变量的访问?
【问题讨论】:
-
重点是静态方法与类型相关联,而不是与该类型的任何实例相关联,而实例方法与该类型的实例相关联。私人部分与此完全正交。 (例如,您可以在没有任何实例的情况下调用私有静态方法...)
-
@JonSkeet 实际上先生,至于私有方法是关心的-它们只能在类内部调用。当您可以直接通过其名称调用它们时,为什么要使用 ClassName.methodName 的开销来绑定它们。
-
@dubey-theHarcortians:如果您在同一个类(或子类)中调用静态方法,则不必指定
ClassName。关键是,如果一个方法不能在逻辑上对类的实例进行操作,则应该将其设为静态 - 就这么简单。 -
完全正确,先生。我也有同样的观点,因为私有方法具有与 prvate+static.each 相同的行为,并且静态方法的每个属性在私有方法的情况下都失去了存在。为什么需要私有+静态方法。是否出于限制目的,限制方法内非静态变量的访问?
-
还有一件事希望你能尽快回答。这个静态私有方法在子类中是不可访问的:) @JonSkeet 正如你所说的——如果你在同一个类(或子类)中调用它。
标签: java static private access-specifier