1

重複の可能性:
静的変数が悪と見なされるのはなぜですか?

数年前に大学でオブジェクト指向プログラミングと設計を学んだことで、静的変数または静的メソッドを使用している人々に、静的は非常に悪い設計であると説明しているため、講師がかなり腹を立てたことを覚えています。

私の理解では、これは静的なタイプのものであり、グローバルな「ビジョン」を獲得するものです。つまり、何からでもアクセスできます。

私の理解は正しいですか?静的な使用について、それを悪用する情報はありますか?コードで静的変数やメソッドを使用しないようにする方法はありますか?

ところで、mainメソッドの静的は、アプリケーションの正常な動作の前提条件であることを認識しています。

4

4 に答える 4

2

静的変数またはメソッドに問題はありません。OOP では、可能な限り多くの動作をオブジェクトに関連付けたいというだけで、それはインスタンス メソッドと変数を使用することを意味します。そうは言っても、静的メンバーが必要な特定のケースがあります:コンストラクター(あなたが言及したように)とシングルトンパターンは良い例です。

于 2012-11-19T12:47:28.317 に答える
1

静的変数と静的メソッドはまったく別のものです。

静的変数は、ある種の「シングルトン」を表していない限り、悪いものです。表している場合は、OOPで実際のシングルトンクラスを作成することをお勧めします(特に列挙型シングルトンを使用できる場合)。特に、静的変数はマルチスレッドプログラミングを困難にし、静的フィールドを持つクラスの2つのインスタンスが「予期せず」必要になるシングルスレッドプログラミングでもそれを行うことができます。

一方、静的メソッドは、静的データにアクセスせず、引数のみを操作する限り、通常は問題ありません。もちろん、あなたが持っていることに気付いた場合はstatic void MyStaticUtils.operateOnFoo(Foo foo)、非静的void Foo.operate()メソッドを使用する方がはるかに優れています。ただし、既存のクラスにメソッドを追加する余裕がなく、既存のメソッドによって返されるインスタンスを操作する必要がある場合は、静的ユーティリティメソッドが間違いなく適切な選択です。

于 2012-11-19T12:58:27.110 に答える
1

static は主に、クラス インスタンスを作成せずにクラス メンバーにアクセスするために使用されます。public static void main()ご存知のように、実行時に bcoz だけを記述している理由は、jvm がクラス オブジェクトを作成せずにこのメソッドにアクセスして、プログラムを起動できるためです。

アクセス指定子をプライベート、パブリック、デフォルトとして使用してクラスのメンバーを宣言し、アクセスレベルを保護する方法をどのように使用したか、どのように宣言するかという要件に応じて、静的はアクセスレベルで静的にするためのものでした。

static がない場合は、メンバーをパブリックとして宣言するか、クラスを継承する場合は、保護としても作成する必要があります。同じパッケージと同様に、クラスを定義してから、クラスを継承するために静的にします。そして、継承クラスなしで使用するには、そのクラスのオブジェクトを作成する必要があり、そこにメンバーにアクセスできます(アクセス指定子に基づいていることに注意してください)

詳細については、以下のリンクをご覧ください

http://xahlee.info/java-a-day/access_specifiers.html

http://www.javabeginner.com/learn-java/introduction-to-Java-access-modifiers

于 2012-11-19T12:47:31.433 に答える
0

静的変数を使用する主な正当なケースは、シングルトン パターンです。

特に遅延初期化を使用するシングルトンのアクセサー メソッドには、静的メソッドが必要です。

シングルトンについて「悪い」ことは何もありません。

于 2012-11-19T12:54:23.647 に答える