Java实例方法调用

时间:2010-03-21 06:19:23

标签: java

当我调用类的实例方法时如下: object_name.function_name();编译器如何知道必须在幕后为“object_name”调用“function_name”?

2 个答案:

答案 0 :(得分:1)

这是由编译器在读取代码时确定的。 Java有一种语法,用于定义语言的规则和语法。 Java的特定语法规定对象引用后面可以跟一个点,然后是方法名。

所有语言(不仅仅是编程语言)都有类似的规则。根据英语的语法,你的大脑正在编译你正在阅读的句子。语言规则使得语言得以理解。通过定义关于表达式含义的规则,我们能够进行通信。编程语言也不例外!

答案 1 :(得分:1)

当编译器读取代码时,它会将每个“单词”(空格或运算符之间的任何内容)推送到内部堆栈中。当它找到诸如“+”,“=”或“。”之类的运算符时,它会从堆栈中弹出最后一个“单词”。编译知道“。”运算符意味着您正在从一个对象调用一个方法,该对象的名称就是您刚刚弹出的单词。然后它为该方法查找该对象的类文件。

例如:

Object object_name = new Object();

object_name.function_name();

当编译到达上面的行时,它会将object_name推送到内部堆栈,然后在Object.class文件中查找名为function_name()的方法。如果它没有找到Object.class文件,它将查找一个Object.java文件并编译它,然后在新编译的Object.class文件中查找function_name()。