【问题标题】:Is Passing a Parameter to a method the same as creating an object?将参数传递给方法与创建对象相同吗?
【发布时间】:2010-02-15 22:18:32
【问题描述】:

我正在学习 Servlet 和 JSP。我想知道“doGet”和其他可能被覆盖的方法。 “doGet”有 2 个参数——HTTPServletRequest 请求和 HTTPServletResponse 响应。这是我的问题:请求和响应对象在方法主体中使用,但我没有看到任何对象创建,例如请求 = 新的 HTTPServletRequest。这些对象是在其他地方创建的吗?在超类?这只是一个 Java 问题,因为我经常对 Applets 感到疑惑,即 Graphics g 对象被传递给“paint”方法,但我没有看到它在任何地方创建?

GF

【问题讨论】:

  • 删除了与 servlet 相关的标签,因为这是一个比这更基本的问题。

标签: java


【解决方案1】:

在您给出的两个示例中,servlet 和 applet,代码在容器内运行。 Tomcat 是 servlet 的容器,这意味着容器提供了某些功能。在这种情况下,容器将创建请求和响应对象并将其传递给您的 servlet。

如果您编写一个可自行运行的普通 Java 程序,那么您负责创建所有对象。

【讨论】:

  • 是的,这很好解释。不过有趣的是,大多数 Java 书籍实际上根本没有解释这一点。过去肯定有人对此感到疑惑。无论如何,谢谢。
  • @Grungefreak 我认为书中有解释,但可能不会完全按照您需要的方式说明。这就是 stackoverflow 的伟大之处……您可以提出一个非常具体的问题,并以您需要它理解的方式陈述事情。
  • 是的,我完全同意。这个简短的线程为我清除了很多困惑。我假设术语“调用站点”是调用(方法调用者)相关实际方法的代码部分?
  • 大多数介绍 Java 的书籍不(也不应该)使用 servlet 或 applet 来介绍 Java 语言的基础知识。我确信这些问题在 JEE 教程和教科书中都有描述,但是如果你不掌握 Java 基础知识,那么在更高级别的 JEE 文本中提出的要点就会从你身边溜走。
【解决方案2】:

通常,在任何编程语言中,当使用对象的实例(或与此相关的任何参数)调用方法时,是的,这些对象是在某处创建的。

在大多数情况下,您不必担心在哪里,只需在函数内部处理它们时它们在

回到您的问题,虽然在某些情况下对象是通过非传统方式创建的(取决于技术堆栈),但您可以放心,如果您参考了在您编写的方法中传递给您的对象,然后使用传统方法在调用堆栈中的某处(或另一个,如果您有多个线程)创建它。

在 Java 的情况下,这意味着有人在某个时候调用了 new ...,并将其提供给您的方法的调用站点,以便将其作为参数传递。

【讨论】:

  • 好的,我承认我可能在这里挖掘得相当深,但我正试图真正深入地了解正在发生的事情。对于applet 中的“paint()”方法,传入了一个Graphics 对象。当applet 在浏览器中运行时,Java 插件是否以某种方式创建了图形对象,因为我看不到它是在哪里创建的? GF
  • @GrungeFreak:是的,它就是这么做的。 JVM 将与它所在的任何平台交互以创建 Graphics 对象,然后在适当的时候调用您的绘制方法,将实例传入。
【解决方案3】:

它由网络服务器(例如 tomcat)创建,并使用此参数调用您的 servlet

【讨论】:

    【解决方案4】:

    对象是在调用站点创建的。 IE。调用该方法的人负责创建他/她作为参数传递给该方法的对象(当然,除非他传递已经存在的对象,但这些对象之前也已在某处创建)。

    【讨论】:

    • 一般来说这不是真的。对象创建可以发生在许多不同的地方。它没有必须在呼叫站点。只是调用站点必须有权访问它要作为参数传递的已创建对象。
    • @casperOne:这就是我写“除非他通过已经存在的对象”的原因。
    【解决方案5】:

    servlet 中的所有方法都由 servlet 容器如 tomcat 调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多