私はすでにこの投稿を読みました。
メソッドの「静的」キーワードは何をしますか?
static != clingy と言われたのを覚えていますが、このキーワードについて知っているのはそれだけです。
静的クラス変数は、グローバル クラスと考えることができます。クラスのインスタンスがいくつあっても、各静的変数のインスタンスは 1 つだけです。
静的メソッドは非静的クラス変数を使用せず、クラス自体をインスタンス化することなく、クラスの外部から直接呼び出すことができます。
インスタンス参照から参照することはできますが、静的変数とメソッドはインスタンスではなくクラスに属します。通常、クラス名を使用してそれらにアクセスします。
メソッドが static として宣言されている場合、それを呼び出すために定義されているオブジェクトのインスタンスは必要ありません。では、そのような状況がいつ発生する可能性があるかを知りたいと思うかもしれません。javaのmainメソッドを考える
public static void main(String[] args)
なぜ静的と宣言されているのですか?これは、プログラムを開始するために、このメソッドの実行を開始する必要があるためです。また、プログラムは初期化されていないため、宣言されているクラスのインスタンスを作成する方法はありません。したがって、クラスを public として宣言する必要があります。そして、この静的メソッドは、クラスがメモリにロードされたときに呼び出されます
java あなたのクラス名
これに加えて、静的メソッドは静的変数を変更するために使用されます。非静的インスタンス変数を操作することはできません。
また、C などの別の言語では static の意味が異なることに注意してください。
静的メソッドは、非静的メソッドのように、そのクラスのオブジェクトのインスタンスではなく、それが定義されているクラスに属します。クラスのインスタンスに属さないことの副作用として、静的メソッドで非静的フィールドにアクセスしようとするとコンパイル エラーが発生します。静的メソッドが非静的フィールドにアクセスするための「これ」はありません。
Java Math クラスは、静的メソッドがロードされているため、優れた例です。Math クラスのインスタンスを作成することはありません。クラスからメソッドを直接呼び出すだけです。
Math.abs(3.14);
メソッド内の静的変数の値は、そのメソッドの呼び出し間で保存されます
public void method() {
static int callCount = 0;
callCount++;
System.out.println("Calls: " + callCount);
}
method(); // "Calls: 1"
method(); // "Calls: 2"
method(); // "Calls: 3"
これは静的メソッドとはまったく異なることに注意してください。静的メソッドは、このクラスのインスタンスではなく、それが定義されているクラスで呼び出されます。
class MyClass {
public static void staticMethod() { ... }
public void nonStaticMethod();
}
Myclass.staticMethod();
MyClass instance = new MyClass();
instance.nonStaticMethod();
静的メソッドは、クラスに対して確立されたメソッドです。ポインターを必要とせず (そしてポインターを持たず)、this
インスタンス データにアクセスできません。だからあなたは何かikeを書くことができます
public class Hello {
void instanceHello() {
System,out.println("Hello from the instance.");
}
public static void main(int argc, String[] argv){
// The main method is defined even though there are no instances
System.out.println("Hello from main.");
instanceHello(); // but this is a syntax error;
Hello h = new Hello();
h.instanceHello(); // this isn't though
}
}