函数参数java的求值顺序是什么

时间:2018-08-22 11:54:03

标签: java function oop constructor parameter-passing

因此,我创建了一个类,允许您选择传入自身的新实例:

$num = 1;
while ($f = $get->fetch_array(MYSQLI_ASSOC)) {
    if ( $num == 2 ) echo '<div class="divisor-slide">';
    // rest of code
    if ( $num == 2 ) echo '</div>';
    $num++; if ( $num == 3 ) $num = 1;
}

这将如何执行?外部的ExampleObject的构造函数是首先调用还是内部的?

3 个答案:

答案 0 :(得分:4)

在函数调用之前,必须先评估其所有参数。因此,将先调用new ExampleObject("Test2"),然后再调用new ExampleObject("Test", <object created on first step>)

答案 1 :(得分:1)

自变量的求值由JLS 15.12.4.2描述。

摘录:

  

参数表达式(如果有)按从左到右的顺序计算   对。如果对任何参数表达式的求值完成   突然之间,那么右边任何参数表达式的任何部分都不会出现   被评估,并且方法调用突然完成   出于同样的原因。计算第j个参数的结果   expression是第j个参数值,表示1≤j≤n。

将其应用于您的案例,评估顺序为:

ExampleFunction(new ExampleObject("Test", new ExampleObject("Test2")));
- new ExampleObject("Test", new ExampleObject("Test2"))
- - "Test"
- - new ExampleObject("Test2")
- - - "Test2"

这是调用参数进行评估的顺序。这意味着依次new ExampleObject("Test", new ExampleObject("Test2"))先评估new ExampleObject("Test2")

答案 2 :(得分:0)

由于Test ExampleObject需要ExampleObject对象,在此情况下为Test2 ExampleObject,因此将首先创建Test2 ExampleObject,然后创建Test ExampleObject,再创建ExampleFunction。
所以顺序是从内到外的。