Java - 方法调用&执行

时间:2010-03-21 11:32:46

标签: java terminology

调用和执行方法有什么区别?两个是一回事吗?

5 个答案:

答案 0 :(得分:19)

我不认为这些是标准术语。但是我通过以下方式理解它们:

  • 调用是发出对方法的调用的事件;技术上 - 将方法放在堆栈上
  • 执行是运行方法的整个过程 - 从调用到完成。 执行时间是方法体运行的时间段。

答案 1 :(得分:4)

好吧,调用方法意味着通过名称和参数调用它;执行方法意味着执行它..运行它,逐个获取它们的行并运行它们。

答案 2 :(得分:4)

我不知道那些标准的定义,但我的理解是这样的:

  • 调用是调用方法的行为
  • 执行是实际运行方法的行为

调用导致执行。

答案 3 :(得分:1)

存在一些细微差别:

  • 上下文
    • 调用上下文与调用者关联
      • e.g。您用来调用方法的参数是实际参数
    • 执行上下文与被调用者相关联
      • e.g。您在方法执行中使用的参数是形式参数
  • 动态调度
    • 方法调用可以导致执行多种方法中的任何一种
    • 执行方法正是一种执行方法
  • 顺序:调用在执行之前
    • 调用方法不会立即开始执行
      • 想象一下,如果方法是远程的
      • 调用失败可能是由于连接断开,通过线路处理参数时出错等等。
    • 方法仅在调用成功后才开始执行

另见:Overview of Remote Method Invocation。当你认为这个方法是远程的时,调用(一个开始执行某事的请求)和执行之间的区别(如果请求成功就会发生某些事情)变得更加明显。

还要考虑反思的情况。这是java.lang.reflect.Method

的方法
public Object invoke(Object obj, Object... args) throws
  IllegalAccessException,   // failure during invocation
  IllegalArgumentException, // failure during invocation
  InvocationTargetException // invocation was successful,
                               // but exception was thrown during execution

这里也明确地调用和执行两个不同的东西。如果您需要更具说服力,请考虑在此反射上下文中调用与执行NullPointerException的情况:

  • 可以在调用期间抛出,当方法是实例方法时obj == null
  • 它可以在执行期间抛出,在这种情况下,它将被包装为 InvocationTargetException的原因

答案 4 :(得分:1)

就我的知识而言:

调用是执行的前一步。如果调用成功,则执行过程开始......

例如,

参数(方法签名中声明的变量)将仅在方法调用期间创建。它是执行的前置步骤。 在调用之后,将执行实际方法,即在方法执行期间将创建局部变量(在方法体中声明的变量)。

所以参数处于调用状态,局部变量正在执行...

因此,成功的调用将导致执行。