とき、私はクラスの静的メソッドを使用して、どのようなメリットがあるでしょうか?
-
21-09-2019 - |
質問
私は、静的変数の概念を持っていますが、クラスの静的メソッドの利点は何ですか。私はいくつかのプロジェクトに取り組んできましたが、私はメソッドの静的をしませんでした。私はクラスのメソッドを呼び出す必要があるたびに、私は、そのクラスのオブジェクトを作成し、目的のメソッドを呼び出します。
の Q:?メソッドでの静的変数は、メソッドを実行しますがアクセスのみ、それを含んでいる方法ではなく、静的メソッドの最高の定義は何である場合でも、それの値を保持していますか
の Q:の静的メソッドの唯一の利点そのクラスのオブジェクトをされて作成せずに静的メソッドを呼び出していますか?
の Q:の静的メソッドのアクセス可能範囲とは何ですか?
おかげ
解決
オブジェクト指向的に静的変数の静的変数のあなたの説明は、よりCのことがわかっにフィットされる概念は概念的に異なっています。私はここでのJavaの経験から描いています。彼らは概念的なもののインスタンスに属していないときの静的メソッドやフィールドは便利です。
パイや電子のようないくつかの共通の価値観、そして罪とCOSのようないくつかの便利な機能が含まれているMathクラスを考えてみましょう。それは本当にので、彼らが静として優れている、この種の機能を使用するために別のインスタンスを作成しても意味がありません。
// This makes little sense
Math m = new Math();
float answer = m.sin(45);
// This would make more sense
float answer = Math.sin(45);
オブジェクト指向言語で(再び、Javaパースペクティブからの)機能、またはより良い方法として知られている、静的ローカル変数を持つことができません。唯一のクラスは私が言ったように、C言語で静的の考え方に比べて少し似ている、静的メンバを持つことができます。
他のヒント
は静的メソッドは、それらが非静的変数またはメソッドを参照することができないので、オブジェクトに「この」ポインタを通過しないが、結果として、実行時に、より効率的であり得る(より少ないパラメータなしオーバーヘッドを作成および破壊しますオブジェクト)。
これらは、工場出荷時のパターンのように、そのクラスのオブジェクトに作用するために、単一のクラスにグループ凝集方法に用いる、またはすることができる。
構文(PHP):
<?php
class Number {
public static function multiply($a, $b) {
return $a * $b;
}
}
?>
クライアントコード:
echo Number::multiply(1, 2);
より多くの理にかなっている。
$number = new Number();
echo $number->multiply(1, 2);
multiply()
方法としては、任意のクラス変数を使用しない、そのようなものとしてNumber
のインスタンスを必要としない。
基本的には、静的メソッドは、オブジェクト指向言語での手続きのコードを書いてみましょう。それはあなたが最初のオブジェクトを作成しなくても、メソッドを呼び出すことができます。
あなたはクラスの静的メソッドを使用する場合にのみ時間があります。これは、(例えば、Aシングルトン)共有データソースを返すようにしようとまたはオブジェクト(例えばString.Formatの)の内部状態を変更しない操作を行う場合であってもよい。
このWikipediaのエントリはかなりよく、静的メソッドを説明します:ます。http://en.wikipedia。 ORG /ウィキ/ Method_(computer_science)#Static_methods の
静的変数と静的メソッドは、クラスのインスタンスのクラスに結合し、そしてれていない。
静的メソッドは、「状態」を含めるべきではありません。状態に関連するものは、クラス、インスタンス化オブジェクトにバインドされ、なくすべきである。
一般的な使用法の一つは、コンストラクタイディオムという名前です。参照してください: http://www.parashift.com/c++- FAQ-liteの/ ctors.html#FAQ-10.8 のます。
あなたはclass.As変数の異なるオブジェクト間のいくつかの情報を共有したい時に静的変数を使用するには、各オブジェクトは、それを更新することができますし、更新された値は、他のすべてのオブジェクトに対して利用できるように共有されています。 静的変数を共有することができるように、これらのは、多くの場合、クラス変数として呼ばれています。
あなたがオブジェクトからオブジェクトへのクラスのインスタンスを渡すために必要とすることなく、これらのメソッドにアクセスできるように、静的な要素は、任意のコンテキスト(スクリプト内すなわちどこでも)からアクセスできます。
あなたはタイプのすべてのメンバーが利用できるようにしたいという値を設定することができるように静的な要素は、クラスのすべてのインスタンスで利用可能です。
さらなる読書のためのリンクする!