我一直认为类的客户端是使用引用来访问该类的实例字段/方法,即另一个类(来自其自己的方法).但是当我想到一些细节时,有一些我无法弄清楚的事情.
在Java中,我知道一些可以放置动作语句的地方.
也许还有更多我不知道或不记得的东西.
问题的第一部分是所有这些被认为是客户,如果他们在另一个班级?当他们在同一个班级时,他们也可以访问私人物品吗?
第二部分是:当JVM调用方法(如main和finalize)时,它们也被认为是客户端吗?(这些电话不是来自一个班级?)
编辑:客户端只能访问公共方法和变量吗?如果它访问包字段(如果在同一个包中),我们不能称它为客户端.
Pra*_*nde 27
在深入研究Java -lets之前,尝试将情况映射到物理世界场景.
你去糕点店订购糕点.你从商店买到糕点,然后离开.你自然称自己为商店的客户.那么我们从中得到了什么呢?
术语客户端是指从另一个实体请求服务的任何实体.客户端并不关心提供服务的实体如何实际提供服务 - 只要服务可用并满足其用例,客户端就会感到满意.
因此,当类中的方法M1调用另一方法M2时,则M1是M2的客户端.类似地,当C1类请求C2的服务时,C1是C2的客户端.
关于main(),finalize()以及与JVM的交互的问题 - 您可以将JVM的类加载器视为类的客户端,因为它加载JVM类加载器将加载您的类然后请求 main方法开始执行并继续进一步处理.
基于从OP注释编辑 - finalize()方法是利用一些内部JVM技巧在JVM中的垃圾收集器访问.作为任何正常应用程序中的一般规则,将不会执行此类欺骗.
我不认为“阶级客户”存在严格的定义。我通常说“客户端代码”,即一段代码通过某种契约使用另一段代码。从这个角度来看,即使是 JVM,在调用类的finalize方法时,也可以被视为类代码的客户端代码,因为它通过Object类中定义的特定接口(其finalize方法)与类一起工作。
不管怎样,这里的重点不是你如何称呼它,而是你如何看待它。调用 JVM 作为类的客户端对您来说意味着什么,或者会影响您编写代码的方式吗?我想不是。所以我更喜欢谈论两段代码之间的契约(接口)的概念。
| 归档时间: |
|
| 查看次数: |
18223 次 |
| 最近记录: |