例如,假设我有一个定义如下的对象:
public class Example {
public void doSomething() {
// does something
}
}
如果我想调用doSomething
,我需要一个Example
:的实例
Example foo = new Example();
foo.doSomething(); // doSomething is executed
我的问题是,foo.doSomething();
行的哪一部分被正式认为是方法调用?
它只是doSomething()
的一部分,还是包括对象(foo.doSomething()
)的整个语句?
在Java中,整个target.method()
被认为是方法调用的一部分:
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20448
这意味着,如果你有这样的代码:
foo.bar().baz()
那么整个表达式就是baz()
的方法调用,而该方法调用的目标本身就是另一个方法调用。
doSomething
是Example类的成员foo
是Example类的一个实例。
我不知道是否是控制OOP术语的管理机构,但尽管我担心OOP中的方法不能独立于类。您有两种选择,一种是调用实例方法,另一种是类(静态)方法。以太方式,您需要给出调用方法的实体(类或对象)的名称和方法名称。所以foo.doSomething()就是方法调用。
简而言之,就是doSomething()
。对于实例方法(例如doSomething()
方法),我们认为调用了对象上的方法。每个实例方法都有一个额外的参数,称为this
,它表示您对其调用该方法的对象,并且语言会自动为您将其传递给该方法。
doSomething()
是方法,foo
是您调用该方法的实例。foo
将作为this
参数隐式传递。
doSomething()是方法调用,foo是在/从中调用方法的Example实例。
点运算符取消引用对象foo,然后访问foo的基本对象。本例中的对象是Example。然后,它访问Example的方法doSomething(),在这种情况下,会执行一些操作。在这个场景中,foo是对从类Example实例化的对象的引用。点运算符取消引用foo,doSomething()访问取消引用的基类以调用该方法。