66

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

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

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

Q:静的メソッドのアクセス可能な範囲はどれくらいですか?

ありがとう

4

10 に答える 10

63

静的変数の説明は、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);

オブジェクト指向言語(これもJavaの観点から)では、関数、またはメソッドとしてよく知られている関数は、静的ローカル変数を持つことができません。クラスだけが静的メンバーを持つことができます。これは、私が言ったように、Cの静的の概念とはほとんど似ていません。

于 2010-01-17T06:19:33.667 に答える
17

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

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

于 2010-01-18T13:46:44.983 に答える
12

静的メソッドの構文(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

于 2010-01-20T12:18:43.410 に答える
8

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

于 2010-01-17T06:49:22.353 に答える
6

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

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

于 2010-01-17T06:41:24.117 に答える
4

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

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

于 2010-01-17T06:43:07.683 に答える
2

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

于 2010-01-17T06:17:42.687 に答える
2

PHPの静的メソッド

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

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

于 2010-01-18T13:11:14.750 に答える
1

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

于 2012-11-21T08:59:36.193 に答える
1

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

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

リンクをさらに読むために!

于 2014-03-05T10:26:02.693 に答える