誰かが静的変数と静的メソッドのわかりやすい定義を与えることができますか?
これらは非静的変数やメソッドと比べてどうですか?
Javaでは、static
はクラスメソッドとクラス変数を示します(インスタンスメソッドとインスタンス変数ではありません)。これらのメソッドと変数には、インスタンスが存在しなくてもアクセスできます。
これをインスタンスメソッドおよびインスタンス変数と比較してください。これらはオブジェクトを介してアクセスする必要があります。たとえばlength()
、オブジェクトを操作します。
String a = "hello";
int len = a.length();
対照的valueOf
に、オブジェクトを操作することはできません。さらに、呼び出されると新しいオブジェクトが作成されます。
String x = String.valueOf(123.45);
インスタンスメソッドが<objectName>
ドットの後に続くを使用して呼び出される方法に注意してください。.
静的メソッドは<className>
、ドットの後に続くを使用してアクセスされます.
。
言語によって少し違う意味があるので、答えるのは簡単ではないと思います。私がそれを最も一般的な言葉で言えば、おそらく人によって大きく異なります:
静的変数は、クラスのすべてのインスタンス間で共有される変数です。
静的メソッドは、クラスで呼び出すことができるメソッドであり、通常、クラスをインスタンス化する必要はありません。
繰り返しますが、3つの異なる言語を選択する場合、3つの異なる答えを出します。
ウィキペディアもこれらのことを定義するのに少し役立つかもしれません。
http://en.wikipedia.org/wiki/Method_(computer_programming)http://en.wikipedia.org/wiki/Static_variable _ _
'static'キーワードは、それが発生したCでは複数の意味を持つため、混乱を招く可能性があります。関数内で変数を宣言するために使用される場合、それは変数が関数外で存続期間を持っていることを意味します。これは本質的に、関数にプライベートなグローバルです。グローバル変数が静的である場合、それは本質的にそのソースファイルに対してプライベートです。どちらの場合も、変数はグローバルと同じように単一のメモリ位置を持ちます。コンパイラーが、関数またはコンパイル単位の外部からアクセスできないようにしているだけです。
関数が呼び出されたときにスタックがどのように見えたかに応じてスタックのどこかにメモリ位置を持つ通常のローカル変数とは対照的に、静的変数の場所は決して変更されないため、「静的」という単語が使用されたと思います。
C ++が作成されたとき、このキーワードはクラスレベルのプロパティとメソッドを参照するために再利用されました。静的メソッドまたはプロパティは、クラスにプライベートな一種のグローバルであると考えられていたと思います。これらがメモリ内でどのように配置されるかを考えると、静的プロパティはグローバル変数のように単一のアドレスを持つため、ある種の意味があります。唯一の違いは、コンパイラがクラス外での使用を許可しないことです。
Java(および他の言語)にはC ++に触発された構文があるため、クラスのメソッドとプロパティを参照するために「static」を使用することもそこで使用されます。このキーワードの使用は英語の意味とはほとんど関係がないため、残念です。
しかし、一般的に、それはそれを見る方法です。ほとんどの言語では、それが「静的」である場合、プログラム全体に1つしかありません。単一の固定メモリアドレスを持つものと考えてください。
静的変数は、クラスのすべてのインスタンスで使用される変数です。通常の変数と同様に、変数は再び初期化されます。静的メソッドは、オブジェクトを作成することさえせずにそれらを呼び出すことの意味を持つことができます。
静的メソッドを明確に理解するための例を示します。
キーボードからデータを入力する場合、java は Scanner クラスを使用します
元; Scanner scn = new Scanner(System.in); int a = scn.nextInt();
つまり、 nextInt() メソッドは静的ではありません。
静的メソッドは、クラスをインスタンス化せずに使用できるメソッドです。
次の例を見てください。
public class Calculate {
static void calculatePower(int num, int pow) {
System.out.println(Math.pow(num, pow));
}
}
静的メソッドの使用。
public static void main(String[] args) {
Calculate.calculatePower(2,8);
}
そのため、Calculate クラスをインスタンス化せず、静的な calculatePower メソッドを使用しました。