2010-03-21 74 views
-1

當我打電話爲一個類的實例方法如下: object_name.function_name();編譯器如何知道在後臺必須爲該「object_name」調用「function_name」?Java的實例方法調用

+2

你的問題不是很清楚。你可以嘗試改寫它嗎?如果您編寫object_name.function_name(),那麼「object_name」位於「。」的左側,這就是它知道的方式......除非您要求其他的東西? – Steve 2010-03-21 06:22:16

回答

1

這是由編譯器,因爲它讀你的代碼確定。 Java有一個定義語言規則和語法的語法。 Java的特定語法規定,對象引用可以跟一個點,然後是一個方法名。

所有語言(不只是編程語言)也有類似的規定。根據英語的語法,你的大腦正在編譯你正在閱讀的句子。語言的規則是使語言能夠被理解的原因。通過定義關於表達式的含義的規則,我們能夠進行交流。編程語言也不例外!

1

當編譯器讀取代碼時,它將每個「word」(空白或運算符之間的任何內容)推入內部堆棧。當它找到諸如「+」,「=」或「。」等操作符時,它會彈出堆棧中的最後一個「單詞」。編譯知道「。」操作符意味着你正在從一個對象中調用一個方法,這個對象的名字就是你剛剛彈出的那個單詞。然後它查找該方法的該對象的類文件。

例如:

Object object_name = new Object();

object_name.function_name();

當編譯到達上面的行時,它將object_name推入內部堆棧,然後在Object.class文件內查找名爲function_name()的方法。如果它沒有找到一個Object.class文件,它會尋找一個Object.java文件,將編譯,然後尋找函數名()新編譯Object.class文件中。