web-dev-qa-db-ja.com

クラスで静的メソッドを使用する必要がある場合と、その利点は何ですか?

静的変数の概念はありますが、クラス内の静的メソッドの利点は何ですか。私はいくつかのプロジェクトに取り組んできましたが、メソッドを静的にしませんでした。クラスのメソッドを呼び出す必要があるときはいつでも、そのクラスのオブジェクトを作成し、目的のメソッドを呼び出します。

Q:メソッドの静的変数は、メソッドが実行されてもその値を保持しますが、含まれるメソッドでのみアクセス可能ですが、静的メソッドの最適な定義は何ですか?

Q:そのクラスのオブジェクトを作成せずに静的メソッドを呼び出すことが静的メソッドの唯一の利点ですか?

Q:静的メソッドのアクセス可能な範囲は?

ありがとう

62
Naveed

静的変数の説明は、Cで見られる説明により適合しています。オブジェクト指向の用語での静的変数の概念は、概念的に異なります。ここでの経験はJavaの経験です。静的メソッドとフィールドは、概念的に何かのインスタンスに属さない場合に役立ちます。

Piやeなどの一般的な値と、sinや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);

OO言語(再び、Javaの観点から)関数、またはメソッドとして知られている)は、静的ローカル変数を持つことができません。クラスのみが静的メンバーを持つことができます。私が言ったように、これはCのstaticの概念と比較してほとんど似ていません。

62
D.C.

静的メソッドは「this」ポインターをオブジェクトに渡さないため、非静的変数またはメソッドを参照できませんが、実行時にはより効率的です(パラメーターを少なくし、オブジェクトを作成および破棄するためのオーバーヘッドがありません)。

これらは、凝集メソッドを単一のクラスにグループ化するために、またはファクトリパターンなどのクラスのオブジェクトに作用するために使用できます。

15
PhilMY

静的メソッドの構文(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のインスタンスは必要ありません。

12
jmoz

基本的に、静的メソッドを使用すると、オブジェクト指向言語で手続き型コードを記述できます。最初にオブジェクトを作成しなくてもメソッドを呼び出すことができます。

8
David Hodgson

クラスで静的メソッドを使用するのは、特定のメソッドでクラスのインスタンスを作成する必要がない場合のみです。これは、共有データソース(シングルトンなど)を返そうとしたとき、またはオブジェクトの内部状態を変更しない操作(たとえば、String.format)を実行したときに発生する可能性があります。

このウィキペディアのエントリは、静的メソッドを非常によく説明しています。 http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods

6
AndrewMurphy

静的変数と静的メソッドは、クラスのインスタンスではなく、クラスにバインドされます。

静的メソッドには「状態」を含めないでください。状態に関連するものはすべて、クラスではなく、インスタンス化されたオブジェクトにバインドする必要があります。

4
Travis

PHPの静的メソッド

クラスオブジェクトを作成せずに呼び出すことができます。

静的なメソッドと関数でのみ呼び出すことができます。

2
Ihsanullah khan

静的メソッドの一般的な使用法の1つは、名前付きコンストラクターのイディオムです。参照: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8 .

2
Kyle Lutz

静的要素は、どのコンテキスト(つまり、スクリプト内のどこからでも)からアクセスできるため、クラスのインスタンスをオブジェクトからオブジェクトに渡す必要なく、これらのメソッドにアクセスできます。

静的要素はクラスのすべてのインスタンスで使用できるため、タイプのすべてのメンバーが使用できるようにする値を設定できます。

さらに読むために リンク

1
Purushothaman

静的変数は、クラスの異なるオブジェクト間で情報を共有する場合に使用されます。変数が共有されると、各オブジェクトはそれを更新でき、更新された値は他のすべてのオブジェクトでも使用できます。静的変数は共有できるため、これらはクラス変数と呼ばれることがよくあります。

1
sunny