标签: order-of-execution

是否将参数传递给始终在java中从左到右排序的方法?

我将调用一个带有两个参数的方法,但我会像这样使用k ++:

polygon.addPoint((int)rs.getDouble( k++),(int)rs.getDouble( k++ ));
Run Code Online (Sandbox Code Playgroud)

其实我想确保jvm先执行第一个参数,然后再执行第二个参数.如果订单以某种方式改变,参数将被传递错误的顺序.

非常感谢!

java methods argument-passing order-of-execution

7
推荐指数
2
解决办法
988
查看次数

在 Kotlin CI 测试期间静态最终变量初始化(在 Java 中)不正确

我管理一个开源项目,有一个用户报告了一种情况,根据 Java 的类中静态变量的初始化顺序,我认为这是不可能的。一个的价值static final类变量是不正确,显然是从一个依赖的静态方法的不同结果导致基于其自己的静态最终变量。

我想了解发生了什么,以便找出最佳解决方法。此刻,我很困惑。

问题

我的项目的主要入口点是SystemInfo具有以下构造函数的类:

public SystemInfo() {
    if (getCurrentPlatform().equals(PlatformEnum.UNKNOWN)) {
        throw new UnsupportedOperationException(NOT_SUPPORTED + Platform.getOSType());
    }
}
Run Code Online (Sandbox Code Playgroud)

单独运行时,问题不会重现;但是当作为正在执行的许多测试的一部分运行时,一个更大的构建 ( mvn install) 它始终是可重现的,这意味着问题可能与多线程或多个分叉有关。(澄清:我的意思是同时初始化两个不同类中的静态成员,以及与此过程相关的各种 JVM 内部锁定/同步机制。)

他们收到以下结果:

java.lang.UnsupportedOperationException:不支持操作系统:JNA 平台类型 2

此异常意味着SystemInfo实例化开始时有两件事是正确的:

  • 结果getCurrentPlatform()是枚举值PlatformEnum.UNKNOWN
  • 结果Platform.getOSType()是2

不过,这种情况应该是不可能的;值 2 将返回 WINDOWS,而 unknown 将返回一个非 2 的值。因为两个变量都是staticfinal它们永远不应该同时达到这个状态。

(用户的)MCRE

我试图自己重现这个并失败了,我依赖于用户在他们的基于 Kotlin(kotest)框架中执行测试的报告。

用户的 MCRE 只需调用此构造函数作为在 Windows 操作系统上运行的大量测试的一部分:

public class StorageOnSystemJava {
    public StorageOnSystemJava(SystemInfo info) {
    }
}

class StorageOnSystemJavaTest …
Run Code Online (Sandbox Code Playgroud)

java static-initialization order-of-execution

7
推荐指数
1
解决办法
109
查看次数

在Javascript中执行代码的顺序是什么?

JavaScript中的代码究竟是如何执行的?我的意思是按什么顺序?如果我声明一个这样的函数,执行顺序是否会有所不同:

function render() {
    // Code here
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

var render = new function(){
    // Same code here
}    
Run Code Online (Sandbox Code Playgroud)

JavaScript是否执行脚本文件中定义的函数,无论它们是否被事件处理程序调用?(例如onload=function()).

最后如果在另一个函数中定义了一个函数,当调用父函数时,是否也调用了较低的函数?例如

function a(){

    function b(){
        // code
    }

    function c(){
        //code
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图在JavaScript中具体理解执行顺序.

javascript javascript-events order-of-execution

6
推荐指数
1
解决办法
1万
查看次数

约束是在自定义触发器之前还是之后执行?

触发器和约束的执行顺序是什么?例如,如果我插入一个错误的外键,pgsql 会在我自己的触发器之前(BEFORE 或 AFTER)检测到这个 fk 吗?

我知道触发器内的异常将回滚在同一个触发器内执行的任何更新/插入(即使对于 AFTER 触发器),但约束是否相同?外键约束是否会从我自己的触发器回滚我所有的插入/更新?

谢谢你

sql postgresql triggers order-of-execution

6
推荐指数
1
解决办法
2599
查看次数

为什么我的程序从右到左评估参数?

我正在学习C,因此尝试了以下代码,并获得了7,6而不是的输出6,7。为什么?

#include <stdio.h>
int f1(int);
void main()
{
    int b = 5;
    printf("%d,%d", f1(b), f1(b));
}
int f1(int b)
{
    static int n = 5;
    n++;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

c function-call order-of-execution

6
推荐指数
1
解决办法
159
查看次数

Haskell IO执行顺序

我有以下代码:

import Control.Monad (unless)
import System.IO (isEOF, hFlush, stdout)

main :: IO ()
main = unlessFinished $ do
        putStr "$ "
        hFlush stdout
        getLine >>= putStrLn
        main
    where
    unlessFinished action = isEOF >>= flip unless action
Run Code Online (Sandbox Code Playgroud)

当我编译并运行这段代码时,它会在空白行的开头显示一个光标,并且只有在我按下[Enter]后输出它$和我写的任何内容.

即使monad保证它的动作按照它们在代码中排序的顺序被调用(或者我理解这里写的是什么),它似乎也会getLine被调用.那为什么它不能正常工作?putStr "$ "IO

io haskell order-of-execution

5
推荐指数
1
解决办法
179
查看次数

带增量的Java return语句-一般行为是什么?

我刚刚了解到,如果return语句包含一个递增操作,则该返回将首先执行,并且该值将在递增之前返回。如果我先在单独的语句中递增,然后返回,则它将按预期工作。

private static int incrementIntV1(int a)
{
   return a++;
}

private static int incrementIntV2(int a)
{
    a++;
    return a;
}

public static void main(String[] args)
{
    int b = 6;

    System.out.println("Increment in return: " + incrementIntV1(b));
    System.out.println("Increment first, then return: " + incrementIntV2(b));
    System.out.println("Increment with addZero: " + incrementAddZero(b));
}   
Run Code Online (Sandbox Code Playgroud)

return发生了什么,使它有时对整个表达式求值而有时不求值?这是关于增量操作如何发生的特殊之处吗?

如果我尝试:

private static int incrementAddZero(int a)
{
    return a++ + addZero();
}

private static int addZero()
{
    System.out.print("addZero executes");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

增量操作仍然没有发生,但是我知道addZero方法由于print语句而运行。为什么它在返回之前不增加,但是在返回之前确实执行addZero方法?

希望他有道理。非常感谢

java return increment order-of-execution

5
推荐指数
1
解决办法
5293
查看次数

Unity脚本执行顺序和Start()

Unity的文档中有这样一行:

默认情况下,不同脚本的Awake、OnEnable和Update函数按照脚本加载的顺序(任意)被调用。

所以我在这里有两个问题:

  1. 在这种情况下“任意”是什么意思?是随机的吗?
  2. 这是否还包括 Start() 和 Awake(),或者 Start() 是否有其自己的特殊行为,不遵循脚本执行顺序,即使该顺序已在项目设置中更改?

我有一段时间想知道 Unity 如何“决定”它在运行时的行为方式,特别是因为似乎有些东西在某些时候可以工作,但在其余时间它会导致崩溃或几乎没有解释的东西,但是该文档并没有真正提及太多,而且我似乎在其他地方找不到太多信息。

unity-game-engine order-of-execution

5
推荐指数
1
解决办法
1万
查看次数

如何评估A * = B * = A * = B?

public static void main(String[] args) {
    int A=5;
    int B=2;

    A *= B*= A *= B ;

    System.out.println(A);
    System.out.println(B);
}
Run Code Online (Sandbox Code Playgroud)

当我在纸上计算出这个问题时,我发现了A=200 B=20,但是当我写下它以使其黯然失色时,它表明A=100 B=20

您能在纸上解释解决方案吗?

我试图自己解决Eclipse中的问题。

我们该如何解决?

java operators compound-assignment order-of-execution

5
推荐指数
2
解决办法
69
查看次数

我在这里正确解释了 C 的操作顺序吗?

我对CPPReference说 postincrement\xe2\x80\x99s 值评估在其副作用之前排序这一事实感到困惑,但 preincrement 没有这样的保证。

\n

我现在想出了一个例子,这很重要,但我不确定我的分析是否正确。

\n

据我了解,这两个程序的不同之处在于第一个包含 UB,而第二个则不包含:

\n
#include <stddef.h>\n#include <stdio.h>\n\nint main(void) {\n    int arr[] = {0, 1, 2};\n    int i = 1;\n    int x = ++arr[arr[i]];\n}\n
Run Code Online (Sandbox Code Playgroud)\n
#include <stddef.h>\n#include <stdio.h>\n\nint main(void) {\n    int arr[] = {0, 1, 2};\n    int i = 1;\n    int x = arr[arr[i]]++;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我对这个表达式的分析++arr[arr[i]]如下:

\n
    \n
  1. 有以下先序关系:\n
      \n
    • 的值计算在 的i值计算之前排序arr[i]
    • \n
    • 的值计算在 的arr[i]值计算之前排序arr[arr[i]]
    • \n
    • 的值计算在 的arr[arr[i]]值计算之前排序++arr[arr[i]]
    • \n
    \n …

c sequence-points language-lawyer order-of-execution

5
推荐指数
1
解决办法
144
查看次数