2016-12-13 3 views
4

私は静的メソッドとインスタンスメソッドの基本的な違いを理解していますが、本書には含まれていないCS finalについては不思議でした。静的メソッドを呼び出すときに実際に参照するコードは何ですか?オブジェクトが初期化されていない場合、静的メソッド/変数がjavaで実際に参照するものは何ですか?

FooClass.staticMethod(); 

私はそれがクラスを初期化してからメソッドを呼び出しますが、それはそのオブジェクトがまだないクラスを参照するので、それは静的本当にではないことを意味する必要があります推測しています。

答えて

3

FooClassここでの例はオブジェクトではなく、JavaコンパイラにどのクラスにstaticMethodが含まれているかを伝える単なる識別子であることに注意してください。クラスを参照しているプログラムがそのクラスをロードして初期化する(実際にはFooClass.classからアクセス可能なクラスを表すオブジェクトを作成する)が、実際にはクラスのインスタンスメソッドであることを意味するわけではありませんオブジェクト。そうではありません。 thisには意味がありません。

(実際には、最低レベルで、静的メソッドを呼び出すためのバイトコード命令は、インスタンスメソッドを呼び出すためのものとは異なる。)

+1

Offtopic:何があなたが500Kに達するどうなりますか?どこかにパーティーはありますか?そして500Kを超えるあなたを上回る人は、そうするためにゴールドバッジを手に入れますか?そうでない場合は、どうしてですか? – GhostCat

+0

@GhostCat:LOL分かりません。 100k、200k、(IIRC)250kで私はスワッグを手に入れました。それ以来何もないと思ってはいけません。一方、私は[Jon](http://stackoverflow.com/users/22656/jon-skeet)が1Mを上回ったときに再び表示を破るのを待っているだけです。 –

+0

私は知っていますが、それはもう少し待っています。私の野生の夢の中で、彼は1Mに達する前に100Kに達することを願っています。一方、現在のペースでさらに3年が本当に価値があるかどうかはわかりません。 – GhostCat

関連する問題