2017-08-04 10 views
2

静的物事がクラスのロード時にロードされ、静的メソッドがプライベートである場合にのみ、直接method()によってもアクセス可能であるクラス内にこの事ClassName.method()を行うことができますので、ClassName.memberなぜ私的静的メソッドが存在するのですか?静的コンテキストで呼び出されていないのですか?

としても、オブジェクトの作成前に使用することができるがあるのでクラス名を追加せずに

したがって、同じクラスのstaticメソッドでは使用されない限り、privateメソッドは意味を持ちません。プライベートのみが同じクラスの他の静的メソッドでは使用できないためです。

しかし、私はそれらのいくつかの方法を見ている他の静的なものに使用されていない、まだ彼らはArrayListstatic .FOR例hugeCapacity方法されている - なぜ我々はプライベートだけそれを

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

を維持していないではありませんか?

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

一つは、当社のJavaライブラリでは、このメソッド静的を作り、私は後ろの重要性を知っていることはできますか?

+4

このメソッドは、そのクラスのインスタンスへのアクセスを使用しているわけではないので、static_ではない必要はありません。 – khelwood

+0

@khelwoodしたがって、インスタンスから呼び出されることを意図していないプライベートも静的でなければならないのではないかと心配していますか? –

+0

一般的にはyesです。 – khelwood

答えて

2

インスタンスを使用しないメソッドを使用している場合は、それがより明確になり、効率的になりますstatic

thisを実際に使用しないインスタンスメソッドを使用すると混乱する可能性があり、使用しない参照をJVMが渡す可能性があります。

5

この区別(必須ではない)は、クラスのクライアントにとって意味を伝え、その振る舞いにヒントを与えます。

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

は、方法の動作は、現在のインスタンスに依存することを想定します。 したがって、クライアントクラスはインスタンスメンバーを操作することが予想され、の場合は任意のの静的メンバーを操作できます。

この

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

は、方法の動作は、特定のインスタンスに関連していないクラスメソッドであることを想定しています。したがって、の静的メンバーだけを操作できます。


これは最適な方法ではありませんが、JVMによって各メソッドに渡される追加パラメータは不要です。
ソースコードでは表示されませんが、インスタンスメソッドでは、実際にはthisがパラメータとしてコンパイルコードに追加されています。

関連する問題