将参数传递给方法与创建对象是一样的吗?

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

删除了与servlet相关的标签,因为这比那个问题基础得多。 - skaffman
5个回答

2
一般来说,在任何编程语言中,当使用对象实例(或任何参数)调用方法时,这些对象都会在某个地方被创建。
在处理函数内部时,大多数情况下,您不必担心“在哪里”,只需关注它们的存在。
回到你的问题上来说,虽然可能有某些情况是通过非传统方式创建对象(取决于技术栈),但通常情况下,如果您在编写的方法中有一个对象引用作为参数传递给您,那么可以确定它是使用传统方式在调用堆栈中的某个位置(或其他位置,如果您有多个线程)创建的。
对于Java而言,这意味着某人在某个时刻调用了“new ...”,并使其在您的方法调用站点中可用以作为参数传递。

好的,我接受可能需要深入挖掘,但我正在尝试获得真正深入的了解。在 applets 中的 "paint()" 方法中,传递了一个 Graphics 对象。当 applet 在浏览器内运行时,Java 插件是否会创建图形对象,因为我找不到其他地方创建它的地方? - Grungefreak
@GrungeFreak:是的,这正是它所做的。JVM将与其所在的平台交互以创建Graphics对象,然后在适当的时候调用您的paint方法,并传递实例。 - casperOne

2
在你提供的两个例子中,servlet和applet代码都运行在一个容器内。Tomcat是servlet的容器,这意味着容器会提供某些功能。在这种情况下,容器将创建请求和响应对象并将其传递给您的servlet。
如果您编写一个独立运行的纯Java程序,则需要自己创建所有对象。

没错,这样解释很清楚。不过有趣的是,大多数 Java 书籍实际上根本没有解释这一点。肯定会有其他人在过去想过这个问题。无论如何还是谢谢。 - Grungefreak
@Grungefreak 我认为书中已有解释,但可能不是你所需的确切方式。这就是stackoverflow的伟大之处...你可以提出非常具体的问题,并得到适合你理解的陈述。 - Vincent Ramdhanie
是的,我完全同意。这个简短的线程为我解决了很多困惑。我假设“调用站点”一词是指调用(方法调用者)实际方法的代码部分? - Grungefreak
1
大多数入门级Java书籍不会(也不应该)使用servlet或applet来介绍Java语言的基础知识。我相信这些问题在JEE教程和教材中有所描述,但如果您没有掌握Java基础知识,那么高级JEE文本中提出的观点将会逃过您的注意。 - Stephen C

1

它是由Web服务器(例如Tomcat)创建的,并使用这些参数调用您的Servlet。


0

对象在调用处被创建。也就是说,调用方法的人负责创建他或她作为参数传递给方法的对象(当然,如果他传递已存在的对象,那么这些对象之前也已经被创建过了)。


一般来说,这并不是真的。对象的创建可以发生在许多不同的地方。它不必在调用站点上发生。只是调用站点必须能够访问所创建的对象,以便将其作为参数传递。 - casperOne
@casperOne:这就是为什么我写了“除非他传递已经存在的对象”。 - sepp2k

0

Servlet中的所有方法都是由Servlet容器(如Tomcat)调用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接