this
メソッドを呼び出すオブジェクトを表していることはわかっていますが、static
メソッドはどのオブジェクトにもバインドされていませんが、私の質問は、クラスオブジェクトで静的メソッドを呼び出すことができるということです。
なぜJavaはこれを利用可能にし、利用できないようにしたのthis
ですか?
this
クラスの現在のインスタンスを指します。
静的メソッドはインスタンスではなくクラスに関連付けられているためthis
、指すものは何もありません。
次に例を示します。
public class Foo {
private String name;
public static void someClassMethod() { System.out.println("associated with a class"); }
public Foo(String n) { this.name = n; }
public String getName() { return this.name; }
public void setName(String n) { this.name = n; }
public void doAnotherThing() {
Foo.someClassMethod(); // This is what is really happening when you call a static method in an non-static method.
}
}
簡単な答え:this
非静的メソッドの外部では定義されていません。
インスタンスで静的メソッドを呼び出すことは構文の省略形であり、存在する必要があることに同意しません。
すべての観点から、this
常にこのオブジェクトを意味するため、このクラスを意味する可能性を与えると、複数のバグが発生する可能性があります
ここでの違いは、クラスとオブジェクトの違いです。非静的メソッドはオブジェクトで呼び出され、静的メソッドはクラスで呼び出されます。
クラスは、オブジェクトを構築するための青写真として見ることができます。クラスHouse
には静的メソッドhasDoor()
(が返されtrue
ます)がありますが、タイプのオブジェクトにはHouse
メソッドがありopenDoor()
ます。設計図のドアを開けることはできません。
を呼び出すことはできますがHouse.hasDoor()
、呼び出すことはできませんHouse.openDoor()
。呼び出すことができます
House h = new House();
h.openDoor();
電話をかけることはできますがh.hasDoor()
、これは少し厄介なので、ほとんどの場合避ける必要があります