7

静的メソッドを理解しようとしていますが、混乱するポイントに達しました。

この質問のメソッドのみに焦点を当てると、オブジェクトのインスタンス (クラス自体が静的ではない) を作成すると、通常、パブリック、保護、または内部メソッド (スコープ/カプセル化に応じて) にのみアクセスできます。つまり、プライベート メソッドにアクセスできません。

私は、最小限の静的メソッドが非静的メソッドよりもわずかに効率的であることを読みました。

では、戻り値の型が void のプライベート メソッドを作成し、それ自体からオブジェクトの参照を作成する場合を除いて、なぜそれを静的にしないのでしょうか? 私がこれまでに見たすべてのコードがこれを行うわけではないので、要点を見逃しているとしか思えません。

4

7 に答える 7

29

静的メソッドは、クラス内の非静的メンバー データにアクセスできません。

于 2013-05-14T13:41:52.563 に答える
6

通常、静的メソッドはステートレスであると想定されているため、インスタンスの状態にアクセスできません。対照的に、インスタンス メソッドはステートフルであるため、インスタンスの状態を読み取って変更できます。

ステートレス メソッドの典型的な例は次のとおりです。

  • ファクトリ メソッド
  • 二項演算子
  • ...

もちろん、静的メソッドが常にステートレスであるとは限りませんが、静的ステートフル メソッドのサンプルがあります。クラスには1 つの状態があります。

  • シングルトン
  • インスタンス プール
  • ...

ただし、クラスの状態はプロセス内のすべてのスレッドによって共有されるため、これらの実装にはもう少し注意が必要です。

于 2013-05-14T13:42:54.867 に答える
0

コードに表示されるほとんどのメソッドは、静的ではないクラス変数/プロパティを何らかの形で使用します。これらは、静的コンテキストからアクセスできません。これは、静的メソッド内では、このクラスの静的メンバーにのみアクセスでき、オブジェクト固有のメンバーにはアクセスできないことを意味します。

于 2013-05-14T13:44:06.933 に答える