私は静的という単語のマップされたアイデアを与えようとしています(私の現在の名詞の静的な定義を使用し、形容詞の定義をよく理解していない)が、静的ではない変数やメソッドは、 (またはより良い前記参照/参照)をオブジェクト/インスタンスに貼り付ける。では、宣言されたメソッド/変数について実際に記述している用語は何ですか?静的とは、「固執している」と言いますか?
答えて
「静的」および「動的」という用語は、プログラミング用語の反対語として頻繁に使用されます。
ダイナミックなものは何か変わるものです。クラスの文脈では、各インスタンス(オブジェクト)で異なる値や振る舞いをとるものです。
静的なものは変更されません。それは静止している。したがって、クラスの静的変数は、各インスタンスで異なる値を取ることはありません。
静電気は移動しません。それはあなたの靴下の一つの場所に詰まっています。ダイナミックな電気は、ワイヤー内を動くと、はるかに強力なことをすることができます。
私はここで、この質問は非常に詳細な回答を提供して思う:static
のWhat is "static"?
コンセプトは何かがクラスまたはオブジェクト(インスタンス)の一部であるかどうかに関係しています。 static
として宣言されているmain
方法の場合
、それはmain
メソッドがクラスメソッドであることを言う - クラスの一部である方法ではなく、オブジェクトの一部。つまり、ClassName.method
を参照することによって、別のクラスが別のクラスのクラスメソッドを呼び出すことができます。例えば、MyClass
の実行方法により達成される呼び出す:一方
MyClass.main(new String[]{"parameter1", "parameter2"});
、static
修飾語なしメソッドまたはフィールドは、オブジェクトの一部(あるいはまた、「インスタンス」と呼ばれる)であることを意味しますクラスの一部ではありません。を有する方法またはフィールドの値を、各インスタンスとして
MyClass c1 = new MyClass();
c1.getInfo() // "getInfo" is an instance method of the object "c1"
異なる値を有することができる:クラス名ではなく、メソッドまたはフィールドが属した特定のオブジェクトの名前で呼ばれています異なるオブジェクトの同じ名前が必ずしも同じである必要はありません。インスタンスとクラスの変数の2つの概念を組み合わせると、同じオブジェクトが同じ名前である必要はありません。
MyClass c1 = getAnotherInstance();
MyClass c2 = getAnotherInstance();
c1.value // The field "value" for "c1" contains 10.
c2.value // The field "value" for "c2" contains 12.
// Because "c1" and "c2" are different instances, and
// "value" is an instance field, they can contain different
// values.
class AnotherClass {
private int instanceVariable;
private static int classVariable = 42;
public int getInstanceVariable() {
return instanceVariable;
}
public static int getClassVariable() {
return classVariable;
}
public AnotherClass(int i) {
instanceVariable = i;
}
}
上記のクラスはinstanceVariable
変数のインスタンスを持っており、static
修飾子で宣言されたクラス変数classVariable
:我々は、インスタンスとクラス変数とメソッドの両方を含む新しいクラスを宣言しましょう。同様に、値を取り出すインスタンスとクラスのメソッドがあります。
インスタンスのコンストラクタは、引数としてインスタンス変数に割り当てる値をとります。クラス変数は42
に初期化され、変更されません。
のは、実際に上記のクラスを使用すると何が起こるか見てみましょう:
AnotherClass ac1 = new AnotherClass(10);
ac1.getInstanceVariable(); // Returns "10"
AnotherClass.getClassVariable(); // Returns "42"
は、クラスとインスタンスメソッドが呼び出されるさまざまな方法に注意してください。クラス名をAnotherClass
という名前で、またはインスタンスをac1
という名前でクラスを参照する方法。さんはさらに行くとメソッドの動作の違いを見てみましょう:
AnotherClass ac1 = new AnotherClass(10);
AnotherClass ac2 = new AnotherClass(20);
ac1.getInstanceVariable(); // Returns "10"
AnotherClass.getClassVariable(); // Returns "42"
ac2.getInstanceVariable(); // Returns "20"
AnotherClass.getClassVariable(); // Returns "42"
見ることができるように、インスタンス変数は、オブジェクト(または「インスタンス」)で開催されるものである、その特定のインスタンスにそのためのユニークな、これこの例では、ac1
およびac2
によって参照されるオブジェクトです。
一方、クラス変数は、そのクラス全体でのみユニークです。、さらに良い渡って、このポイントを得るのは、AnotherClass
に新しいメソッドを追加してみましょうするには:次に
public int getClassVariableFromInstance() {
return classVariable;
}
、次のコマンドを実行します。
AnotherClass ac1 = new AnotherClass(10);
AnotherClass ac2 = new AnotherClass(20);
ac1.getInstanceVariable(); // Returns "10"
ac1.getClassVariableFromInstance(); // Returns "42"
ac2.getInstanceVariable(); // Returns "20"
ac2.getClassVariableFromInstance(); // Returns "42"
ことによって見ることができるようにgetClassVariableFromInstance
は、インスタンスメソッドであるが、インスタンスac1
とac2
を参照して呼び出された場合、両方とも同じ値42
を返します。どちらのインスタンスメソッドでも、インスタンスにではなくクラス固有のクラスメソッドclassVariable
を参照しているため、クラスAnotherClass
の場合はclassVariable
のコピーが1つしかないためです。
static
修飾子が何のために使用されているかを明確にすることを望みます。
The Java Tutorials Sunからは、と呼ばれるセクションがあります。このセクションも2種類の変数とメソッドに分かれています。
これは理論的に質問に答えるかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 –
- 1. 私はisVowelとprintAllメソッドに固執しています
- 2. 私はPHPの配列()に固執していますか?
- 3. WPFコントロールで静的または非静的としてEventHandlerを宣言する
- 4. REACTコンポーネントがページに固執していますか?
- 5. 私はこのコードに固執しています
- 6. 静的なクラスメンバは固定されていますか?
- 7. divを固定して静的にすることはできますか?
- 8. mの静的宣言は非静的宣言に従います
- 9. .NETの静的言語と静的言語の構築の違いは何ですか?
- 10. Androidスタジオが「APKのインストール」に固執しています
- 11. 「this」を静的として宣言する方法は?
- 12. CSSスタイルシートのパスは、ファイル自体の場所に固執していますか?
- 13. Parrot VMと静的言語
- 14. ノードからRDS /オーロラと話すことに固執しました
- 15. Cocos2dはC++ファイルを許容していませんか? (私は本当にCAStreamBasicDescriptionに固執しています)
- 16. レールプロジェクトomniauthを使用しています - [n]を評価することに固執しました[]エラー
- 17. ダイナミックプログラミングに固執
- 18. ラベルがパネルに固執していないC#Visual Studio .NET
- 19. パッケージマネージャコンソールが依存関係に固執していないSignalR
- 20. 静的ブロックと静的フィールドの違いは何ですか?
- 21. タイマーまたはコードがスケジュールに固執しない
- 22. PHP - 静的メソッドと非静的メソッドを宣言できますか?
- 23. Angular CLIの 'new'と 'build'を使用すると「Loading ...」に固執します。
- 24. C#がジェネリックスとインターフェイスに固執しました
- 25. IBMドミノデザイナーが「ODPとの同期」に固執しました。
- 26. 注入フィールドを静的として宣言する
- 27. Pythonオープンファイルメソッドに固執する
- 28. FirefoxのDevToolsインスペクタのハイライトを固執することはできますか?
- 29. 静的でない非静的メソッドは動作していますか?
- 30. Three.js BufferGeometry線を描画するときに、色がセグメントに固執しない
状況によって異なります。どんなプログラミング言語について話していますか? –
スタティックはクラスに「スタック」しています。非静的なものは、クラスのインスタンスに「スタック」しています。 – Jack
@MattBall私はJavaを参照していましたが、他の言語(JS、Python、Ruby)にもっと精通しています。 –