Java 言語の規則により、Java コンパイラーが「this」に相当するものを挿入することは指摘しておく価値があると思います。明示的なインスタンスなしでインスタンス メソッドまたはインスタンス フィールドにアクセスしていることに気付いた場合。もちろん、コンパイラは、静的メソッドではできないように、"this" 変数を持つインスタンス メソッド内からのみこれを実行できることを認識しています。
つまり、インスタンス メソッドにいる場合、以下は同等です。
instanceMethod();
this.instanceMethod();
これらも同等です。
... = instanceField;
... = this.instanceField;
コンパイラは効果的に「this」を挿入しています。特定のインスタンスを指定しない場合。
コンパイラによるこの (しゃれを意図した) ちょっとした「魔法の助け」は、初心者を混乱させる可能性があります。これは、インスタンス呼び出しと静的呼び出しが同じ構文を持っているように見えることがありますが、実際には異なる型と基礎となるメカニズムの呼び出しであることを意味します。
インスタンス メソッドの呼び出しは、ポリモーフィズムをサポートする仮想メソッドの動作から、メソッドの呼び出しまたはディスパッチと呼ばれることがあります。ディスパッチ動作は、使用する明示的なオブジェクト インスタンスを記述したか、コンパイラが "this." を挿入したかに関係なく発生します。
静的メソッド呼び出しメカニズムは、非 OOP 言語での関数呼び出しのように単純です。
個人的には、このエラー メッセージは誤解を招くと思います。「明示的なオブジェクト インスタンスを指定しないと、静的コンテキストから非静的メソッドを参照することはできません」と表示される可能性があります。
コンパイラが不平を言っているのは、標準の「this」を単純に挿入できないということです。このコードは静的メソッド内にあるため、インスタンス メソッド内と同様です。ただし、作成者は、この呼び出しに対象のインスタンスを提供するのを単に忘れている可能性があります。たとえば、静的メソッドにパラメーターとして提供されたインスタンス、またはこの静的メソッド内で作成された可能性のあるインスタンスです。
要するに、静的メソッド内からインスタンス メソッドを呼び出すことができるのはほぼ間違いありません。呼び出し用の明示的なインスタンス オブジェクトを用意して指定するだけで済みます。