Java中参数保证的执行顺序?

Posted

技术标签:

【中文标题】Java中参数保证的执行顺序?【英文标题】:Order of execution of parameters guarantees in Java? 【发布时间】:2011-01-13 04:30:17 【问题描述】:

鉴于C 中的以下函数调用:

fooFunc( barFunc(), bazFunc() );

没有指定barFuncBazFunc的执行顺序,所以C中的barFunc()可以在bazFunc()或者bazFunc()之前在barFunc()之前调用。

Java 是否指定了函数参数表达式的执行顺序,或者像 C 这样的未指定?

【问题讨论】:

相关问题:Order of execution of methods describing an instance and an argument in Java? 【参考方案1】:

来自Java Language Specification(关于表达式):

15.7.4 参数列表从左到右求值

在方法或构造函数调用中 或类实例创建表达式, 参数表达式可能出现在 括号,用逗号分隔。 每个参数表达式似乎是 在任何的任何部分之前充分评估 参数表达式在它的右边。

【讨论】:

虽然这是真的,但请不要以使其依赖于执行顺序的方式进行编码。它只是增加了复杂性而不增加功能。 确实,“建议代码不要过度依赖本规范。” java.sun.com/docs/books/jls/third_edition/html/… @Jon 我不同意!如果它在规范中,那么您可以依赖它。例如,要从文件中读取矩形,我使用以下代码: myRect = new Rectangle(scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt());它简洁明了。更长的实现将是不必要的复杂性。 我用它来避免在许多地方保存局部变量,并使解析器中每个函数调用的代码缩短 1/2 行:D。避免许多局部变量(除非创建更复杂的代码)通常也是好的设计。 @Jon 如果 Java 允许在构造函数链接调用之前声明临时变量,我会同意你的看法。但是,在将构造函数链接与复杂的成员初始化结合使用时,我认为没有可行的替代方法来依赖这种行为。

以上是关于Java中参数保证的执行顺序?的主要内容,如果未能解决你的问题,请参考以下文章

Java中如何保证线程顺序执行

MFC中如何让多线程按先后顺序执行,第一个来的先执行,以后按先后到达的顺序执行

浅谈Java线程安全

Jmeter--多个线程组顺序执行和并行执行

深入理解Java虚拟机- 学习笔记 - Java内存模型与线程

Vb.net 多个线程执行顺序的问题