在声明中:
fooFunc().barFunc(bazFunc());
显然,只有在bazFunc()
和fooFunc()
都完成之后,barFunc()
才能执行。
但是fooFunc()
和bazFunc()
的执行顺序有保证吗?
相关(但不同!)问题:Order of execution of parameters guarantees in Java?
发布于 2012-12-05 22:12:16
这方面的文档是15.12.4. Run-time Evaluation of Method Invocation
它说“在运行时,方法调用需要五个步骤。第一,可以计算目标引用。第二,计算参数表达式。第三,检查要调用的方法的可访问性。第四,定位要执行的方法的实际代码。第五,创建新的激活帧,必要时执行同步,并将控制转移到方法代码。”
在本例中,fooFunc()
是作为计算目标引用的一部分调用的,而bazFunc()
是参数表达式之一,因此必须首先调用fooFunc()
。
发布于 2012-12-05 22:07:56
先是fooFunc
,然后是bazFunc
,最后是barFunc
下面是一些演示它的代码:
public class OrderJava {
public static void main(String[] args) {
fooFunc().barFunc(bazFunc());
}
public static Bar fooFunc() {
System.out.println("I am fooFunc!");
return new Bar();
}
public static class Bar {
public void barFunc(Object o) {
System.out.println("I am barFunc!");
}
}
public static Object bazFunc() {
System.out.println("I am bazFunc!");
return null;
}
}
此代码的输出为:
I am fooFunc!
I am bazFunc!
I am barFunc!
发布于 2012-12-05 22:03:55
fooFunc()
将首先执行,然后是bazFunc()
,最后是barFunc()
我们都同意,在barFunc()
进行任何操作之前,必须先执行fooFunc()
。
鉴于bazFunc()
仅在barFunc()
需要其参数时才会被调用,因此这将在fooFunc()
之后发生是顺理成章的。
https://stackoverflow.com/questions/13724952
复制相似问题